{"record":{"id":"b2cfdba19a66c098","repo":"risingwavelabs/risingwave","slug":"unsupported-in-catalog","errorCode":null,"errorMessage":"{} unsupported in {} catalog","messagePattern":"(.+?) unsupported in (.+?) catalog","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/connector/src/connector_common/iceberg/mod.rs","lineNumber":779,"sourceCode":"    }\n\n    /// For both V1 and V2.\n    fn build_jni_catalog_configs(\n        &self,\n        catalog_impl: JniCatalogImpl,\n        java_catalog_props: &HashMap<String, String>,\n    ) -> ConnectorResult<(HashMap<String, String>, HashMap<String, String>)> {\n        let mut iceberg_configs = HashMap::new();\n        let enable_config_load = self.enable_config_load();\n        let file_io_props = {\n            let catalog_type = catalog_impl.catalog_type();\n\n            // Non-S3/Glue object-store backends only work with a REST catalog. This\n            // function is only invoked for catalog_type in {hive, snowflake, jdbc, rest,\n            // glue}, so the only accepted value here is \"rest\".\n            let require_rest = |backend: &str| -> ConnectorResult<()> {\n                if catalog_impl != JniCatalogImpl::Rest {\n                    bail!(\"{} unsupported in {} catalog\", backend, catalog_type);\n                }\n                Ok(())\n            };\n\n            if let Some(region) = &self.s3_region {\n                // iceberg-rust\n                iceberg_configs.insert(S3_REGION.to_owned(), region.clone());\n            }\n\n            if let Some(endpoint) = &self.s3_endpoint {\n                // iceberg-rust\n                iceberg_configs.insert(S3_ENDPOINT.to_owned(), endpoint.clone());\n            }\n\n            // iceberg-rust\n            if let Some(access_key) = &self.s3_access_key {\n                iceberg_configs.insert(S3_ACCESS_KEY_ID.to_owned(), access_key.clone());\n            }","sourceCodeStart":761,"sourceCodeEnd":797,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/connector_common/iceberg/mod.rs#L761-L797","documentation":"Inside JNI catalog config building, non-S3/Glue object-store backend properties are only valid with a REST catalog. The `require_rest` closure bails with `'{backend} unsupported in {catalog_type} catalog'` when such a backend option is set for hive, snowflake, jdbc, or glue catalogs.","triggerScenarios":"Setting e.g. gcs/oss/azblob backend options (any backend where `require_rest` is invoked) while `catalog.type` is 'hive', 'snowflake', 'jdbc', or 'glue' — anything other than 'rest'.","commonSituations":"Users on GCS/Azure trying to use the Hive or Glue catalog; mixing backend props copied from a REST-catalog example into another catalog type.","solutions":["Switch to `catalog.type = 'rest'` if you need that object-store backend.","Remove the unsupported backend properties when using a non-REST catalog and rely on S3-backed Glue/Hive instead.","Consult the connector docs for the backend/catalog compatibility matrix."],"exampleFix":"// before\nwith ( connector='iceberg', catalog.type='glue', gcs.service.account='...' )\n// after\nwith ( connector='iceberg', catalog.type='rest', catalog.uri='...', gcs.service.account='...' )","handlingStrategy":"validation","validationCode":"const NON_S3_BACKEND_OPTS = ['gcs.service.account','oss.*','azblob.*'];\nif (catalogType !== 'rest' && Object.keys(opts).some(k => NON_S3_BACKEND_OPTS.some(p => new RegExp('^'+p).test(k)))) {\n  throw new Error(`backend option unsupported in ${catalogType} catalog; use catalog.type='rest'`);\n}","typeGuard":null,"tryCatchPattern":"catch (e) { if (/unsupported in .* catalog$/.test(String(e))) { /* either drop the backend option or switch catalog.type to 'rest' */ } else { throw e; } }","preventionTips":["Remember: non-S3/Glue object stores require a REST catalog.","Validate backend/catalog-type compatibility in tooling before generating DDL.","Avoid mixing option sets copied from REST-catalog examples into hive/glue/jdbc/snowflake configs."],"tags":["iceberg","catalog","compatibility"],"backgroundTag":"conflicting-config-options","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}