{"record":{"id":"6e498b223f1bbd61","repo":"risingwavelabs/risingwave","slug":"invalid-warehouse-path","errorCode":null,"errorMessage":"Invalid warehouse path: {}","messagePattern":"Invalid warehouse path: (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/connector/src/connector_common/iceberg/mod.rs","lineNumber":619,"sourceCode":"            return false;\n        }\n        self.enable_config_load.unwrap_or(false)\n    }\n\n    fn effective_s3_path_style_access(&self) -> bool {\n        // RisingWave historically inherited OpenDAL's path-style default. Iceberg now\n        // defaults to virtual-host style, so preserve existing connector behavior unless\n        // the user explicitly opts into virtual-host style with `false`.\n        self.s3_path_style_access.unwrap_or(true)\n    }\n\n    fn build_storage_catalog_config(&self) -> ConnectorResult<CatalogBuildPlan> {\n        let warehouse = self\n            .warehouse_path\n            .clone()\n            .ok_or_else(|| anyhow!(\"`warehouse.path` must be set in storage catalog\"))?;\n        let url = Url::parse(warehouse.as_ref())\n            .map_err(|_| anyhow!(\"Invalid warehouse path: {}\", warehouse))?;\n\n        let config = match url.scheme() {\n            \"s3\" | \"s3a\" => StorageCatalogConfig::S3(\n                storage_catalog::StorageCatalogS3Config::builder()\n                    .warehouse(warehouse)\n                    .access_key(self.s3_access_key.clone())\n                    .secret_key(self.s3_secret_key.clone())\n                    .region(self.s3_region.clone())\n                    .endpoint(self.s3_endpoint.clone())\n                    .path_style_access(Some(self.effective_s3_path_style_access()))\n                    .enable_config_load(Some(self.enable_config_load()))\n                    .build(),\n            ),\n            \"gs\" | \"gcs\" => StorageCatalogConfig::Gcs(\n                storage_catalog::StorageCatalogGcsConfig::builder()\n                    .warehouse(warehouse)\n                    .credential(self.gcs_credential.clone())\n                    .enable_config_load(Some(self.enable_config_load()))","sourceCodeStart":601,"sourceCodeEnd":637,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/connector_common/iceberg/mod.rs#L601-L637","documentation":"`build_storage_catalog_config` parses `warehouse.path` with the `url::Url` crate; a parse failure (unparseable, scheme-less string like '/local/path' or 'my-bucket/wh') bails with the raw value embedded in the message.","triggerScenarios":"`warehouse.path` given as a bare filesystem path, missing scheme ('bucket/warehouse'), or containing characters illegal in a URL.","commonSituations":"Using local paths instead of s3:// URIs; forgetting the scheme; typos like 's3:/bucket' (single slash); unencoded spaces or special characters in bucket keys.","solutions":["Use a fully qualified URI: 's3://bucket/warehouse', 's3a://bucket/warehouse', or an azblob URL.","Fix scheme typos (s3:// with two slashes) and URL-encode special characters.","If you intended a local path, note storage catalog requires an object-store scheme; use a supported backend."],"exampleFix":"// before\nwarehouse.path = '/data/warehouse'\n// after\nwarehouse.path = 's3://my-bucket/data/warehouse'","handlingStrategy":"validation","validationCode":"try { new URL(opts['warehouse.path']); } catch { throw new Error(`Invalid warehouse path: ${opts['warehouse.path']}`); }","typeGuard":"const isValidUrl = (s) => { try { new URL(s); return true; } catch { return false; } };","tryCatchPattern":null,"preventionTips":["Always include a full scheme in warehouse.path (s3://, s3a://).","URL-encode spaces and special characters in paths.","Test warehouse URIs with a URL parser locally before applying DDL."],"tags":["iceberg","url-validation","storage-catalog"],"backgroundTag":"invalid-url-format","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"}