{"record":{"id":"32c7c274353ee66a","repo":"risingwavelabs/risingwave","slug":"unsupported-catalog-type-only-support-storag","errorCode":null,"errorMessage":"Unsupported catalog type: {}, only support `storage`, `rest`, `hive`, `jdbc`, `glue`, `snowflake`","messagePattern":"Unsupported catalog type: (.+?), only support `storage`, `rest`, `hive`, `jdbc`, `glue`, `snowflake`","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/connector/src/connector_common/iceberg/mod.rs","lineNumber":331,"sourceCode":"\nimpl IcebergCatalogKind {\n    fn resolve(common: &IcebergCommon) -> ConnectorResult<Self> {\n        let catalog_type = common.catalog_type();\n        let kind = match catalog_type {\n            \"storage\" => Self::Storage,\n            \"rest\" if common.vended_credentials() => Self::Rest(IcebergCatalogRuntime::NativeRust),\n            \"rest\" => Self::Rest(IcebergCatalogRuntime::JavaJni),\n            \"rest_rust\" => Self::Rest(IcebergCatalogRuntime::NativeRust),\n            \"glue\" => Self::Glue(IcebergCatalogRuntime::JavaJni),\n            \"glue_rust\" => Self::Glue(IcebergCatalogRuntime::NativeRust),\n            \"hive\" => Self::Hive,\n            \"jdbc\" => Self::Jdbc,\n            \"snowflake\" => Self::Snowflake,\n            #[cfg(any(test, madsim))]\n            \"mock_v3\" => Self::Mock,\n            \"mock\" => Self::Mock,\n            _ => {\n                bail!(\n                    \"Unsupported catalog type: {}, only support `storage`, `rest`, `hive`, `jdbc`, `glue`, `snowflake`\",\n                    catalog_type\n                )\n            }\n        };\n        Ok(kind)\n    }\n\n    pub fn is_rest(self) -> bool {\n        matches!(self, Self::Rest(_))\n    }\n\n    fn jni_impl(self) -> Option<JniCatalogImpl> {\n        match self {\n            Self::Rest(IcebergCatalogRuntime::JavaJni) => Some(JniCatalogImpl::Rest),\n            Self::Glue(IcebergCatalogRuntime::JavaJni) => Some(JniCatalogImpl::Glue),\n            Self::Hive => Some(JniCatalogImpl::Hive),\n            Self::Jdbc => Some(JniCatalogImpl::Jdbc),","sourceCodeStart":313,"sourceCodeEnd":349,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/connector_common/iceberg/mod.rs#L313-L349","documentation":"`IcebergCatalog::resolve` matches the user-supplied `catalog.type` against the set of supported catalogs (storage, rest, hive, jdbc, glue, snowflake; plus test-only mocks). Any other string hits the catch-all arm and bails. It is a strict whitelist check on an enum-like config value.","triggerScenarios":"Passing `catalog.type` values such as 'hadoop', 'nessie', 'sql', 'dynamodb', or misspellings like 'REST'/'Glue' (matching is case-sensitive) into an Iceberg source/sink `with` options.","commonSituations":"Copying catalog config from iceberg-java or other engines that support catalogs RisingWave does not (Nessie, Hadoop, JDBC variants); typos or wrong casing in catalog.type.","solutions":["Change `catalog.type` to one of: storage, rest, hive, jdbc, glue, snowflake.","Fix casing/typos — values are matched case-sensitively in lowercase.","If the target catalog is genuinely unsupported (e.g. Nessie), front it via a REST catalog or use a different integration."],"exampleFix":"// before\nwith (\n  connector = 'iceberg',\n  catalog.type = 'nessie'\n)\n// after\nwith (\n  connector = 'iceberg',\n  catalog.type = 'rest',\n  catalog.uri = 'https://rest-catalog.example.com'\n)","handlingStrategy":"validation","validationCode":"const SUPPORTED = new Set(['storage','rest','hive','jdbc','glue','snowflake']);\nif (!SUPPORTED.has(opts['catalog.type'])) {\n  throw new Error(`catalog.type must be one of ${[...SUPPORTED].join(', ')}`);\n}","typeGuard":"const isCatalogType = (v) => ['storage','rest','hive','jdbc','glue','snowflake'].includes(v);","tryCatchPattern":"catch (e) { if (String(e).includes('Unsupported catalog type')) { /* surface allowed values */ } else { throw e; } }","preventionTips":["Keep catalog.type values lowercase and copy from the supported list in docs.","Use an enum/whitelist in tooling that generates RisingWave DDL.","Verify catalog support per RisingWave version before upgrading catalogs."],"tags":["iceberg","catalog","config-validation"],"backgroundTag":"invalid-enum-value","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"}