risingwavelabs/risingwave · error · FeatureNotAvailable
feature is not available due to license error
Error message
feature {feature:?} is not available due to license error What it means
FeatureNotAvailable::LicenseError wraps a lower-level LicenseError that occurred while evaluating whether a feature is available (e.g. the license key is corrupt, expired, or fails signature validation). Unlike NotAvailable, the gate itself could not be evaluated because license processing failed.
Solutions
- Check the wrapped source LicenseError for the exact cause (expired vs malformed).
- Re-set the license key: ALTER SYSTEM SET license_key = '<valid key>';
- Verify the key has not expired and matches the deployment/tenant.
- Contact RisingWave support if a valid key still fails validation.
Example fix
-- before ALTER SYSTEM SET license_key = 'corrupt-or-expired-key'; -- after ALTER SYSTEM SET license_key = 'currently-valid-license-key';
Defensive patterns
Strategy: try-catch
Validate before calling
Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("SHOW license_key"); if (rs.next()) validateKeyFormat(rs.getString(1)); Try / catch
try { enableFeature(); } catch (SQLException e) { if (e.getMessage().contains("due to license error")) { /* re-set or replace license key */ } } Prevention
- Copy license keys carefully (no truncation/whitespace)
- Track license expiry dates and renew before they lapse
- Log and inspect the wrapped source LicenseError for root cause
When it happens
Trigger: Attempting to use a gated feature while the stored license key fails to load/validate — expired key, malformed key string, or signature verification failure inside the license module.
Common situations: Typo or truncation when pasting the license key into ALTER SYSTEM SET; license expired between checks; license service/tenant mismatch.
Related errors
- feature is not available based on your license Hint: You…
- {0}
- a valid license key is set, but it is currently not…
- a valid license key is set, but it is currently not…
- ALTER SINK_RATE_LIMIT is not for sink into table
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/5ddfbf32b21a56a0.
Report an issue: GitHub.
Appendix: source
Thrown at src/license/src/feature.rs:81
/// Get a slice of all features available as of 2.5 (before we introduce custom tier).
pub(crate) fn all_as_of_2_5() -> &'static [Feature] {
// `IcebergCompaction` was the last feature introduced.
&Feature::all()[..=Feature::IcebergCompaction as usize]
}
}
/// The error type for feature not available due to license.
#[derive(Debug, Error)]
pub enum FeatureNotAvailable {
// TODO(license): refine error message to include tier name & better instructions
#[error(
"feature {feature:?} is not available based on your license\n\n\
Hint: You may want to set a license key with `ALTER SYSTEM SET license_key = '...';` command. For more information, visit https://go.risingwave.com/premium."
)]
NotAvailable { feature: Feature },
#[error("feature {feature:?} is not available due to license error")]
LicenseError {
feature: Feature,
source: LicenseError,
},
}
impl Feature {
/// Check whether the feature is available based on the given license manager.
pub(crate) fn check_available_with(
self,
manager: &LicenseManager,
) -> Result<(), FeatureNotAvailable> {
let check_res = match manager.license() {
Ok(license) => {
if license.tier.available_features().any(|x| x == self) {
Ok(())
} else {
Err(FeatureNotAvailable::NotAvailable { feature: self })View on GitHub (pinned to 6469eb736d)