{"record":{"id":"f553ccf238b3c626","repo":"influxdata/influxdb","slug":"valid-object-store-url","errorCode":null,"errorMessage":"valid object store URL","messagePattern":"valid object store URL","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/parquet_file/src/storage.rs","lineNumber":427,"sourceCode":"            \"Created and uploaded parquet file (parallelized)\"\n        );\n\n        Ok((parquet_meta, file_size))\n    }\n\n    /// Inputs for [`DataSourceExec`].\n    ///\n    /// See [`DataSourceExecInput`] for more information.\n    ///\n    /// [`DataSourceExec`]: datafusion::datasource::memory::DataSourceExec\n    pub fn data_source_exec_input(\n        &self,\n        path: &ParquetFilePath,\n        file_size: u64,\n    ) -> DataSourceExecInput {\n        DataSourceExecInput {\n            object_store_url: ObjectStoreUrl::parse(format!(\"iox://{}/\", self.id))\n                .expect(\"valid object store URL\"),\n            object_store: Arc::clone(&self.object_store),\n            object_meta: ObjectMeta {\n                location: path.object_store_path(),\n                // we don't care about the \"last modified\" field\n                last_modified: Default::default(),\n                size: file_size,\n                e_tag: None,\n                version: None,\n            },\n        }\n    }\n}\n\n/// Error during projecting parquet file data to an expected schema.\n#[derive(Debug, Error)]\npub enum ProjectionError {\n    /// Unknown field.\n    #[error(\"Unknown field: {0}\")]","sourceCodeStart":409,"sourceCodeEnd":445,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/core/parquet_file/src/storage.rs#L409-L445","documentation":"DataSourceExecInput construction parses an object store URL built from the store's id (iox://{id}/). ObjectStoreUrl::parse only fails for malformed URLs, so this expect fires only if the store id contains characters that make the resulting URL invalid (spaces, control chars, bad percent-encoding).","triggerScenarios":"Creating a DataSourceExecInput from a ParquetStorage whose internal id string is not a valid URL host/authority component.","commonSituations":"Ids sourced from user input, config, or catalog metadata containing whitespace, slashes beyond the template, or unencoded special characters.","solutions":["Validate/sanitize the storage id when the store is created so it is URL-safe","Percent-encode the id before interpolation","Fix upstream metadata that assigned a malformed id"],"exampleFix":"// before\nObjectStoreUrl::parse(format!(\"iox://{}/\", self.id)).expect(\"valid object store URL\")\n// after\nlet id = percent_encode(self.id.as_bytes(), NON_ALPHANUMERIC);\nObjectStoreUrl::parse(format!(\"iox://{}/\", id)).expect(\"valid object store URL\")","handlingStrategy":"validation","validationCode":"fn is_url_safe(id: &str) -> bool { !id.is_empty() && id.bytes().all(|b| b.is_ascii_alphanumeric() || b == b'-' || b == b'_' || b == b'.') }","typeGuard":"fn valid_store_id(id: &str) -> Option<&str> { if is_url_safe(id) { Some(id) } else { None } }","tryCatchPattern":null,"preventionTips":["Validate store ids as URL-safe at store creation time","Avoid building ids from raw user or catalog input"],"tags":["panic","url","object-store","parquet"],"backgroundTag":"invalid-url-format","analyzedSha":"06200ef96ba82c5f6727e5038a83af8e722c6875","analyzedAt":"2026-09-19T12:55:30.003Z","contentChangedAt":"2026-09-19T12:55:30.003Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}