{"record":{"id":"babfb76e42b956d3","repo":"influxdata/influxdb","slug":"object-meta-is-missing-filename","errorCode":null,"errorMessage":"object meta is missing filename","messagePattern":"object meta is missing filename","errorType":"error_code","errorClass":"PersisterError","httpStatus":null,"severity":"error","filePath":"influxdb3_write/src/persister.rs","lineNumber":80,"sourceCode":"    #[error(\"tried to serialize a parquet file with no rows\")]\n    NoRows,\n\n    #[error(\"parse int error: {0}\")]\n    ParseInt(#[from] std::num::ParseIntError),\n\n    #[error(\"unexpected persister error: {0:?}\")]\n    Unexpected(#[from] anyhow::Error),\n\n    #[error(\"table snapshot persistence task panicked: {0}\")]\n    TableSnapshotPersistenceTaskFailed(#[source] tokio::task::JoinError),\n\n    #[error(\"snapshot manifest parse task panicked: {0}\")]\n    SnapshotParseTaskFailed(#[source] tokio::task::JoinError),\n\n    #[error(\"table index error: {0}\")]\n    TableIndexPathError(#[source] crate::paths::PathError),\n\n    #[error(\"object meta is missing filename\")]\n    MissingFilename,\n\n    #[error(\"failed to parse snapshot sequence number from filename\")]\n    InvalidSnapshotSequenceNumber,\n}\n\nimpl From<PersisterError> for DataFusionError {\n    fn from(error: PersisterError) -> Self {\n        match error {\n            PersisterError::DataFusion(e) => e,\n            PersisterError::ObjectStore(e) => DataFusionError::ObjectStore(Box::new(e)),\n            PersisterError::ParquetError(e) => DataFusionError::ParquetError(Box::new(e)),\n            _ => DataFusionError::External(Box::new(error)),\n        }\n    }\n}\n\npub type Result<T, E = PersisterError> = std::result::Result<T, E>;","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_write/src/persister.rs#L62-L98","documentation":"PersisterError::MissingFilename is thrown when an ObjectMeta returned by the object store listing API has no file name in its Location. During snapshot enumeration the persister relies on the object's filename to extract metadata (e.g. snapshot sequence numbers), so a nameless location is treated as unusable. This indicates a listing result that does not conform to the expected object-store key layout.","triggerScenarios":"Iterating ListResult entries from the object store while scanning snapshot prefixes, where entry.location.filename() returns None and the code maps that to MissingFilename before parsing snapshot metadata.","commonSituations":"Using an in-memory or test object store configured with unusual key formats; listing a prefix that contains directory-like keys without filenames; object-store backend quirks producing locations the filename() helper cannot split.","solutions":["Inspect the listed object-store prefix for keys that lack a filename segment (trailing or malformed keys)","Remove or rewrite non-conforming keys so every object has a canonical filename","Upgrade the object_store crate / backend if listing is returning malformed Location values","Check that the configured bucket/prefix is dedicated to InfluxDB3 snapshots and not shared with other data"],"exampleFix":"// before: mixing other data into the snapshot prefix\nsnapshots/some/other/data\n// after: only canonical snapshot objects under the prefix\nsnapshots/0000012.persisted_snapshot.json","handlingStrategy":"type-guard","validationCode":"// after listing, verify every object has a usable filename\nfor obj in list_result {\n    if obj.location.filename().is_none() { /* quarantine/delete key */ }\n}","typeGuard":"fn has_filename(meta: &object_store::ObjectMeta) -> bool {\n    meta.location.filename().is_some()\n}","tryCatchPattern":"match res {\n    Err(PersisterError::MissingFilename) => {\n        log::warn(\"skipping object without filename in snapshot listing\");\n        continue;\n    }\n    other => other?,\n}","preventionTips":["Keep dedicated prefixes for InfluxDB3 snapshot data","Avoid directory-like keys without filenames in snapshot prefixes","Use standard object-store SDKs that produce well-formed Locations","Audit bucket contents before pointing a writer at it"],"tags":["object-store","object-meta","listing","persistence"],"backgroundTag":"unexpected-response-shape","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"}