{"record":{"id":"13c100595a851628","repo":"influxdata/influxdb","slug":"wal-buffer-full-with-0-ops","errorCode":null,"errorMessage":"wal buffer full with {0} ops","messagePattern":"wal buffer full with (.+?) ops","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"influxdb3_wal/src/lib.rs","lineNumber":37,"sourceCode":"use influxdb3_id::{ColumnId, DbId, SerdeVecMap, TableId};\nuse influxdb3_shutdown::ShutdownToken;\nuse iox_time::Time;\nuse rustc_hash::FxHasher;\nuse serde::{Deserialize, Serialize};\nuse serde_with::serde_as;\nuse std::cmp::Ordering;\nuse std::fmt::Debug;\nuse std::hash::BuildHasherDefault;\nuse std::str::FromStr;\nuse std::sync::Arc;\nuse std::time::Duration;\nuse std::{any::Any, num::ParseIntError};\nuse thiserror::Error;\nuse tokio::sync::{OwnedSemaphorePermit, oneshot};\n\n#[derive(Debug, Error)]\npub enum Error {\n    #[error(\"wal buffer full with {0} ops\")]\n    BufferFull(usize),\n\n    #[error(\"error writing wal file: {0}\")]\n    WriteError(String),\n\n    #[error(\"deserialize error: {0}\")]\n    Serialize(#[from] crate::serialize::Error),\n\n    #[error(\"join error: {0}\")]\n    Join(#[from] tokio::task::JoinError),\n\n    #[error(\"object store error: {0}\")]\n    ObjectStoreError(#[from] ::object_store::Error),\n\n    #[error(\"wal is shutdown and not accepting writes\")]\n    Shutdown,\n\n    #[error(\"invalid gen1 duration {0}. Must be one of 1m, 5m, 10m\")]","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_wal/src/lib.rs#L19-L55","documentation":"Error::BufferFull in influxdb3_wal is thrown when the WAL's buffered writes exceed its configured capacity — the message reports how many ops are currently buffered. WAL writes are admitted through a bounded buffer (semaphore-backed); once full, new writes cannot be accepted until the buffer drains.","triggerScenarios":"Calling WalBuffer::write (via the write API) while the WAL buffer already holds its maximum number of operations and cannot obtain a permit — typically when the WAL flush/writer task is blocked or too slow.","commonSituations":"Disk full or slow disk stalling WAL flushes, WAL writer task deadlocked/panicked, burst traffic exceeding buffer size, wal_buffer_size configured too small for the workload.","solutions":["Check WAL writer task health and disk I/O; restart the node if the writer is stuck","Increase the WAL buffer size configuration to absorb bursts","Back-pressure writes client-side (retry with backoff) and ensure flushing keeps up"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// pre-check not reliable (racy); instead bound concurrency:\nif in_flight_ops >= max_wal_buffer_ops { schedule_retry_with_backoff(); }","typeGuard":null,"tryCatchPattern":"match wal.write(op).await {\n    Ok(_) => {},\n    Err(Error::BufferFull(n)) => { backoff_retry(n); },\n    Err(e) => return Err(e),\n}","preventionTips":["Monitor WAL buffer occupancy and disk flush latency","Size wal_buffer_size for peak burst traffic","Alert on WAL writer task stalls; apply client back-pressure"],"tags":["wal","buffer","backpressure","rust"],"backgroundTag":"resource-exhausted","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"}