{"record":{"id":"e4fc30d2b9157436","repo":"quickwit-oss/quickwit","slug":"shard-burst-limit-must-be-at-least-1-5-conten","errorCode":null,"errorMessage":"shard_burst_limit ({}) must be at least 1.5*content_length_limit ({})","messagePattern":"shard_burst_limit \\((.+?)\\) must be at least 1\\.5\\*content_length_limit \\((.+?)\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-config/src/node_config/mod.rs","lineNumber":837,"sourceCode":"            \"ingestion shard throughput limit: {}\",\n            self.shard_throughput_limit.display().si()\n        );\n        ensure!(\n            self.shard_throughput_limit >= ByteSize::mib(1)\n                && self.shard_throughput_limit <= ByteSize::mib(20),\n            \"shard_throughput_limit ({}) must be within 1mb and 20mb\",\n            self.shard_throughput_limit.display().si()\n        );\n        // The newline delimited format is persisted as something a bit larger\n        // (lines prefixed with their length)\n        let estimated_persist_size = ByteSize::b(3 * self.content_length_limit.as_u64() / 2);\n        ensure!(\n            self.shard_burst_limit >= estimated_persist_size,\n            \"shard_burst_limit ({}) must be at least 1.5*content_length_limit ({})\",\n            self.shard_burst_limit,\n            estimated_persist_size,\n        );\n        ensure!(\n            self.shard_scale_up_factor > 1.0,\n            \"shard_scale_up_factor ({}) must be greater than 1\",\n            self.shard_scale_up_factor,\n        );\n        Ok(())\n    }\n}\n\n#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct JaegerConfig {\n    /// Enables the gRPC endpoint that allows the Jaeger Query Service to connect and retrieve\n    /// traces.\n    #[serde(default = \"JaegerConfig::default_enable_endpoint\")]\n    pub enable_endpoint: bool,\n    /// How far back in time we look for spans when queries at not time-bound (`get_services`,\n    /// `get_operations`, `get_trace` operations).\n    #[serde(default = \"JaegerConfig::default_lookback_period_hours\")]","sourceCodeStart":819,"sourceCodeEnd":855,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-config/src/node_config/mod.rs#L819-L855","documentation":"Quickwit validates that the indexing service's `shard_burst_limit` is at least the estimated per-shard persist size (derived as 1.5x the ingest API content-length limit). If the configured burst limit is smaller than the estimated persist size, a single ingest request could exceed the shard's capacity and indexing would fail, so node config validation rejects it at startup.","triggerScenarios":"Loading a node config (load_node_config_with_env -> NodeConfig validation) where `indexer.shard_burst_limit` (or equivalent) is set lower than the estimated persist size computed from the ingest `content_length_limit`.","commonSituations":"Operators tune shard_burst_limit down to throttle indexing throughput without realizing it is coupled to the ingest API content-length limit; configs copied from small deployments then reused with a larger content_length_limit.","solutions":["Raise `shard_burst_limit` in the node config so it is >= 1.5 * the ingest content_length_limit (the value shown in the message).","Alternatively lower the ingest `content_length_limit` so the estimated persist size fits within the configured shard_burst_limit.","Remove the custom override entirely and rely on the default derived relationship between the two settings."],"exampleFix":"// before (quickwit.yaml)\nindexer:\n  shard_burst_limit: 5000000   # 5MB\n# ingest content_length_limit: 20000000 (20MB) -> needs >= 30MB\n\n// after (quickwit.yaml)\nindexer:\n  shard_burst_limit: 30000000  # 30MB, >= 1.5 * content_length_limit","handlingStrategy":"validation","validationCode":"let estimated_persist_size = 3 * ingest_config.content_length_limit / 2;\nassert!(indexer_config.shard_burst_limit >= estimated_persist_size,\n    \"shard_burst_limit must be >= 1.5 * content_length_limit\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Derive shard_burst_limit from content_length_limit in generated configs instead of hardcoding it.","Document the 1.5x coupling wherever either knob is documented.","Validate node configs in CI with `quickwit run --dry-run`-style config load before deploy."],"tags":["config","validation","indexing","rust"],"backgroundTag":"invalid-config-value","analyzedSha":"a39730c5cdcd1a4fe798403737ae293999ea21f8","analyzedAt":"2026-09-08T13:19:37.784Z","contentChangedAt":"2026-09-08T13:19:37.784Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}