{"record":{"id":"568d9960b60650c4","repo":"influxdata/influxdb","slug":"cannot-write-to-a-compactor-only-server","errorCode":null,"errorMessage":"cannot write to a compactor-only server","messagePattern":"cannot write to a compactor-only server","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"influxdb3_write/src/write_buffer/mod.rs","lineNumber":140,"sourceCode":"        table_name: Arc<str>,\n    },\n\n    #[error(\"tried accessing column with name ({0}) that does not exist\")]\n    ColumnDoesNotExist(String),\n\n    #[error(\n        \"updating catalog on delete of last cache failed, you will need to delete the cache \\\n        again on server restart\"\n    )]\n    DeleteLastCache(#[source] CatalogError),\n\n    #[error(\"error from wal: {0}\")]\n    WalError(#[from] influxdb3_wal::Error),\n\n    #[error(\"error in distinct value cache: {0}\")]\n    DistinctCacheError(#[from] distinct_cache::ProviderError),\n\n    #[error(\"cannot write to a compactor-only server\")]\n    NoWriteInCompactorOnly,\n\n    #[error(\"error: {0}\")]\n    AnyhowError(#[from] anyhow::Error),\n\n    #[error(\"write not allowed on internal database\")]\n    InternalDbWriteNotAllowed,\n}\n\npub type Result<T, E = Error> = std::result::Result<T, E>;\n\n#[derive(Debug)]\npub struct WriteRequest<'a> {\n    pub db_name: DatabaseName,\n    pub line_protocol: &'a str,\n    pub default_time: u64,\n}\n","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_write/src/write_buffer/mod.rs#L122-L158","documentation":"This error is returned when a write request is sent to a server started in compactor-only mode. Compactor-only servers run solely background compaction and do not accept ingests by design, so any write is rejected up front.","triggerScenarios":"Pointing a writer/telegraf/HTTP client at a node launched with a compactor-only configuration (processing-engine/server roles where write ingestion is disabled).","commonSituations":"Misconfigured client pointing at the wrong node in a clustered deployment; load balancer routing write traffic to compactor nodes; forgetting to change the server role after repurposing a node.","solutions":["Send writes to a node running in ingest/write-capable mode instead","Fix the load balancer/client config to route writes to ingest nodes","Reconfigure/restart the target server with write capability if it should accept writes","Verify server role configuration before deploying clients"],"exampleFix":"// before\nlet client = InfluxDb3Client::new(\"http://compactor-node:8181\");\n// after\nlet client = InfluxDb3Client::new(\"http://ingest-node:8181\");","handlingStrategy":"validation","validationCode":"// verify the target node accepts writes before sending\ncapabilities, _ := http.Get(nodeUrl + \"/health\")\n// only route writes to nodes whose role includes ingest","typeGuard":null,"tryCatchPattern":"match buffer.write(db, lines) {\n    Err(WriteBufferError::NoWriteInCompactorOnly) => {\n        eprintln!(\"target is compactor-only; route writes to an ingest node\");\n    }\n    other => other?,\n}","preventionTips":["Separate ingest vs compactor endpoints in client config","Configure load balancers to route write traffic only to ingest nodes","Document server roles so operators don't point writers at compactors"],"tags":["configuration","compactor","write","topology"],"backgroundTag":"unsupported-operation","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"}