{"record":{"id":"b45086a78bff0159","repo":"influxdata/influxdb","slug":"parquet-error-0","errorCode":null,"errorMessage":"parquet error: {0}","messagePattern":"parquet error: (.+?)","errorType":"error_code","errorClass":"PersisterError","httpStatus":null,"severity":"error","filePath":"influxdb3_write/src/persister.rs","lineNumber":59,"sourceCode":"use parking_lot::RwLock;\nuse parquet::arrow::ArrowWriter;\nuse parquet::basic::Compression;\nuse parquet::file::metadata::ParquetMetaData;\nuse parquet::file::properties::WriterProperties;\nuse tokio::sync::Semaphore;\n\n#[derive(Debug, thiserror::Error)]\npub enum PersisterError {\n    #[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}\")]","sourceCodeStart":41,"sourceCodeEnd":77,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_write/src/persister.rs#L41-L77","documentation":"PersisterError::ParquetError wraps a parquet::errors::ParquetError from writing or reading Parquet data. Any failure in the arrow-parquet writer/reader used by the Persister (encoding, schema conversion, file I/O) is converted via `#[from]`.","triggerScenarios":"Persisting RecordBatches to parquet when the arrow writer fails (unsupported types, schema issues, underlying writer IO error), or reading parquet metadata/files back from the object store.","commonSituations":"RecordBatches containing types the parquet writer cannot encode; truncated/corrupt parquet files in object storage; arrow/parquet crate version mismatch; disk full while writing.","solutions":["Inspect the inner ParquetError message for the failing operation (write vs read).","Verify the RecordBatch schema uses parquet-supported types and matches the table schema.","Delete or repair corrupt/truncated parquet files in the object store.","Align arrow and parquet crate versions in the dependency tree (cargo tree -i arrow)."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// ensure the batch is non-empty and uses encodable types\nif batch.num_columns() == 0 { return Err(\"no columns\"); }\narrow::util::bench:: '' // replace with: verify schema types are parquet-encodable via parquet::arrow::ArrowWriterOptions","typeGuard":"fn is_parquet_error(e: &PersisterError) -> bool {\n    matches!(e, PersisterError::ParquetError(_))\n}","tryCatchPattern":"match persister.persist(batch).await {\n    Err(PersisterError::ParquetError(e)) => eprintln!(\"parquet encode/decode failed: {e}\"),\n    Err(e) => return Err(e.into()),\n    Ok(v) => v,\n}","preventionTips":["Restrict persisted columns to parquet-encodable arrow types.","Keep arrow and parquet crate versions aligned.","Treat truncated parquet files in object storage as corrupt and quarantine them."],"tags":["parquet","arrow","serialization","rust","wrapper-error"],"backgroundTag":"file-write-failed","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"}