{"record":{"id":"4e210b59e76dfd3f","repo":"risingwavelabs/risingwave","slug":"dynamic-snowflakesink-license-feature-unavailabl","errorCode":null,"errorMessage":"(dynamic: SnowflakeSink license feature unavailable)","messagePattern":"\\(dynamic: SnowflakeSink license feature unavailable\\)","errorType":"validation","errorClass":"SinkError","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/snowflake_redshift/snowflake.rs","lineNumber":507,"sourceCode":"            schema,\n            pk_indices,\n            is_append_only,\n            param,\n        })\n    }\n}\n\nimpl Sink for SnowflakeV2Sink {\n    type LogSinker = CoordinatedLogSinker<SnowflakeSinkWriter>;\n\n    const SINK_NAME: &'static str = SNOWFLAKE_SINK_V2;\n\n    crate::impl_validate_sink_unknown_fields!();\n\n    async fn validate(&self) -> Result<()> {\n        risingwave_common::license::Feature::SnowflakeSink\n            .check_available()\n            .map_err(|e| anyhow::anyhow!(e))?;\n        if let Some((snowflake_task_ctx, client)) =\n            self.config.build_snowflake_task_ctx_jdbc_client(\n                self.is_append_only,\n                &self.schema,\n                &self.pk_indices,\n            )?\n        {\n            let client = SnowflakeJniClient::new(client, snowflake_task_ctx);\n            client.execute_create_table().await?;\n            client.execute_create_pipe().await?;\n        }\n\n        Ok(())\n    }\n\n    fn support_schema_change() -> bool {\n        true\n    }","sourceCodeStart":489,"sourceCodeEnd":525,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/snowflake_redshift/snowflake.rs#L489-L525","documentation":"`SnowflakeSink::validate` first checks that the `SnowflakeSink` licensed feature is available via `risingwave_common::license::Feature::SnowflakeSink.check_available()`. If the deployment lacks the required license entitlement, validation fails before any connection is attempted, wrapping the license error message.","triggerScenarios":"Creating or validating a Snowflake sink on a RisingWave deployment whose license does not include the SnowflakeSink feature (e.g. trial/basic license without the enterprise feature enabled).","commonSituations":"Enterprise feature used without setting a license key; expired or downgraded license; running an open-source build where the feature is not enabled.","solutions":["Install or update the RisingWave license key that includes the Snowflake sink feature (`ALTER SYSTEM SET license_key = ...`)","If Snowflake is not needed, choose a sink connector covered by the current license","Contact RisingWave sales/support to enable the SnowflakeSink entitlement"],"exampleFix":"-- before\nCREATE SINK s INTO snowflake WITH (connector='snowflake', ...); -- license error\n-- after\nALTER SYSTEM SET license_key = '<key-with-snowflake-feature>';\nCREATE SINK s INTO snowflake WITH (connector='snowflake', ...);","handlingStrategy":"try-catch","validationCode":"if !risingwave_common::license::Feature::SnowflakeSink.is_available() {\n    // skip snowflake sink creation or prompt for license\n}","typeGuard":null,"tryCatchPattern":"match snowflake_sink.validate().await {\n    Err(e) if e.to_string().contains(\"license\") => {\n        eprintln!(\"Snowflake sink requires an enterprise license: {e}\");\n    }\n    Err(e) => return Err(e),\n    Ok(()) => { /* proceed */ }\n}","preventionTips":["Set the license key before creating enterprise-connector sinks","Gate sink creation on feature availability"],"tags":["snowflake","license","feature-gate"],"backgroundTag":"feature-not-enabled","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}