{"record":{"id":"2529b556e17e402d","repo":"risingwavelabs/risingwave","slug":"not-yet-implemented","errorCode":null,"errorMessage":"not yet implemented","messagePattern":"not yet implemented","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/connector/src/connector_common/iceberg/jni_catalog.rs","lineNumber":207,"sourceCode":"                    &namespace_jstr)\n                .with_context(|| format!(\"Failed to create namespace: {namespace}\"))?;\n\n                Ok(Namespace::new(namespace))\n            })\n        })\n        .await\n        .map_err(|e| {\n            iceberg::Error::new(\n                iceberg::ErrorKind::Unexpected,\n                \"Failed to create namespace.\",\n            )\n            .with_source(e)\n        })\n    }\n\n    /// Get a namespace information from the catalog.\n    async fn get_namespace(&self, _namespace: &NamespaceIdent) -> iceberg::Result<Namespace> {\n        todo!()\n    }\n\n    /// Check if namespace exists in catalog.\n    async fn namespace_exists(&self, namespace: &NamespaceIdent) -> iceberg::Result<bool> {\n        let inner = self.inner.clone();\n        let namespace = namespace.clone();\n        execute_blocking_jni(move || {\n            execute_with_jni_env(inner.jvm, |env| {\n                let namespace_str = namespace_to_string(&namespace);\n                let namespace_jstr = env.new_string(&namespace_str).unwrap();\n\n                let exists =\n                    call_method!(env, inner.java_catalog.as_obj(), {boolean namespaceExists(String)},\n                    &namespace_jstr)\n                    .with_context(|| format!(\"Failed to check namespace exists: {namespace}\"))?;\n\n                Ok(exists)\n            })","sourceCodeStart":189,"sourceCodeEnd":225,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/connector_common/iceberg/jni_catalog.rs#L189-L225","documentation":"`JniCatalog::get_namespace` is declared as part of the iceberg `Catalog` trait but its body is `todo!()`, so any call panics with 'not yet implemented'. The functionality was simply never implemented for the JNI-backed catalog.","triggerScenarios":"Any code path that calls `get_namespace` on a JniCatalog instance, e.g. feature flags or queries that need to fetch namespace metadata/properties.","commonSituations":"Downstream tools or future RisingWave features invoking namespace metadata lookup on a JNI Iceberg catalog; users relying on Iceberg catalog inspection that calls this trait method.","solutions":["Avoid features that call `get_namespace` on JNI-backed catalogs.","Use `namespace_exists` or `list_namespaces` instead to obtain namespace information.","Implement the method in jni_catalog.rs if you maintain the code (delegating to the Java catalog).","Wait for upstream support of this trait method for JNI catalogs."],"exampleFix":"// before\nasync fn get_namespace(&self, _namespace: &NamespaceIdent) -> iceberg::Result<Namespace> {\n    todo!()\n}\n// after\nasync fn get_namespace(&self, namespace: &NamespaceIdent) -> iceberg::Result<Namespace> {\n    // delegate to JVM and parse LoadNamespaceResponse, or return a clear unsupported error:\n    Err(iceberg::Error::new(\n        iceberg::ErrorKind::FeatureUnsupported,\n        \"get_namespace is not implemented for JNI catalog\",\n    ))\n}","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"// Guard against unimplemented capability before calling trait method\nfn supports_get_namespace(c: &dyn Catalog) -> bool {\n    // JNI-backed catalogs do not implement get_namespace\n    !c.name().contains(\"Jni\")\n}","tryCatchPattern":"// In Rust, todo!() panics — use catch_unwind if you must call dynamically\nlet result = std::panic::catch_unwind(AssertUnwindSafe(|| {\n    futures::executor::block_on(catalog.get_namespace(&ns))\n}));","preventionTips":["Do not call get_namespace on JNI-backed catalogs; prefer namespace_exists/list_namespaces.","Document catalog capability gaps in code and tests.","Prefer native (non-JNI) catalog implementations when full trait support is needed."],"tags":["iceberg","jni","unimplemented","panic"],"backgroundTag":"method-not-implemented","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"}