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

  1. Check the wrapped source LicenseError for the exact cause (expired vs malformed).
  2. Re-set the license key: ALTER SYSTEM SET license_key = '<valid key>';
  3. Verify the key has not expired and matches the deployment/tenant.
  4. 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

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


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)