{"record":{"id":"72111da633556d61","repo":"influxdata/influxdb","slug":"error-converting-object-store-id-0","errorCode":null,"errorMessage":"Error converting object_store_id: {0}","messagePattern":"Error converting object_store_id: (.+?)","errorType":"exception","errorClass":"ProtoV1ParquetFileError","httpStatus":null,"severity":"error","filePath":"core/data_types/src/lib.rs","lineNumber":1265,"sourceCode":"            row_count: v.row_count,\n            compaction_level: v.compaction_level as i32,\n            created_at: v.created_at.get(),\n            column_set: v.column_set.iter().map(|v| v.get()).collect(),\n            max_l0_created_at: v.max_l0_created_at.get(),\n            source: ParquetFileSource::to_proto(v.source),\n        }\n    }\n}\n\n/// Errors converting from a catalog proto v1 ParquetFile to [`ParquetFile`].\n#[derive(Debug, Error)]\npub enum ProtoV1ParquetFileError {\n    /// invalid partition hash id\n    #[error(\"Error converting partition_hash_id: {0}\")]\n    PartitionHashId(#[from] PartitionHashIdError),\n\n    /// invalid object store it\n    #[error(\"Error converting object_store_id: {0}\")]\n    ObjectStoreId(#[from] uuid::Error),\n\n    /// invalid compaction level\n    #[error(\"Error converting compaction level\")]\n    CompactionLevel,\n}\n\nimpl TryFrom<catalog_proto::ParquetFile> for ParquetFile {\n    type Error = ProtoV1ParquetFileError;\n\n    fn try_from(v: catalog_proto::ParquetFile) -> Result<Self, Self::Error> {\n        Ok(Self {\n            id: ParquetFileId::new(v.id),\n            namespace_id: NamespaceId::new(v.namespace_id),\n            table_id: TableId::new(v.table_id),\n            partition_id: PartitionId::new(v.partition_id),\n            partition_hash_id: v.partition_hash_id[..].try_into()?,\n            object_store_id: ObjectStoreId::from_str(&v.object_store_id)?,","sourceCodeStart":1247,"sourceCodeEnd":1283,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/core/data_types/src/lib.rs#L1247-L1283","documentation":"ProtoV1ParquetFileError::ObjectStoreId is raised when the object_store_id field of a proto v1 ParquetFile cannot be parsed as a valid UUID during conversion to the native ParquetFile type (the uuid::Error is wrapped).","triggerScenarios":"Converting a v1 ParquetFile proto whose object_store_id is not a well-formed UUID — empty string, wrong format, or invalid characters.","commonSituations":"Catalog records corrupted or hand-edited with invalid UUIDs; protos from tools writing ids in a non-canonical format; failed migrations that left placeholder values in object_store_id.","solutions":["Correct the object_store_id in the proto to a valid canonical UUID string","Re-write the ParquetFile record with the proper object store UUID from the object store registry","Add validation at write time so only parseable UUIDs are persisted"],"exampleFix":"// before (proto)\nobject_store_id: \"store-123\"\n// after\nobject_store_id: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\"","handlingStrategy":"validation","validationCode":"fn object_store_id_ok(s: &str) -> bool {\n    uuid::Uuid::parse_str(s).is_ok()\n}","typeGuard":null,"tryCatchPattern":"let pf = ParquetFile::try_from(proto).map_err(|e| match e {\n    ProtoV1ParquetFileError::ObjectStoreId(src) => anyhow!(\"bad object_store_id: {}\", src),\n    other => anyhow!(other),\n})?;","preventionTips":["Persist object_store_id only as canonical UUID strings","Validate UUIDs at proto-construction time, not just at read time","Use typed Uuid values throughout instead of free-form strings"],"tags":["rust","protobuf","uuid","catalog"],"backgroundTag":"invalid-identifier-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"}