{"record":{"id":"b7d50807016c99ea","repo":"influxdata/influxdb","slug":"unexpected-persister-error-0","errorCode":null,"errorMessage":"unexpected persister error: {0:?}","messagePattern":"unexpected persister error: (.+?)","errorType":"error_code","errorClass":"PersisterError","httpStatus":null,"severity":"error","filePath":"influxdb3_write/src/persister.rs","lineNumber":68,"sourceCode":"    #[error(\"datafusion error: {0}\")]\n    DataFusion(#[from] DataFusionError),\n\n    #[error(\"serde_json error: {0}\")]\n    SerdeJson(#[from] serde_json::Error),\n\n    #[error(\"object_store error: {0}\")]\n    ObjectStore(#[from] object_store::Error),\n\n    #[error(\"parquet error: {0}\")]\n    ParquetError(#[from] parquet::errors::ParquetError),\n\n    #[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","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_write/src/persister.rs#L50-L86","documentation":"PersisterError::Unexpected wraps an anyhow::Error for any unexpected error inside the Persister that is not covered by a specific variant. It renders the error with Debug formatting (`{0:?}`) to include the full error chain and context.","triggerScenarios":"Any `.context(...)?`-propagated anyhow error inside persister code paths — logic bugs, invariant violations, or operations lacking a dedicated PersisterError variant.","commonSituations":"Hitting an unhandled edge case during persistence (e.g. inconsistent metadata, unexpected object-store state); bugs in influxdb3 itself; mixed internal state after a partial failure.","solutions":["Read the full Debug chain in the message; the anyhow context strings reveal which operation failed.","Reproduce with the same input/data and file an issue if it looks like an influxdb3 bug.","Check for partial writes left by earlier failures in the object store and clean them up.","Upgrade influxdb3 — many 'unexpected' cases become typed errors or get fixed over time."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"fn is_unexpected(e: &PersisterError) -> bool {\n    matches!(e, PersisterError::Unexpected(_))\n}","tryCatchPattern":"match persister.persist(...).await {\n    Err(e) => {\n        // Debug format carries the full anyhow chain\n        log::error!(\"persister failed: {:?}\", e);\n        if let PersisterError::Unexpected(inner) = &e {\n            log::error!(\"root cause: {:?}\", inner);\n        }\n    }\n    Ok(v) => v,\n}","preventionTips":["Log the full Debug output — the anyhow context chain points to the failing operation.","Clean up partially-written objects after any persistence failure.","Keep influxdb3 updated; unexpected variants often become typed errors."],"tags":["anyhow","internal","unexpected","rust","wrapper-error"],"backgroundTag":"internal-invariant-violation","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"}