{"record":{"id":"b1d612e24b381425","repo":"tursodatabase/turso","slug":"need-at-least-one-query-per-connection-main","errorCode":null,"errorMessage":"need at least one query per connection","messagePattern":"need at least one query per connection","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"perf/fts/src/main.rs","lineNumber":82,"sourceCode":"    };\n    runtime.block_on(run(args))\n}\n\nasync fn run(mut args: Args) -> Result<()> {\n    let (query_limit, min_seconds) = match args.benchmark {\n        Benchmark::Search => {\n            ensure!(\n                args.seconds.is_none(),\n                \"--seconds requires --benchmark throughput\"\n            );\n            let queries = args\n                .queries\n                .unwrap_or(if matches!(args.state, QueryState::First) {\n                    args.connections\n                } else {\n                    10_000\n                });\n            ensure!(\n                queries >= args.connections,\n                \"need at least one query per connection\"\n            );\n            ensure!(\n                !matches!(args.state, QueryState::First) || queries == args.connections,\n                \"first-query latency requires one query per connection\"\n            );\n            (queries, 0.0)\n        }\n        Benchmark::Throughput => {\n            ensure!(\n                args.queries.is_none(),\n                \"--queries requires --benchmark search\"\n            );\n            ensure!(\n                matches!(args.state, QueryState::Warm),\n                \"throughput requires --state warm\"\n            );","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/tursodatabase/turso/blob/8d4a589f8d13ac184700d2a8f724f27e1995be3b/perf/fts/src/main.rs#L64-L100","documentation":"In search-benchmark mode, the total number of queries is distributed across --connections worker connections. ensure! at perf/fts/src/main.rs:82 requires queries >= connections so every connection executes at least one query; otherwise some connections would idle and the per-connection workload would be ill-defined.","triggerScenarios":"Running with an explicitly low --queries value smaller than --connections, e.g. `fts-bench --connections 8 --queries 4`. Also happens when the default query count (connections for first-query state, otherwise 10000) is overridden below the connection count.","commonSituations":"Smoke-testing with tiny --queries values while leaving the default or high --connections count; scaling connections up without scaling queries; CI scripts with fixed small query counts.","solutions":["Increase --queries to at least --connections","Reduce --connections to be at most --queries","Omit --queries to use the default (connections for --state first, 10000 otherwise)"],"exampleFix":"// before\nfts-bench --connections 16 --queries 8\n// after\nfts-bench --connections 16 --queries 16","handlingStrategy":"validation","validationCode":"if queries < connections { panic!(\"--queries must be >= --connections ({queries} < {connections})\"); }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Derive --queries from --connections in scripts (queries = connections * k)","Never smoke-test with queries below the connection count","Clamp queries upward in wrapper scripts: queries = max(queries, connections)"],"tags":["cli","argument-validation","benchmark","concurrency"],"backgroundTag":"invalid-argument-value","analyzedSha":"8d4a589f8d13ac184700d2a8f724f27e1995be3b","analyzedAt":"2026-09-20T13:18:14.658Z","contentChangedAt":"2026-09-20T13:18:14.658Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}