tursodatabase/turso · error · ValueError
search results require at least one sample per connection…
Error message
search results require at least one sample per connection and the requested query count
What it means
For benchmark='search' rows, the script requires 0 < connections <= queries and queries == requested_queries so every connection has at least one latency sample and the planned query count was actually executed. Otherwise percentile latency would be computed over an incomplete or inconsistent sample set.
Solutions
- Re-run the search benchmark so all requested queries complete on every connection
- Fix connections/queries/requested_queries columns to satisfy connections <= queries and queries == requested_queries
- Remove incomplete search rows from the CSV
Example fix
// before (CSV) benchmark=search,queries=10,requested_queries=100,connections=20 // after benchmark=search,queries=100,requested_queries=100,connections=20
Defensive patterns
Strategy: validation
Validate before calling
def validate_search_row(row):
q, rq, c = int(row["queries"]), int(row["requested_queries"]), int(row["connections"])
if not 0 < c <= q or q != rq:
raise ValueError("search results require at least one sample per connection and the requested query count") Type guard
def is_valid_search_row(row) -> bool:
q, rq, c = int(row["queries"]), int(row["requested_queries"]), int(row["connections"])
return 0 < c <= q and q == rq Try / catch
try:
configuration, runs = read_runs(path, percentile)
except ValueError as e:
print(f"incomplete search run: {e}") Prevention
- Verify the benchmark finished all requested queries before saving results
- Keep connections <= total queries when configuring runs
- Sanity-check executed query counts after each run
When it happens
Trigger: A search row where connections exceeds queries, connections is zero/negative, or executed queries differ from requested_queries.
Common situations: Benchmark aborted early so fewer queries ran than requested; connections set higher than the query count; misconfigured requested_queries column.
Understand the failure class
Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.
Related errors
- heap results require Turso and the requested queries per…
- profiled timings must not be used for benchmark comparisons
- throughput results must meet a positive minimum duration
- batch mode must be one of
- batch mode must be one of
AI-assisted analysis of tursodatabase/turso@8d4a589f8d (2026-09-20).
Data as JSON: /api/errors/70ec6f095ab2a9c6.
Report an issue: GitHub.
Appendix: source
Thrown at perf/fts/plot/plot-fts.py:132
seen.add(query)
series[query].append(read_measurement(row, percentile))
if not runs:
raise ValueError(f"{path}: no results found")
return configuration, runs
def read_measurement(row, percentile):
queries = int(row["queries"])
positive_number(queries)
if row["benchmark"] != "memory":
seconds = positive_number(row["seconds"])
if row["benchmark"] == "memory":
if row["engine"] != "turso" or queries != int(row["requested_queries"]) * int(row["connections"]):
raise ValueError("heap results require Turso and the requested queries per connection")
value = float(row["peak_heap_bytes"]) / (1024 * 1024)
elif row["benchmark"] == "search":
if not 0 < int(row["connections"]) <= queries or queries != int(row["requested_queries"]):
raise ValueError("search results require at least one sample per connection and the requested query count")
value = float(row[f"{percentile}_ms"])
elif row["benchmark"] == "throughput":
minimum = positive_number(row["min_seconds"])
if seconds < minimum:
raise ValueError("throughput results must meet a positive minimum duration")
value = queries / seconds
else:
raise ValueError("unknown benchmark")
return positive_number(value)
def positive_number(value):
value = float(value)
if not np.isfinite(value) or value <= 0:
raise ValueError("measurements must be finite and positive")
return value
View on GitHub (pinned to 8d4a589f8d)