t8y2/dbx · error · RuntimeError
{candidate.name} {method}: {json.dumps(response['error'])}
Error message
{candidate.name} {method}: {json.dumps(response['error'])} What it means
When the agent replies with a JSON-RPC response whose `error` field is non-null, AgentProcess.call re-raises it as a RuntimeError formatted as "<candidate> <method>: <json error>". It surfaces server-side JSON-RPC application errors from the agent to the benchmark driver.
Source
Thrown at agents/drivers/argo-go/bench/agent_compare.py:106
"id": request_id,
"method": method,
"params": params or {},
}
try:
assert self.process.stdin is not None
with self.write_lock:
self.process.stdin.write(json.dumps(request, separators=(",", ":")) + "\n")
self.process.stdin.flush()
response = response_queue.get(timeout=env_float("BENCH_RPC_TIMEOUT", 180.0))
except queue.Empty as error:
raise TimeoutError(self._failure(f"timed out during {method}")) from error
finally:
with self.request_lock:
self.pending.pop(request_id, None)
if isinstance(response, Exception):
raise response
if response.get("error") is not None:
raise RuntimeError(
f"{self.candidate.name} {method}: "
f"{json.dumps(response['error'], ensure_ascii=False)}"
)
return response.get("result")
def rss_kib(self) -> int:
if self.candidate.rss_command:
output = subprocess.check_output(
self.candidate.rss_command,
shell=True,
text=True,
).strip()
return int(output or "0")
status_path = Path(f"/proc/{self.process.pid}/status")
if status_path.is_file():
for line in status_path.read_text().splitlines():
if line.startswith("VmRSS:"):
return int(line.split()[1])View on GitHub (pinned to c0390bff16)
Solutions
- Read the embedded JSON error object in the message for the agent's error code and message and fix the request accordingly
- Validate the workload SQL and method names in configured_workloads against the agent's supported protocol
- Confirm the agent's backend (Hive/TDengine) connectivity and credentials before the run
- Catch RuntimeError per candidate in benchmark_workload and skip/mark the candidate as failed instead of aborting the whole comparison
- Pin agent and bench script versions so method/param contracts match
Example fix
// before
rows = process.call("execute_query", {"sql": sql})
// after
try:
rows = process.call("execute_query", {"sql": sql})
except RuntimeError as e:
print(f"candidate {process.candidate.name} failed RPC: {e}")
raise # or continue to next candidate Defensive patterns
Strategy: try-catch
Validate before calling
SUPPORTED_METHODS = {"execute_query", "execute_query_page", "close"}
assert workload["method"] in SUPPORTED_METHODS, f"agent does not implement {workload['method']}" Try / catch
try:
result = process.call(method, params)
except RuntimeError as e:
err = e.args[0].split(": ", 1)[-1]
detail = json.loads(err) # agent's error object: code/message
handle_rpc_error(method, detail) Prevention
- Keep the bench script's method/param names in sync with the agent's protocol version
- Validate workload SQL against the test schema before the run
- Verify backend connectivity (Hive/TDengine) before starting benchmarks
- Fail per-candidate, not globally, so one bad candidate doesn't kill the comparison
When it happens
Trigger: Any call() where the agent returns {"error": ...}: invalid SQL passed by execute_workload, unknown method name, missing/invalid params (e.g. bad agentSessionId), backend connection failure inside the agent, or probe_failure_semantics deliberately triggering an error response.
Common situations: Typo in workload method name in configured_workloads; SQL referencing a nonexistent table; agent not connected to Hive/TDengine backend; sending paged parameters the agent version doesn't support.
Related errors
- timed out during {method}
- ZooKeeper request failed with error code %d
- warm up %s/%s: %w
- Connection failed
- Connection is not valid
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/f6dfb6727aa0e19e.
Report an issue: GitHub.