risingwavelabs/risingwave · error · FeatureNotAvailable
feature {feature:?} is not available based on your license
Error message
feature {feature:?} is not available based on your license
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. What it means
The OpenSearch sink requires the licensed Feature::OpenSearchSink, and check_available() failed — either no license key is set or the license does not cover the OpenSearch sink feature. validate() is called when creating or running the sink and rejects the sink before any data is written. The hint directs users to set a license key via ALTER SYSTEM SET license_key.
Source
Thrown at src/connector/src/sink/elasticsearch_opensearch/opensearch.rs:78
pk_indices,
is_append_only: param.sink_type.is_append_only(),
})
}
}
impl Sink for OpenSearchSink {
type LogSinker = AsyncTruncateLogSinkerOf<ElasticSearchOpenSearchSinkWriter>;
const SINK_NAME: &'static str = OPENSEARCH_SINK;
fn validate_unknown_fields(&self) -> Result<()> {
crate::sink::validate_sink_unknown_fields(&self.config)
}
async fn validate(&self) -> Result<()> {
risingwave_common::license::Feature::OpenSearchSink
.check_available()
.map_err(|e| anyhow::anyhow!(e))?;
self.config.validate_config(&self.schema)?;
let client = self.config.build_client(Self::SINK_NAME)?;
client.ping().await?;
Ok(())
}
fn validate_alter_config(config: &BTreeMap<String, String>) -> Result<()> {
OpenSearchConfig::from_btreemap(config.clone())?;
Ok(())
}
async fn new_log_sinker(&self, _writer_param: SinkWriterParam) -> Result<Self::LogSinker> {
Ok(ElasticSearchOpenSearchSinkWriter::new(
self.config.clone(),
self.schema.clone(),
self.pk_indices.clone(),
Self::SINK_NAME,
self.is_append_only,View on GitHub (pinned to 6469eb736d)
Solutions
- Set a license key covering OpenSearch sink: ALTER SYSTEM SET license_key = '<key>';
- Obtain a RisingWave premium license (see https://go.risingwave.com/premium).
- Use the Elasticsearch sink (Feature::ElasticSearchSink) if your license covers it but not OpenSearch.
Example fix
// before (fails) CREATE SINK s FROM mv WITH (connector='opensearch', ...); -- after: activate license first ALTER SYSTEM SET license_key = 'eyJ...'; CREATE SINK s FROM mv WITH (connector='opensearch', ...);
Defensive patterns
Strategy: try-catch
Validate before calling
-- check the license feature is active before creating the sink SELECT * FROM rw_catalog.rw_license; -- verify key present and features cover opensearch_sink
Try / catch
match err { SinkError::PermissionDenied(m) if m.contains("not available based on your license") => prompt_for_license_key(), other => return Err(other) } Prevention
- Verify license coverage for premium features before designing sinks.
- Set license_key via ALTER SYSTEM as part of cluster provisioning.
- Monitor license expiry to avoid runtime failures.
When it happens
Trigger: Creating or validating an OpenSearch sink (`connector='opensearch'`) on a deployment whose license doesn't include Feature::OpenSearchSink, or without any license key.
Common situations: Running the free/community edition of RisingWave and attempting the premium OpenSearch sink; expired or downgraded license; Elasticsearch sinks work but OpenSearch is gated.
Related errors
- license feature check failed (BigQuerySink not available): w
- feature {feature:?} is not available based on your license
- license feature check failed (ClickHouseSharedEngine not ava
- Cannot find {}
- send bulk to elasticsearch failed: {:?}
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/0266e8ae4d1661e9.
Report an issue: GitHub.