From f7c08557aba0169aa2d5f0311f251a6e19c36e5e Mon Sep 17 00:00:00 2001 From: Taewoon Kim Date: Mon, 9 Nov 2026 08:39:01 +0900 Subject: [PATCH] benchmarks: the lean HTTP client is the served ArcadeDB headline, the vendor driver is not printed (#577) DECISIONS #268 and #285. make_paper_tables.load_canonical keeps the rows of the benchmark's own client and sets the vendor driver's rows aside before any dedupe, table, gate or claim, so runs_paper.csv, the paper tables and the page hold lean rows only. export_web drops the client twin plumbing, names the benchmark's own client with its source and says the other engines use their vendors' clients, refuses a frozen row or an overlay file that names another client, and says on the documents transaction table that the image-defaults arm (no lean job) was not measured through the benchmark's client. page_check gets a banned-term gate for the driver's name with a REMOVE WHEN note. Fixture, tests and the four docs that named the driver are updated. Closes #577. Co-Authored-By: Claude Sonnet 5.5 --- benchmarks/experiments/CAMPAIGN.md | 4 +- benchmarks/experiments/COMPARATORS.md | 2 +- benchmarks/experiments/PROTOCOL.md | 2 +- benchmarks/experiments/export_web.py | 195 +++++++++--------- .../fixtures/publish_2611/build_fixture.py | 59 ++++-- .../publish_2611/results/runs.jsonl.gz | Bin 268252 -> 266417 bytes benchmarks/experiments/lean_http.py | 21 +- benchmarks/experiments/make_paper_tables.py | 42 +++- benchmarks/experiments/page_check.py | 37 +++- .../experiments/test_export_client_twin.py | 147 ++++++++----- .../experiments/test_publish_2611_e2e.py | 31 +-- 11 files changed, 343 insertions(+), 197 deletions(-) diff --git a/benchmarks/experiments/CAMPAIGN.md b/benchmarks/experiments/CAMPAIGN.md index 38419a7af13..155bab603d1 100644 --- a/benchmarks/experiments/CAMPAIGN.md +++ b/benchmarks/experiments/CAMPAIGN.md @@ -213,7 +213,7 @@ Rules every campaign keeps: | 69 | One served lane gets a sensitivity arm for ArcadeDB at the image's own JVM defaults (75% heap, generational ZGC, no `-Xms`; ArcadeData/arcadedb#9167), printed beside the main arm: documents OLTP, served, the 2M-part cell, 3 repetitions | ArcadeDB served only | built (the user, DECISIONS #159): `runner.BACKENDS["arcadedb_imgdefaults_server"]` declared once in `runner.ARM_RUNS`; every served cell records `server_jvm_*` and the arm refuses to run unless the JVM reports those defaults; `fairness_check` F3b and F10 (`test_f10_restricted_arm.py`); `test_jvm_defaults_arm.py` | ArcadeData/arcadedb#9167 | | 70 | The TimescaleDB time-series arm runs `ANALYZE p` after its `(host, ts DESC)` index, inside its ingest timer, as the plain PostgreSQL arm does | TimescaleDB, the time-series lane only | **owed at the re-pin, done on repin-prep-2 (2026-10-06, the user's decision), now on main**: `l4_tsbs.py`. October's TimescaleDB l4 ingest rows (417314c18) were measured WITHOUT the ANALYZE and stay as measured | `test_ingest_prose.py`; `test_l4_analyze.py` | | 71 | The served graph arm over Bolt in place of HTTP | ArcadeDB served, the graph arm only | **decided against (DECISIONS #162 item 2)**: with the lean HTTP client (row 72) one bound read costs 121 us over HTTP against 171 to 194 us over Bolt, and upstream's question on which protocol a Python client should use (ArcadeData/arcadedb#9165) is unanswered; the branch `levers-served-bolt` (`21a6ffd47e`) stays unmerged and off by default | `.notes` repros/levers-audit-20261006/LEVERS.md | -| 72 | Every ArcadeDB SERVED arm that talks HTTP uses one persistent `http.client` connection per host (`lean_http.py`) in place of `requests.Session` | every ArcadeDB served arm that posts to the server; no comparator client moves | built (the maintainer's decision, DECISIONS #162 item 1); rows record `arcadedb_http_client` (the headline client and the lean sensitivity twin are described under row 82); `test_lean_http.py`, `test_lean_http_live.py`, `test_e4_client_axis.py`. **Owed at the re-pin:** the e4 stage re-runs, and the page prose around the table (its caption and the "wire format" paragraph) is rewritten from the new columns. October's served rows (417314c18) carry no `arcadedb_http_client` | `.notes` repros/levers-audit-20261006/LEVERS.md | +| 72 | Every ArcadeDB SERVED arm that talks HTTP uses one persistent `http.client` connection per host (`lean_http.py`) in place of `requests.Session` | every ArcadeDB served arm that posts to the server; no comparator client moves | built (the maintainer's decision, DECISIONS #162 item 1); rows record `arcadedb_http_client` (the headline client is described under row 82); `test_lean_http.py`, `test_lean_http_live.py`, `test_e4_client_axis.py`. **Owed at the re-pin:** the e4 stage re-runs, and the page prose around the table (its caption and the "wire format" paragraph) is rewritten from the new columns. October's served rows (417314c18) carry no `arcadedb_http_client` | `.notes` repros/levers-audit-20261006/LEVERS.md | | 73 | JPype is pinned to 1.7.1 in the benchmark images and recorded per row; reason and the measurement: `.notes/bench/repros/jpype-master-check-20261006/`. The wheel declares `jpype1>=1.5.0` with no upper bound, so an image rebuilt on the day of a JPype release would change the instrument in the middle of a run | every embedded ArcadeDB arm and the host-side Python-cost stage | **built (on main), owed at the re-pin**: `bench_common.JPYPE_PIN` and `Dockerfile.bench`'s `ARG JPYPE_VERSION=1.7.1`; every generated stage that runs an ArcadeDB arm reads JPype back out of `dbbench:arcadedb` and aborts if it differs; rows record `jpype_version`; `test_jpype_pin.py`. Moving the pin is a deliberate edit of `JPYPE_PIN` and the Dockerfile default between campaigns, never an image rebuild | jpype#1379 | | 74 | The wheel the 26.10.1 measurement runs on carries the call-overhead change of bindings PR #214 (`fabbda7ab7`) and the columnar insert (row 63) | ArcadeDB embedded arms only | built and verified (2026-10-06): the stages bake a wheel built from this tree (commit `8989cbb0e8`) over the official 26.10.1 jars, sha256 `83a2a40369a411622696aed77361fd3b1c3d23b675d0a784b38b0b022c13c41b` (`PAIR VERIFIED d36b4ca3a`). It is NOT the file PyPI holds for the bindings 26.10.1 release; the page's note on what the Python package costs should name the change when it lands | #214's own A/B (laptop, relative only) | | 75 | The served ArcadeDB arms that bulk-load through `POST /api/v1/batch` run with `-Darcadedb.server.httpBodyContentMaxSize=68719476736` (64 GiB) in place of 26.10.1's default of 100 MiB | ArcadeDB served only: the graph arm (l2, restart lane) and the cross-model arm (e2) | built and verified on the laptop (2026-10-07), on main: `runner.py` (`HTTP_BODY_MAX_OPT`), `override_registry.py` (`arcadedb_http_body_limit`), PROTOCOL.md section 7, `test_overrides.py`. Mini picks it up at its next `git pull`, which is the user's to time | the 26.10.1 sf10 served graph cell failed rep 1; `.notes/bench/repros/served-body-limit-20261006/` | @@ -221,7 +221,7 @@ Rules every campaign keeps: | 77 | ArcadeDB's query heap budget (`arcadedb.queryMaxHeapRAM`, default half the JVM heap) raised for the cells the default refuses: the l1tpc tpch10 olap `top_parts` GROUP BY in both ArcadeDB arms (DECISIONS #175, ArcadeData/arcadedb#9402) | ArcadeDB embedded and served, the documents lane, ONLY in the repair stage | **mechanism written, default OFF (humemai/arcadedb-embedded-python#260); the repair stage is generated after qP09 and run before the tier 1 to tier 2 boundary.** `BENCH_ARCADE_QUERY_MAX_HEAP_RAM_MB` adds the JVM option to the embedded arm and to the served arm's JAVA_OPTS and stamps `arcadedb_query_max_heap_ram_mb` and a source on the row; `override: arcadedb_query_ram`. Which rows are the headline (the default rows with the refusal shown, or the raised rows as an escape hatch like row 21's cap and row 75's body limit) is decided at landing. | not an instrument change: unset, nothing differs | | 78 | The comparator client paths are recorded per row (issue #261; DECISIONS #173, #174): `neo4j_rust_ext`, `redis_hiredis`, `es_json_serializer`, and `pg_client_path` (`autocommit`, `copy_binary`, `binary_cursor`); `qdrant_transport` (#172) was already stamped | comparators only: no ArcadeDB arm | built (DECISIONS #173, #174) | issue #261 | | 81 | The sparse lane warms up before its timed pass and the runner holds the CPU idle state for each timed cell (DECISIONS #177). Text on the page too: CPU idle states are not controlled on the host, and single-client times under a millisecond include the cores' wake-up latency (PAGE-SPEC section 0a, `setup.cpu_idle_note`) | the sparse lane (warm-up); every lane's rows (hold) | **built (humemai/arcadedb-embedded-python#278).** `bench_common.SPARSE_WARMUP_DEFAULT` untimed searches per engine, 1,000, one full round as the study behind the warm-up used, drawn from queries DISJOINT from the timed set so a query or result cache cannot flatter an engine: the dataset's extra queries when it holds them, else a fixed-seed sample of documents used as queries; the row stamps `sparse_warmup_queries` as run and `sparse_warmup_source` = `extra_queries` or `document_sample`. The hold is `/dev/cpu_dma_latency` at `BENCH_CPU_DMA_LATENCY_US` for the length of each timed cell: 10 microseconds in the 2026-11 pass, because the tree default `bench_common.CPU_DMA_LATENCY_DEFAULT_US` (0, no sleep state deeper than polling) kept every core in a busy-wait loop and made the host hot and slow (PROTOCOL.md section 7 has the A/B); it needs write access to the device on the host, and a hold that cannot be taken never fails the cell: rows stamp `cpu_dma_latency_us`, `cpu_dma_latency_held`, and `cpu_dma_latency_error` when it failed. `BENCH_SPARSE_WARMUP=N` and `BENCH_CPU_DMA_LATENCY_US=N` set the count and the target (PROTOCOL.md section 7); neither can be turned off. `override: sparse_warmup`, `override: cpu_dma_latency`; `test_idle_and_warmup.py`, `test_instrument_method.py` | part of the instrument | -| 82 | The served ArcadeDB headline is the vendor's own `arcadedb-driver` 0.2.0 (sync, httpx; `lean_http.OfficialSession`, stamp `arcadedb-driver 0.2.0 (sync, httpx)` with `arcadedb_http_client_role` = `headline`), and the lean HTTP client (`lean_http.LeanSession`) is the labelled sensitivity row | every ArcadeDB SERVED arm that talks HTTP through `lean_http.Session()`; no comparator client moves | **built (humemai/arcadedb-embedded-python#282, the instrument's client row).** The sensitivity row is the same cell run again as a twin job (`runner.ARCADEDB_HTTP_ARMS`, run_id ending `_clientlean`, `arcadedb_http_client_role` = `sensitivity`; the runner sets `BENCH_ARCADEDB_HTTP_CLIENT=lean` for it). `lean` is the client the 26.10.1 pass and the published October rows used, so the sensitivity row stays comparable with them; rows measured with the two clients are never mixed in one column. The driver carries `/query` and `/command` calls; the `GET /server` probe, the `/batch` bulk load, transactions, NDJSON streams and bodies with a field the driver has no argument for stay on the lean client. The PostgreSQL wire has no adapter in this harness, so its sensitivity row is not built. The `client` image gains `arcadedb-driver==0.2.0` at its next rebuild (`build_images.sh`, COMPARATORS.md pin table). Measured on the official 26.10.1 image (d36b4ca3a), 7 interleaved rounds: the bound Cypher point read costs the client 55.5 us of CPU per call with `lean` against 11.6 for a bare-socket variant that was tried and retired, identical answer digests; the 100-row read is engine-bound and moves less | part of the instrument | +| 82 | The served ArcadeDB headline is the benchmark's own minimal HTTP client (`lean_http.LeanSession`, stamp `lean_http (http.client, keep-alive)`); the page and the paper name it and say that the other engines are measured through their vendors' own Python clients | every ArcadeDB SERVED arm that talks HTTP through `lean_http.Session()`; no comparator client moves | **built (humemai/arcadedb-embedded-python#282, the instrument's client row; the headline selection is DECISIONS #268 and #285).** Each served cell runs as a second job on this client (`runner.ARCADEDB_HTTP_ARMS`, run_id ending `_clientlean`, `arcadedb_http_client_role` = `sensitivity` as stamped; the runner sets `BENCH_ARCADEDB_HTTP_CLIENT=lean` for it). `make_paper_tables.load_canonical` keeps the rows of this client and sets the other client's rows aside before any dedupe, table, gate or claim, so `runs_paper.csv`, the paper tables and the page hold these rows only; `export_web.py` refuses a frozen row or an overlay file that names another client, and `page_check.py` fails a page that names the vendor's driver. An arm with no job on this client (`arcadedb_imgdefaults_server`, and the PQ server arm) has no published cell; the docs transaction table says so for the first. This is the client the 26.10.1 pass and the published October rows used, so those rows stay comparable; rows measured with two clients are never mixed in one column. The `/query` and `/command` calls, the `GET /server` probe, the `/batch` bulk load, transactions and NDJSON streams all go through this client in these jobs. The PostgreSQL wire has no adapter in this harness. Measured on the official 26.10.1 image (d36b4ca3a), 7 interleaved rounds: the bound Cypher point read costs the client 55.5 us of CPU per call with `lean` against 11.6 for a bare-socket variant that was tried and retired, identical answer digests; the 100-row read is engine-bound and moves less | part of the instrument | | 84 | The dense lane's id index for the delete (humemai/arcadedb-embedded-python#291, DECISIONS #178 index parity): ArcadeDB, pgvector, Neo4j, Memgraph, FalkorDB, DuckDB, and LanceDB get an index on the vector id before or right after the load, the other engines already delete through their own key | the dense lane (l3d), every arm | **built.** Every dense row stamps `dense_id_index` (the statement, or `key`); `override: dense_id_index`; `test_dense_id_index.py`. The index build is inside `ingest_s`. The /next page says ArcadeDB's delete ran without an id index in rows that lack the stamp (`_dense_id_index_note`, list line `dense_id_index`; `test_next_measurement_wording.py` holds the wording) | part of the instrument | | 85 | Streamed results for the served ArcadeDB time-series arms, `BENCH_ARCADEDB_TS_NDJSON=1`, default OFF: both served arms ask the query endpoint for NDJSON and read the records line by line, as the PostgreSQL and MongoDB arms read rows as their server sends them | the time-series lane (l4), `arcadedb_ts_doc_server` and `arcadedb_ts_native_server` only | **mechanism written, default OFF; MEASURED 2026-10-09 and NOT USED at 26.11.1:** at ts100 the switch helped the documents arm (0.853 [0.713, 0.928]) and hurt the native arm (1.087 [1.083, 1.088]), identical rows, so it stays off and the page promises nothing; it needs a reader that parses as data arrives and a ts1000 re-measure first. Unset, nothing differs (`test_ts_ndjson.py`); set, rows stamp `arcadedb_ts_result_format` = `ndjson`; `override: ts_ndjson` | not an instrument change: unset, nothing differs | | 87 | Two failures of the 26.10.1 pass that were not results (humemai/arcadedb-embedded-python#344, the failure triage of 2026-10-20): (1) `chroma_dense` never ran, because the override registry `overrides.py` shadowed chromadb's dependency `overrides` on `/work` (`ImportError: cannot import name 'overrides'`); the registry is now `override_registry.py`. (2) Memgraph's storage access timeout (default 1 s) refused the deep10m vector index build in both dense arms; the dense arms now run `--storage-access-timeout-sec=172800`, longer than any cell cap | Chroma dense (every scale) and Memgraph dense (both precisions); no other arm moves (the rename changes no measurement) | **built on branch issue/344-chroma-memgraph, not on main**: `override_registry.py` and every import, `runner.MEMGRAPH_STORAGE_ACCESS_TIMEOUT_S`, the read-back `memgraph_storage_access_timeout_s`, PROTOCOL.md section 7, COMPARATORS.md. Mini picks it up at the `git pull` of the stage after the merge, which is the user's to time; a repair stage reruns Chroma dense and Memgraph dense deep10m | `.notes/bench/repros/failure-triage-20261020` | diff --git a/benchmarks/experiments/COMPARATORS.md b/benchmarks/experiments/COMPARATORS.md index fd8a2a9ed7e..4fc35fb73b1 100644 --- a/benchmarks/experiments/COMPARATORS.md +++ b/benchmarks/experiments/COMPARATORS.md @@ -72,7 +72,7 @@ Pins follow DECISIONS #87 (the latest self-hosted stable release at campaign tim | Neo4j driver (Neo4j AND Memgraph arms) | `neo4j==6.4.1` | client package | | Neo4j driver Rust extension (the vendor's documented accelerator, DECISIONS #173) | `neo4j-rust-ext==6.4.1.0` | client package | | pgvector Python adapter (binary COPY, DECISIONS #174) | `pgvector==0.5.1` | client package | -| ArcadeDB official Python driver (sync, httpx; the served ArcadeDB arms' headline client, CAMPAIGN section 7 row 72) | `arcadedb-driver==0.2.0` | client package | +| ArcadeDB Python client package installed in the client image (measured by the harness, not a published client; the served ArcadeDB headline is the benchmark's own `lean_http.py`, CAMPAIGN section 7 row 82) | `arcadedb-driver==0.2.0` | client package | **Held below the newest, and why.** diff --git a/benchmarks/experiments/PROTOCOL.md b/benchmarks/experiments/PROTOCOL.md index 3f99dbe7b77..72f241fe078 100644 --- a/benchmarks/experiments/PROTOCOL.md +++ b/benchmarks/experiments/PROTOCOL.md @@ -264,7 +264,7 @@ An override nobody can find is a defect, whichever way it moves the number. Ever | all dense arms | `EF_CONSTRUCTION=100`, `EF_SEARCH=100` | operating-point | Shared beam. At the 26.10.1 tag an explicit `efSearch` is a fixed beam of `max(k, efSearch)` while the adaptive default is `max(2k, 20)` on graphs of 10,000 or more vectors, so it is NOT a no-op for ArcadeDB; some comparators move down from their own defaults, unaudited. | lane docstring only | | ArcadeDB server (all arms) | `ARCADEDB_OPTS_GC=` is cleared explicitly, and `JAVA_OPTS` carries `-XX:+UseCompactObjectHeaders` | operating-point | Makes E4 a transport comparison. `ARCADEDB_OPTS_GC` survives a `JAVA_OPTS` override, so clearing it puts both arms on one collector. | DECISIONS #54, enforced by `verify_pair_c25.sh` | | ArcadeDB server vs embedded | both arms run ONE set of upstream jars on ONE JVM (Corretto 25) | fairness | The axis isolates transport, not JVM major, libc, collector, or object-header layout; `-XX:+UseCompactObjectHeaders` is rejected by JDK 21. | DECISIONS #54, enforced by `verify_pair_c25.sh` (jars AND JVM major on both sides) | -| ArcadeDB SERVED arms | the headline HTTP client is the official `arcadedb-driver` 0.2.0 (sync); the same cell runs again on the lean HTTP client as a twin job | the vendor's own client, the same class as the comparators' official clients | Protocol audit round 3: the driver costs about 3x the lean client on a one-row read, so a served latency claim names the client. Bulk loads, the server probe, and transactions stay on the lean HTTP client. | row fields `arcadedb_http_client` and `arcadedb_http_client_role` (`headline` or `sensitivity`) | +| ArcadeDB SERVED arms | the headline HTTP client is the benchmark's own minimal HTTP client (`lean_http.py`: one persistent `http.client` connection per host); the page and the paper name it | the other engines are measured through their vendors' own Python clients, so client weight differs between the served engines | A served latency claim names the client. Bulk loads, the server probe, and transactions use the same client. The freeze keeps the rows measured through this client only (DECISIONS #285), so an arm with no job on this client has no published cell. | row fields `arcadedb_http_client` and `arcadedb_http_client_role` (stamped as the job ran; the rows of this client carry `sensitivity`) | | l4 `q_high` and `q_groupby` | ArcadeDB embedded `to_arrow()`, DuckDB `to_arrow_table()`, SQLite `fetchall()` (no columnar path); `to_list()` / `fetchall()` timed beside it as `_plain_ms` | each engine on its documented best path for a result of thousands of rows | The bindings' docs recommend a bulk read for large results; small results (1 to 100 rows) are unchanged. | row fields `read_path`, `read_path_queries`, `read_path_plain`, `read_path_sensitivity`, `_plain_ms`, `_plain_digest`, `_plain_digest_match` (the cell ends if the typed and plain digests differ; DuckDB's Arrow rows are read by position, like its `fetchall()`) | | JVM initial heap (`-Xms`) per engine | **ArcadeDB, embedded and served: unset** (only `-Xmx` from the cell's memory budget; the served arms through `ARCADEDB_OPTS_MEMORY=-Xmx{heap}`, DECISIONS #200). Elasticsearch: `ES_JAVA_OPTS=-Xms{heap} -Xmx{heap}`, unchanged. Neo4j: `server.memory.heap.initial_size` = `max_size`, unchanged. QuestDB: the harness sets no heap (image defaults), unchanged | ArcadeDB as its maintainers advise for a container with a fixed memory budget (no `-Xms`; ArcadeData/arcadedb#9167) and as the bindings document, so both deployments run one JVM configuration; each other server engine as its own documentation recommends | ArcadeDB's server script (`package/src/main/scripts/server.sh`) leaves the heap to the JVM unless `ARCADEDB_OPTS_MEMORY` is set and shows `-Xms2G -Xmx2G` as its example; Elasticsearch: set `Xms` and `Xmx` to the same value (https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-heap-size); Neo4j: set initial and maximum heap to the same value (https://neo4j.com/docs/operations-manual/current/performance/memory-configuration/); QuestDB: no setting by the harness (https://questdb.com/docs/configuration/). | `server_heap` / the cell's heap fields, as before | | ArcadeDB server (all arms) | `ARCADEDB_OPTS_MEMORY=-Xmx{heap}` (image ships 2G) | resource fitting | Heap parity per tier. The 2 GB default cost the server 15% p50 and 35% build time at 10M. | T5 caption, FAIRNESS.md F3, `server_heap` read back | diff --git a/benchmarks/experiments/export_web.py b/benchmarks/experiments/export_web.py index 77a50dd92fd..70a07aa88eb 100644 --- a/benchmarks/experiments/export_web.py +++ b/benchmarks/experiments/export_web.py @@ -2894,7 +2894,7 @@ def _lc_short_reason(text): LIFECYCLE_WITHHELD = {"graph_gav": "its query grew from a bounded set of seeds to an unbounded 2-hop, so it stays off this table until the query is bounded again."} # PAGE-SPEC rule 7 -def _lifecycle_table(all_rows, twin_rows=()): +def _lifecycle_table(all_rows): """Built from the FROZEN CSV, like every other table in this file. The first version called load_canonical(), which is make_paper_tables' name @@ -2906,12 +2906,6 @@ def _lifecycle_table(all_rows, twin_rows=()): rows = [r for r in all_rows if r.get("lane") == "lifecycle"] if not rows: return None - twin_by = {} - for r in twin_rows: - if r.get("lane") == "lifecycle" and not r.get("lifecycle_situation_unexpressible"): - twin_by.setdefault((r.get("workload"), r.get("scale"), str(r.get("backend", "")).endswith("_server"), - _lifecycle_engine(r.get("backend", ""))), []).append(r) - # Rows fold by situation, size, deployment, and ENGINE. An ArcadeDB # label names only the situation; the comparator arms (DECISIONS #95a) share the table, so a # comparator row names its engine inside the parentheses and carries an @@ -2987,17 +2981,6 @@ def _engine_of(r): got = _agg(rs, field) if got is not None: entry["metrics"][label] = got - _trs = twin_by.get((situation, scale, _srv, engine)) - if _trs and entry["metrics"]: - twin_metrics = {} - for field, label in (("jvm_start_ms", "JVM start ms"), ("first_open_ms", "first open ms"), - ("cold_process_ms", "cold process ms"), - *[(f"{k}_session_ms", LIFECYCLE_SCENARIO_LABELS[k]) for k in LIFECYCLE_PAGE_SCENARIOS], - (MEM_PEAK_FIELD, "peak memory GiB")): - got = _agg(_trs, field) - if got is not None: - twin_metrics[label] = got - _attach_twin(entry, twin_metrics, _trs) if entry["metrics"]: entries.append(entry) @@ -3598,7 +3581,7 @@ def _multimodel_table(finished): } -def _l4_table(all_rows, twin_rows=()): +def _l4_table(all_rows): grouped = _l4_canonical(all_rows) if not grouped: # A LANE SCOPED OUT IS NOT A MISSING ARTIFACT, the third place today @@ -3631,7 +3614,6 @@ def _l4_table(all_rows, twin_rows=()): # Five queries, one p99, one cold column, in the order the section reads # (OCT_TABLE_METRICS), resolved once so the column list and the cells agree. _l4_cols = OCT_TABLE_METRICS["l4"] + [MEM_PHASE_COLUMN] - twin_grouped = _l4_canonical(twin_rows) or {} entries = [] # Tier first, then the engine order the section reads, so the table shows # each corpus as its own row group the way every other multi-tier lane @@ -3672,16 +3654,6 @@ def _l4_table(all_rows, twin_rows=()): if got is not None: entry["metrics"][lab] = got break - _trs = twin_grouped.get(key) - if _trs and entry["metrics"]: - twin_metrics = {} - for field, lab in _l4_cols: - for candidate in ((field,) if isinstance(field, str) else field): - got = _agg(_trs, candidate) - if got is not None: - twin_metrics[lab] = got - break - _attach_twin(entry, twin_metrics, _trs) if entry["metrics"]: entries.append(entry) @@ -4843,37 +4815,94 @@ def _arango_ivf_note(table, rows): return _gen(" ".join(parts), *dict.fromkeys(values)) -def _attach_twin(entry, twin_metrics, twin_rows): - """Put the twin beside the headline entry, over the labels the headline cell has (the same metric labels, no more).""" - kept = {k: v for k, v in twin_metrics.items() if k in entry["metrics"]} - if kept: - entry["client_twin"] = {"client": _twin_client(twin_rows), "metrics": kept} +# THE ONE CLIENT THE SERVED ARCADEDB HEADLINE RUNS THROUGH (DECISIONS #268, #285). The row's `arcadedb_http_client` is +# read from the session that ran; a row that names any other client does not belong in a printed table. +# REMOVE WHEN: upstream ships the transport fix (ArcadeData/arcadedb-drivers #188 merged and released) and the decision +# to publish that client is made; until then the page names the benchmark's own client only. +_SERVED_CLIENT_SOURCE = "benchmarks/experiments/lean_http.py" +_OTHER_CLIENT = re.compile(r"arcadedb[-_ ]?driver", re.I) + + +def _lean_client_name(): + import lean_http + return lean_http.LEAN_NAME + +def _is_served_arcadedb(backend): + b = str(backend or "") + return b.startswith("arcadedb") and b.endswith("_server") -def _twin_client(rs): - """The client a twin cell's rows name (one name in a clean freeze), or None.""" - named = collections.Counter(str(r.get("arcadedb_http_client") or "") for r in rs) - return named.most_common(1)[0][0] or None if named else None + +_OTHER_CLIENT_STAMP = re.compile(r'"arcadedb_http_client"\s*:\s*"[^"]*arcadedb[-_ ]?driver', re.I) + + +def _refuse_other_client_overlays(): + """The multipass overlays (dense_mp5, sparse_mp) are read by the page without the freeze, so the rule is held here: an + overlay file whose rows name another client refuses the page. A served arm's twin job writes the same file name as the + other client's job, so the second job to finish wins; this catches the case where it was not the benchmark's own.""" + pin = os.environ.get("BENCH_ENGINE_COMMIT", "").strip() + bad = [] + for d in sorted(RESULTS.glob(f"*_{pin}")) if pin else []: + for fp in sorted(d.glob("*.json")) if d.is_dir() else []: + if _OTHER_CLIENT_STAMP.search(fp.read_text(encoding="utf-8", errors="replace")): + bad.append(f"{d.name}/{fp.name}") + if bad: + raise SystemExit(f"REFUSING to print: {len(bad)} overlay file(s) were not measured through the benchmark's own HTTP " + f"client ({', '.join(bad[:4])}{' ...' if len(bad) > 4 else ''}); re-run the arm's lean job") + + +def _refuse_other_client_rows(rows): + """Refuse a frozen row of a served ArcadeDB arm that names a client other than the benchmark's own.""" + _refuse_other_client_overlays() + bad = collections.Counter( + (str(r.get("backend")), str(r.get("arcadedb_http_client"))) + for r in rows if _OTHER_CLIENT.search(str(r.get("arcadedb_http_client") or ""))) + if bad: + for (be, client), n in sorted(bad.items()): + print(f" {n} row(s) of {be} name the client {client!r}") + raise SystemExit( + "REFUSING to print: the frozen rows hold a served ArcadeDB row that was not measured through the benchmark's " + "own HTTP client. make_paper_tables.load_canonical sets those rows aside; re-freeze before the page is built.") + + +def _served_client_table(table): + """True when the table prints a served ArcadeDB entry.""" + return any(_is_served_arcadedb(e.get("backend_key")) for e in table.get("entries") or []) def _arcadedb_client_note(table): - """What the served ArcadeDB rows ran through, from the rows: the official driver is the headline and the lean - HTTP client's twin is printed beside it as a labelled sensitivity (`client_twin` on the entry), never pooled - into the headline median. None for a table with no served ArcadeDB row.""" - heads = sorted({str(r.get("arcadedb_http_client")) for r in _FROZEN_ROWS - if str(r.get("backend") or "").startswith("arcadedb") and str(r.get("backend")).endswith("_server") - and str(r.get("arcadedb_http_client") or "").strip() not in ("", "None") - and any(e.get("backend_key") == r.get("backend") for e in table.get("entries") or [])}) - twins = sorted({str((e.get("client_twin") or {}).get("client")) for e in table.get("entries") or [] - if (e.get("client_twin") or {}).get("client")}) + """What the served ArcadeDB rows ran through: the benchmark's own minimal HTTP client, named from the rows. None + for a table with no served ArcadeDB row. A row naming another client, or two clients under one table, refuses.""" + heads = {str(r.get("arcadedb_http_client")) for r in _FROZEN_ROWS + if _is_served_arcadedb(r.get("backend")) + and str(r.get("arcadedb_http_client") or "").strip() not in ("", "None") + and any(e.get("backend_key") == r.get("backend") for e in table.get("entries") or [])} if not heads: return None - text = (f"ArcadeDB's served rows time every call through {_join_and(heads)}, the vendor's official Python client, " - f"the same kind of client the other engines are measured through.") - if twins: - text += (f" The same cells also ran through the benchmark's own lean HTTP client ({_join_and(twins)}); " - f"each is printed on its row as a labelled sensitivity and is not part of the headline median.") - return _gen(text, *heads, *twins) + lean = _lean_client_name() + if heads != {lean}: + raise SystemExit(f"REFUSING to print table {table.get('id')!r}: its served ArcadeDB rows name {sorted(heads)}, " + f"and the one client the page may name is {lean!r}") + text = (f"ArcadeDB's served rows time every call through the benchmark's own minimal HTTP client, {lean} " + f"(source: {_SERVED_CLIENT_SOURCE}), which keeps one persistent http.client connection per host. " + f"The other engines are measured through their vendors' own Python clients, so client weight differs " + f"between the served engines.") + return _gen(text, lean, _SERVED_CLIENT_SOURCE) + + +def _imgdefaults_not_measured_note(table): + """The image-defaults ArcadeDB arm has rows only from a client other than the benchmark's own, so its cell is not + printed and the table says why (the arm is a declared absence). None on every other table, and where it is printed. + REMOVE WHEN: a lean-client job exists for this arm (runner.ARCADEDB_HTTP_ARMS) and its rows are frozen.""" + if table.get("id") not in ARM_TABLES.get(JVM_DEFAULTS_ARM, ()) or not _served_client_table(table): + return None + if any(e.get("backend_key") == JVM_DEFAULTS_ARM for e in table.get("entries") or []): + return None + label = display_name(JVM_DEFAULTS_ARM) + text = (f"{label} is not printed: it was not measured through the benchmark's own HTTP client, which every " + f"served ArcadeDB row on this table uses.") + _declare_absence(table["id"], label, None, "withheld", text) + return _gen(text, label) def _oct_conditions(table): @@ -4953,6 +4982,9 @@ def _oct_conditions(table): _client = _arcadedb_client_note(table) if _client: tail.append(_client) + _imgnote = _imgdefaults_not_measured_note(table) + if _imgnote: + tail.append(_imgnote) jvm = _jvm_memory_note(table) if jvm: tail.append(jvm) @@ -6993,11 +7025,10 @@ def _restructure_tables(tables, rows): mp = {(e["backend"], e["scale"]): e for e in by["l3smp"]["entries"]} for e in by["l3s"]["entries"]: m = e["metrics"] - for mm in (m, (e.get("client_twin") or {}).get("metrics") or {}): - if "p50 ms" in mm: - mm["cold p50 ms"] = mm.pop("p50 ms") - if "p99 ms" in mm: - mm["cold p99 ms"] = mm.pop("p99 ms") + if "p50 ms" in m: + m["cold p50 ms"] = m.pop("p50 ms") + if "p99 ms" in m: + m["cold p99 ms"] = m.pop("p99 ms") src = mp.get((e["backend"], e["scale"])) if src: for k in ("warm p50 ms", "warm p99 ms", "gain"): @@ -7021,11 +7052,11 @@ def _restructure_tables(tables, rows): # pass to show. t = by["l3s"] for e in t["entries"]: - for mm in (e["metrics"], (e.get("client_twin") or {}).get("metrics") or {}): - if "p50 ms" in mm: - mm["cold p50 ms"] = mm.pop("p50 ms") - if "p99 ms" in mm: - mm["cold p99 ms"] = mm.pop("p99 ms") + mm = e["metrics"] + if "p50 ms" in mm: + mm["cold p50 ms"] = mm.pop("p50 ms") + if "p99 ms" in mm: + mm["cold p99 ms"] = mm.pop("p99 ms") t["columns"] = [{"p50 ms": "cold p50 ms", "p99 ms": "cold p99 ms"}.get(c, c) for c in t["columns"]] if "l1tpc" in by: # THE PAGE SHOWS THE STANDARD DOCUMENT BENCHMARKS ONLY: TPC-C is the @@ -7035,9 +7066,6 @@ def _restructure_tables(tables, rows): def clone(e, keep): n = dict(e) n["metrics"] = {k: v for k, v in e["metrics"].items() if k in keep} - if e.get("client_twin"): - n["client_twin"] = dict(e["client_twin"], metrics={k: v for k, v in e["client_twin"]["metrics"].items() - if k in keep}) return n # Six transactional operations (#82a) and five analytical queries (#82), # each a warm median, with a ninety-ninth percentile on the headline @@ -7096,14 +7124,9 @@ def main() -> int: rows = list(csv.DictReader(FROZEN.open())) _PI.refuse_other_instruments(rows, FROZEN_NAME) _refuse_gav_without_supertype(rows) - # THE SERVED ARCADEDB CLIENT TWIN IS NOT THE HEADLINE. Every served ArcadeDB cell runs twice: through the official - # driver (role `headline`) and through the benchmark's lean HTTP client (role `sensitivity`). The twin's rows are kept - # apart from every table's rows, so they are never pooled into a headline median, and are printed beside the - # headline cell as `client_twin`. - _twin_rows = [r for r in rows if str(r.get("arcadedb_http_client_role") or "") == "sensitivity"] - if _twin_rows: - _twin_ids = {id(r) for r in _twin_rows} - rows = [r for r in rows if id(r) not in _twin_ids] + # EVERY SERVED ARCADEDB HEADLINE CELL COMES FROM THE BENCHMARK'S OWN HTTP CLIENT (DECISIONS #268, #285). The freeze + # (make_paper_tables.load_canonical) sets the other client's rows aside, so none is here; one that is refuses the page. + _refuse_other_client_rows(rows) # THE CAP RULE, AT REPORT TIME (DECISIONS #188): an arm-cell whose pass-1 median is over its rule cap is shown censored # (_censored_cells) and its numbers are not shown, so its rows leave the tables here. Strict-class rows are the # durability table's and stay. @@ -7153,9 +7176,6 @@ def main() -> int: if _dropped: print(f" one setting per table: {len(_dropped)} strict rows set aside for the durability table only") rows = [r for r in rows if r not in _dropped] - # The twin rows get the same one-setting rule: a strict row is the durability table's, never a twin cell's. - _twin_rows = [r for r in _twin_rows if not (str(r.get("durability_class")) == "strict" and ( - r.get("lane"), r.get("workload"), r.get("backend"), str(r.get("scale"))) in _has_relaxed)] names = _image_version_names() # The tabular lanes run OLTP and OLAP as separate workloads over ONE corpus @@ -7192,10 +7212,6 @@ def main() -> int: # have sprung it. grouped[(r["lane"], r["scale"], r["backend"], wl, r.get("gav") or "")].append(r) - twin_grouped = defaultdict(list) - for r in _twin_rows: - wl = "" if r["lane"] in MERGED_WORKLOAD_LANES else r.get("workload", "") - twin_grouped[(r["lane"], r["scale"], r["backend"], wl, r.get("gav") or "")].append(r) tables = [] for lane, spec in LANES.items(): @@ -7212,12 +7228,10 @@ def main() -> int: # Row-level, not group-level: merged lanes (l1, l1tpc) group both # workloads under one key with a blank label, so a group-level # test never matched and the per-query OLAP table was empty (BUGS F30). - _trs = twin_grouped.get((ln, scale, backend, workload, gav), []) if spec.get("only_workload"): rs = [r for r in rs if r.get("workload") == spec["only_workload"]] if not rs: continue - _trs = [r for r in _trs if r.get("workload") == spec["only_workload"]] # The no-settle ablation is MEASURED but not PUBLISHED, and the # page was the only place it appeared. Neither paper reports it: # T4 is a clean head-to-head, one ArcadeDB row against three @@ -7340,24 +7354,17 @@ def main() -> int: "host": rs[0].get("host") or None, "metrics": {}, } - twin_metrics = {} for field, label in _metrics_for(lane, spec, src_lane): - src, tsrc = rs, _trs + src = rs if field in MEM_FIELDS and src_lane in MERGED_WORKLOAD_LANES: # See MEM_FIELDS above: this lane's rows were merged across # workloads, which is right for a metric that only one # workload produces and wrong for one both produce. Report # the transactional run rather than a median straddling two. src = [r for r in rs if r.get("workload") == "oltp"] or rs - tsrc = [r for r in _trs if r.get("workload") == "oltp"] or _trs got = _agg(src, field) if got is not None: entry["metrics"][label] = got - if tsrc: - tgot = _agg(tsrc, field) - if tgot is not None: - twin_metrics[label] = tgot - _attach_twin(entry, twin_metrics, _trs) if lane == "l3d": _beam_extras(entry, rs) if entry["metrics"]: @@ -7498,7 +7505,7 @@ def main() -> int: # Python-cost table are built from artifacts of the campaign, not from the # frozen rows; the durability table sits beside the session-cost table # (DECISIONS #90) and is built from the same rows the write tables are. - _extras = [_sparse_multipass_table(), _l4_table(rows, _twin_rows), _lifecycle_table(rows, _twin_rows), _durability_table(_all_rows), + _extras = [_sparse_multipass_table(), _l4_table(rows), _lifecycle_table(rows), _durability_table(_all_rows), _e4_table(), _python_cost_table()] for extra in _extras: if extra and extra["entries"]: @@ -7715,6 +7722,8 @@ def main() -> int: for table in tables: rel = SOURCES.get(table["id"]) paths = [rel] if isinstance(rel, str) else list(rel or []) + if _served_client_table(table) and _SERVED_CLIENT_SOURCE not in paths: + paths.append(_SERVED_CLIENT_SOURCE) table["source_paths"] = paths table["source_urls"] = [f"{REPO}/{p}" for p in paths] # Kept so an older page build still renders something true: the first diff --git a/benchmarks/experiments/fixtures/publish_2611/build_fixture.py b/benchmarks/experiments/fixtures/publish_2611/build_fixture.py index cda1da3c1c9..3587e90976d 100644 --- a/benchmarks/experiments/fixtures/publish_2611/build_fixture.py +++ b/benchmarks/experiments/fixtures/publish_2611/build_fixture.py @@ -3,7 +3,7 @@ The publish tests (test_publish_2611_e2e.py) run make_paper_tables and export_web on `fixtures/publish_2611/results`: a few real rows per lane, restamped `instrument: 2026-11`, plus the row fields the 2026-11 instrument adds (per-phase memory, -the dense search-beam sweep and matched-recall headline, product-quantization arms, the served-client headline and lean twin, +the dense search-beam sweep and matched-recall headline, product-quantization arms, the served ArcadeDB rows of both clients, l4 plain reads, the switch stamps). The numbers are real 2026-10 measurements; the stamps and added fields are synthetic, so the fixture proves structure and arithmetic, never a published value. Only a developer with a populated results/ needs this script; the committed output is the fixture. @@ -27,6 +27,7 @@ HERE = Path(__file__).resolve().parent sys.path.insert(0, str(HERE.parents[1])) import dense_beam # noqa: E402 +import lean_http # noqa: E402 PIN_OLD, PIN_NEW = "417314c18", "261100fix" KEEP = {"e2": {"e2"}, "e4": {"e2"}, "l1tpc": {"tpch1"}, "l2": {"sf1"}, "l3d": {"small"}, "l3s": {"tiny", "small", "medium"}, @@ -100,18 +101,9 @@ def _add_2611_fields(rows): r["arcadedb_http_client"] = "arcadedb-driver 0.2.0 (sync, httpx)" r["arcadedb_http_client_role"] = "headline" out.append(r) - # the labelled lean twin of every served ArcadeDB cell: faster by a fixed factor, so a test can tell it from the headline - twins = [] - for r in out: - if r.get("arcadedb_http_client_role") == "headline": - t = dict(r) - t["arcadedb_http_client"] = "lean (requests)" - t["arcadedb_http_client_role"] = "sensitivity" - t["run_id"] = f"{r.get('run_id', 'x')}_clientlean" - for k, v in list(t.items()): - if k.endswith("_ms") and isinstance(v, (int, float)) and not isinstance(v, bool): - t[k] = round(v * 0.7, 4) - twins.append(t) + # the lean-client row of every served ArcadeDB cell, the headline since DECISIONS #285: faster by a fixed factor, so a + # test can tell it from the vendor-driver row, which the freeze sets aside + twins = [_lean_twin(r) for r in out if r.get("arcadedb_http_client_role") == "headline"] # the product-quantization arms (#419) beside the fp32 arm each is derived from: synthetic, there are no real PQ rows. The # stamps are the ones l3d_dense writes (quantization PRODUCT for ArcadeDB, pq_subspaces, pq_clusters, pq_rerank, the # read-back fields); the numbers are the fp32 arm's, slower queries and a lower recall, as PQ trades them. @@ -267,11 +259,48 @@ def _patch_overlays(): f.write_text(new) +def _lean_twin(r): + """The benchmark's own client's row of a served ArcadeDB cell whose vendor-driver row is `r` (30 percent faster).""" + t = dict(r) + t["arcadedb_http_client"] = lean_http.LEAN_NAME + t["arcadedb_http_client_role"] = "sensitivity" + t["run_id"] = f"{r.get('run_id', 'x')}_clientlean" + for k, v in list(t.items()): + if k.endswith("_ms") and isinstance(v, (int, float)) and not isinstance(v, bool): + t[k] = round(v * 0.7, 4) + return t + + +# The served arms the harness runs on both clients (runner.ARCADEDB_HTTP_ARMS) have a lean row per cell; the image-defaults arm +# does not (vendor-driver rows only, so its cell is not published), and the PQ server arm does not either, so the fixture gives +# that one a lean row to keep the PQ table's coverage. +NO_LEAN_TWIN = ("arcadedb_imgdefaults_server",) +LEAN_TWIN_ADDED = ("arcadedb_dense_server_pq",) + + +def _lean_client(rows): + """Idempotent: the lean rows carry the client's real name, the arm without a lean twin has none, the PQ server arm has one.""" + out = [] + for r in rows: + if r.get("arcadedb_http_client_role") == "sensitivity": + if r["backend"] in NO_LEAN_TWIN: + continue + r = dict(r, arcadedb_http_client=lean_http.LEAN_NAME) + out.append(r) + have = {(r["lane"], r["backend"], r["scale"], r.get("workload"), r["rep"], r.get("durability_class")) + for r in out if r.get("arcadedb_http_client_role") == "sensitivity"} + for r in list(out): + if (r["backend"] in LEAN_TWIN_ADDED and r.get("arcadedb_http_client_role") == "headline" + and (r["lane"], r["backend"], r["scale"], r.get("workload"), r["rep"], r.get("durability_class")) not in have): + out.append(_lean_twin(r)) + return out + + def realistic_2611(rows, deep10m=True): import bench_common import fairness_check as FC import override_registry as OR - rows = _agreeing_answers(_roster_fill([_pin_and_versions(r) for r in rows])) + rows = _lean_client(_agreeing_answers(_roster_fill([_pin_and_versions(r) for r in rows]))) relaxed = next(r["durability"] for r in rows if r["backend"] == "arcadedb_embedded" and r.get("durability_class") == "relaxed") cap, body = OR.runner_cap(), OR.runner_body_limit() hash_lanes = {lane: (wl, pairs) for lane, wl, pairs in FC.ARCADEDB_HASH_ID_INDEXES} @@ -327,7 +356,7 @@ def _deep10m_envelope_rows(rows): out = [] for r in rows: if (r["lane"] != "l3d" or r["scale"] != "small" or r["backend"] not in overlay or r["backend"] in have - or int(r.get("rep") or 0) != 1): + or int(r.get("rep") or 0) != 1 or r.get("arcadedb_http_client_role") == "headline"): continue have.add(r["backend"]) d = dict(r) diff --git a/benchmarks/experiments/fixtures/publish_2611/results/runs.jsonl.gz b/benchmarks/experiments/fixtures/publish_2611/results/runs.jsonl.gz index 1b4844da1185711d1c65e7dbf6fd9936fc210279..1fe86f5e38315270e5501edb539f32a98b32884f 100644 GIT binary patch delta 82887 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ⅆ@yBC*ROpZ?Be(u2yZY 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 eNJC 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 jKV_8en!PvE`p*PVb+T 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 ZtMuwOuCV(3@Bi`t0Vco)1*$X;F#zY^EKC3Z diff --git a/benchmarks/experiments/lean_http.py b/benchmarks/experiments/lean_http.py index c672ed647e8..5b6d4531dc0 100644 --- a/benchmarks/experiments/lean_http.py +++ b/benchmarks/experiments/lean_http.py @@ -5,9 +5,9 @@ read costs 468 to 628 us through `requests.Session`, 119 to 150 us through a persistent `http.client` connection (3.9x), the server being the same. The comparators are driven by their vendors' own clients, which differ in weight: the Postgres and Mongo wire clients are light, but python-arango is `requests`, qdrant-client over REST is httpx plus pydantic, and elasticsearch-py is urllib3, so `requests` was heavier than most -and the served ArcadeDB column measured the client library as much as the engine. This client is lighter than the official `arcadedb-driver` -(httpx, published 2026-10-06), which measured 3.2x slower on a one-row read (protocol audit round 3); the 26.11.1 re-measure headlines the -official driver and keeps this client as a disclosed sensitivity row. This module is the +and the served ArcadeDB column measured the client library as much as the engine. This client is the headline client of the served ArcadeDB +rows: the page and the paper name it as the benchmark's own minimal HTTP client, and say that the other engines are measured through their +vendors' own Python clients, so client weight differs between the served engines (DECISIONS #268, #285). This module is the one place the lanes get their ArcadeDB HTTP session from; a lane changes by one import. The interface is the part of `requests.Session` the lanes use: `.auth` (a (user, password) tuple, sent as Basic), `.get(url, auth=, headers=, timeout=)`, @@ -33,9 +33,9 @@ A session is for one thread. `row_fields(session)` is what a row records. -THE CLIENT (CAMPAIGN section 7 rows 72 and 82): the headline is `official`, the vendor's own `arcadedb-driver` (sync, httpx) for every -`/query` and `/command` call, and this client is the labelled sensitivity row (the runner schedules it as a twin cell and sets -`BENCH_ARCADEDB_HTTP_CLIENT=lean` for it). Bulk loads, the server probe, transactions and NDJSON streams stay on this client. +THE CLIENT (CAMPAIGN section 7 rows 72 and 82): the published cell of a served ArcadeDB arm is the one measured through this client +(the runner schedules the cell as a second job and sets `BENCH_ARCADEDB_HTTP_CLIENT=lean` for it; the freeze keeps those rows and sets +the other client's rows aside). Bulk loads, the server probe, transactions and NDJSON streams use this client in every job. """ import base64 import gzip @@ -53,13 +53,14 @@ CLIENT_ENV = "BENCH_ARCADEDB_HTTP_CLIENT" LEAN = "lean" OFFICIAL = "official" -OFFICIAL_PIN = "0.2.0" # the arcadedb-driver release the 2026-11 headline measures; recorded per row from the installed package +OFFICIAL_PIN = "0.2.0" # the vendor package release the default session measures; recorded per row from the installed package LEAN_NAME = "lean_http (http.client, keep-alive)" def client_choice(): - """'official' (the headline, the default) or 'lean' (the sensitivity twin), from BENCH_ARCADEDB_HTTP_CLIENT, which the runner - sets for the twin cell; anything else is refused rather than guessed.""" + """'official' (the default while the pass runs: a mid-run change would split rows) or 'lean' (the client whose rows are + published), from BENCH_ARCADEDB_HTTP_CLIENT, which the runner sets for the second job of each cell; anything else is refused + rather than guessed.""" v = (os.environ.get(CLIENT_ENV) or "").strip().lower() if v in ("", OFFICIAL): return OFFICIAL @@ -448,7 +449,7 @@ def _driver_version(): # ------------------------------------------------------------------------------------------------------ the factory def Session(): # noqa: N802 - requests' own spelling, so a lane changes by one import - """The ArcadeDB served arms' session: the official driver (the headline), or `LeanSession` when BENCH_ARCADEDB_HTTP_CLIENT=lean.""" + """The ArcadeDB served arms' session: the default session, or `LeanSession` (the published client) when BENCH_ARCADEDB_HTTP_CLIENT=lean.""" return OfficialSession() if client_choice() == OFFICIAL else LeanSession() diff --git a/benchmarks/experiments/make_paper_tables.py b/benchmarks/experiments/make_paper_tables.py index c8301f71405..9144990ea4c 100644 --- a/benchmarks/experiments/make_paper_tables.py +++ b/benchmarks/experiments/make_paper_tables.py @@ -208,6 +208,7 @@ def _commit_matches(row_commit): # Rows dropped for an unsettled disk reading. UNSETTLED_DISK = [] _OTHERS_SAID = [] +_OFFICIAL_SAID = [] def _write_withheld_recall(): @@ -269,8 +270,24 @@ def _assert_lanes_registered(): f"export_web.SCALE_LABELS, then fairness_check.LANE_SCRIPT.") -def load_canonical(apply_corpus=True, include_twins=False): +# THE SERVED ARCADEDB HEADLINE IS THE BENCHMARK'S OWN HTTP CLIENT (DECISIONS #268, #285). The harness still measures a served +# cell through the vendor's driver as well (role `headline`, client name `arcadedb-driver ...`) and through lean_http (role +# `sensitivity`, the name the freeze keeps for it); the rows of the first are measured and not published, so the freeze +# sets them aside here, before any dedupe, table, gate or claim sees them. An arm with no lean row therefore has no cell. +# REMOVE WHEN: upstream ships the transport fix (ArcadeData/arcadedb-drivers #188 merged and released) and the owner decides +# to publish that client; flip this test, not the rows. +OFFICIAL_CLIENT_SET_ASIDE = collections.Counter() + + +def is_official_client_row(r): + """True for a row measured through the vendor's own Python driver, by its role stamp or its recorded client name.""" + return (r.get("arcadedb_http_client_role") == "headline" + or "arcadedb-driver" in str(r.get("arcadedb_http_client") or "")) + + +def load_canonical(apply_corpus=True): _assert_lanes_registered() + OFFICIAL_CLIENT_SET_ASIDE.clear() del WITHHELD_RECALL[:] # per call, or the sidecar counts every earlier call's rows again del UNSETTLED_DISK[:] CORPUS_EXCLUDED.clear() @@ -306,6 +323,9 @@ def load_canonical(apply_corpus=True, include_twins=False): continue if r["scale"] not in PAPER_SCALES.get(r["lane"], []): continue + if is_official_client_row(r): + OFFICIAL_CLIENT_SET_ASIDE[r.get("backend")] += 1 + continue # A PARTIAL LANDING FREEZES ONLY ITS OWN LANES. `land_stage --only-lanes` # filtered what was PULLED and nothing downstream, so the freeze still # swept the whole canonical store -- and a landing of l2 and e2 was @@ -546,22 +566,20 @@ def load_canonical(apply_corpus=True, include_twins=False): # sweep row and a GAV-ablation row could once have shadowed a published # cell. Rows before #90 carry no class and default to relaxed, which is # what they were. - # THE CLIENT ROLE IS PART OF THE KEY. A served ArcadeDB cell runs twice: on the headline client and, as a twin job, on - # the lean HTTP client (`arcadedb_http_client_role` = sensitivity). Same lane, scale, workload, backend and rep, so - # without the role the later of the two would replace the other on ts_utc. k = (r["lane"], r["scale"], r.get("n_docs"), r.get("workload"), r["backend"], r.get("gav") is not False, r["rep"], - r.get("durability_class") or "relaxed", r.get("arcadedb_http_client_role") == "sensitivity") + r.get("durability_class") or "relaxed") if k not in best or r["ts_utc"] > best[k]["ts_utc"]: best[k] = r _write_withheld_recall() if UNSETTLED_DISK: print(f" blanked the disk reading of {len(UNSETTLED_DISK)} row(s): it had not settled; " f"their other measurements stand") - # The paper tables, the gates and the claims read the headline rows. The twin rows go to the freeze (include_twins) so - # the exporter can show them beside the headline, labelled, and are never pooled into a headline median. - out = [r for r in best.values() if include_twins or r.get("arcadedb_http_client_role") != "sensitivity"] - return out + if OFFICIAL_CLIENT_SET_ASIDE and not _OFFICIAL_SAID: + _OFFICIAL_SAID.append(1) + print(f" set aside {sum(OFFICIAL_CLIENT_SET_ASIDE.values())} row(s) not measured through the benchmark's own HTTP client: " + + ", ".join(f"{b} {n}" for b, n in sorted(OFFICIAL_CLIENT_SET_ASIDE.items(), key=str))) + return list(best.values()) def cells(rows, key): @@ -1025,6 +1043,10 @@ def _dense_multipass(): continue p0 = passes[0] be = p0.get("backend") + if is_official_client_row(p0): + # the same rule as load_canonical: a served ArcadeDB overlay measured through the other client is not published + print(f" set aside {os.path.basename(fp)}: not measured through the benchmark's own HTTP client") + continue label = NAMES.get(be, be) if be == "arcadedb_dense_embedded": q = str(p0.get("quantization", "")).lower() @@ -1381,7 +1403,7 @@ def main(freeze=True): rows = load_canonical() print(f"{len(rows)} canonical rows") if freeze: - freeze_paper_rows(load_canonical(include_twins=True)) + freeze_paper_rows(rows) tabular_table(rows) graph_table(rows) sparse_table(rows) diff --git a/benchmarks/experiments/page_check.py b/benchmarks/experiments/page_check.py index 03797df61a6..1bb8381b8b4 100644 --- a/benchmarks/experiments/page_check.py +++ b/benchmarks/experiments/page_check.py @@ -629,8 +629,12 @@ def main() -> int: "(CAMPAIGN section 7 row 69)") j_bad = _check_jvm_defaults_disclosure(payload) print(f" {j_bad} table(s) missing the sentence") + print("\nno page text names the vendor's Python driver for ArcadeDB (DECISIONS #285)") + b_bad = _check_banned_terms(payload) + print(f" {b_bad} banned term(s) in page text") return 1 if (i_bad or d_bad or a_bad or l_bad or c_bad - or r_bad or m_bad or not u_ok or k_bad or o_bad or n_bad or iv_bad or ov_bad or j_bad or l_notice_bad) else 0 + or r_bad or m_bad or not u_ok or k_bad or o_bad or n_bad or iv_bad or ov_bad or j_bad or l_notice_bad + or b_bad) else 0 # -------------------------------------------------------------------------- @@ -1611,6 +1615,37 @@ def _check_jvm_defaults_disclosure(payload): return bad +# THE VENDOR'S DRIVER IS NOT NAMED ON THE PAGE (DECISIONS #268, #285). The served ArcadeDB headline is the benchmark's own +# HTTP client and the page says so; the vendor's driver is measured by the harness and is neither printed nor named as a +# comparison. Any string in the payload (a condition, a label, a cell note, a source) that names it fails the gate. +# REMOVE WHEN: upstream ships the transport fix (ArcadeData/arcadedb-drivers #188 merged and released) and the owner decides +# to publish that client; then replace this pattern with the disclosure that client needs. +BANNED_TERMS = re.compile(r"arcadedb[-_ ]?driver|official\s+(?:\w+\s+){0,3}?(?:driver|client)", re.I) + + +def _check_banned_terms(payload): + """Walk every string of the payload for BANNED_TERMS. Returns bad count.""" + bad = [] + + def walk(node, path=""): + if isinstance(node, str): + m = BANNED_TERMS.search(node) + if m: + bad.append((path, m.group(0), node[:100])) + elif isinstance(node, dict): + for k, v in node.items(): + walk(k, f"{path}.") + walk(v, f"{path}.{k}" if path else str(k)) + elif isinstance(node, list): + for i, v in enumerate(node): + walk(v, f"{path}[{i}]") + + walk(payload) + for path, term, ctx in bad[:12]: + print(f" BANNED {path}: {term!r} in {ctx!r}") + return len(bad) + + def _check_one_list_not_comparable(payload): """A dense cell the freeze withheld and that ArangoDB's one-list defect decided (BUGS F175, DECISIONS #156: recall below the floor, 10,000 or more diff --git a/benchmarks/experiments/test_export_client_twin.py b/benchmarks/experiments/test_export_client_twin.py index bf8890ee8a5..20f267e954a 100644 --- a/benchmarks/experiments/test_export_client_twin.py +++ b/benchmarks/experiments/test_export_client_twin.py @@ -1,6 +1,7 @@ -"""What the exporter adds for 2026-11 rows, on the publish fixture: the served ArcadeDB client twin kept out of every headline -median and attached to the headline entry, the l4 plain-read columns, and the sentences that say what the rows stamp (the idle -hold, the sparse warm-up, the official driver). +"""What the exporter adds for 2026-11 rows, on the publish fixture: every served ArcadeDB headline cell comes from the +benchmark's own HTTP client (DECISIONS #268, #285), the vendor's driver is neither printed nor named, the cell of the arm with +no lean row is dropped and said so, the l4 plain-read columns, and the sentences that say what the rows stamp (the idle hold, +the sparse warm-up). Run with `python -m pytest test_export_client_twin.py -q` from this directory (needs numpy and pandas, as the exporter does). """ @@ -18,6 +19,7 @@ HERE = Path(__file__).resolve().parent FIXTURE = HERE / "fixtures" / "publish_2611" / "results" PIN = "261100fix" +LEAN = "lean_http (http.client, keep-alive)" # lean_http.LEAN_NAME def _run(script, results, **extra): @@ -35,61 +37,104 @@ def _stage(dest): @pytest.fixture(scope="module") -def payloads(tmp_path_factory): - """(payload exported from the freeze, payload exported from the same freeze plus the twin's rows).""" - results = _stage(tmp_path_factory.mktemp("twin") / "results") - assert _run("make_paper_tables.py", results).returncode == 0 +def built(tmp_path_factory): + """(results dir, the paper-table run's stdout, the payload exported from the freeze).""" + results = _stage(tmp_path_factory.mktemp("lean") / "results") + proc = _run("make_paper_tables.py", results) + assert proc.returncode == 0, proc.stderr[-2000:] assert _run("export_web.py", results).returncode == 0 - plain = json.loads((results / "web_benchmarks.json").read_text()) - rows = list(csv.DictReader((results / "runs_paper.csv").open())) - fields = list(rows[0]) - twins = [json.loads(l) for l in (results / "runs.jsonl").open() if l.strip()] - twins = [r for r in twins if r.get("arcadedb_http_client_role") == "sensitivity" and not r.get("error")] - assert twins, "the fixture carries the lean twin's rows" - with (results / "runs_paper.csv").open("w", newline="") as fh: - w = csv.DictWriter(fh, fieldnames=fields) - w.writeheader() - w.writerows(rows) - for r in twins: - w.writerow({k: ("" if r.get(k) is None else r.get(k)) for k in fields}) - assert _run("export_web.py", results).returncode == 0 - return plain, json.loads((results / "web_benchmarks.json").read_text()) + return results, proc.stdout, json.loads((results / "web_benchmarks.json").read_text()) + + +@pytest.fixture(scope="module") +def payloads(built): + """(payload, payload): the old two-payload fixture's shape, for the tests below that read the plain one.""" + return built[2], built[2] def _table(p, tid): return next(t for t in p["tables"] if t["id"] == tid) -def test_the_twin_never_moves_a_headline_cell(payloads): - plain, twinned = payloads - for t in twinned["tables"]: - want = {(e["backend"], e.get("scale")): e["metrics"] for e in _table(plain, t["id"])["entries"]} - for e in t["entries"]: - assert e["metrics"] == want[(e["backend"], e.get("scale"))], (t["id"], e["backend"]) - - -def test_the_twin_rides_on_the_headline_entry_over_the_same_labels(payloads): - _plain, p = payloads - seen = set() - for t in p["tables"]: - for e in t["entries"]: - twin = e.get("client_twin") - if not twin: - continue - seen.add(t["id"]) - assert twin["client"] == "lean (requests)" and e["deployment"] in ("server", "all three") or t["id"] == "lifecycle" - assert twin["metrics"] and set(twin["metrics"]) <= set(e["metrics"]), (t["id"], set(twin["metrics"]) - set(e["metrics"])) - for stat in twin["metrics"].values(): - assert set(stat) == {"median", "min", "max", "n"} - assert {"docs_oltp", "docs_olap", "l2", "l3s", "l4", "lifecycle"} <= seen - assert not [e for t in p["tables"] for e in t["entries"] if "client_twin" in e and not e["is_arcadedb"]] - - -def test_the_page_names_the_official_driver_and_the_labelled_sensitivity(payloads): - _plain, p = payloads - text = " ".join(_table(p, "docs_oltp")["conditions"]) - assert "arcadedb-driver 0.2.0 (sync, httpx)" in text and "labelled sensitivity" in text and "lean (requests)" in text - assert not any("client" in c and "labelled sensitivity" in c for c in _table(p, "durability")["conditions"]) +def _raw_rows(results): + return [json.loads(l) for l in (results / "runs.jsonl").open() if l.strip()] + + +def test_the_fixture_holds_both_clients_and_the_freeze_keeps_only_the_lean_rows(built): + results, out, _p = built + raw = [r for r in _raw_rows(results) if r.get("arcadedb_http_client")] + assert {r["arcadedb_http_client_role"] for r in raw} == {"headline", "sensitivity"} + assert any("arcadedb-driver" in r["arcadedb_http_client"] for r in raw) + frozen = [r for r in csv.DictReader((results / "runs_paper.csv").open()) if r.get("arcadedb_http_client")] + assert frozen and {r["arcadedb_http_client"] for r in frozen} == {LEAN} + # the arm with no lean row has no frozen row at all, and the freeze says what it set aside + assert not [r for r in csv.DictReader((results / "runs_paper.csv").open()) if r["backend"] == "arcadedb_imgdefaults_server"] + assert "not measured through the benchmark's own HTTP client" in out and "arcadedb_imgdefaults_server" in out + + +def test_no_twin_and_no_vendor_driver_anywhere_on_the_page(built): + _results, _out, p = built + text = json.dumps(p) + assert "client_twin" not in text + for banned in ("arcadedb-driver", "official driver", "official Python client", "sensitivity", "httpx"): + assert banned not in text, banned + import page_check + assert page_check._check_banned_terms(p) == 0 + + +def test_the_page_names_the_benchmarks_own_client_and_says_the_others_differ(built): + _results, _out, p = built + for tid in ("docs_oltp", "docs_olap", "l2", "l3s", "l4", "lifecycle"): + text = " ".join(_table(p, tid)["conditions"]) + assert LEAN in text and "benchmarks/experiments/lean_http.py" in text, tid + assert "vendors' own Python clients" in text and "client weight differs between the served engines" in text, tid + assert "lean_http.py" in " ".join(_table(p, tid)["source_urls"]), tid + + +def test_the_arm_without_a_lean_row_is_not_printed_and_the_table_says_so(built): + _results, _out, p = built + t = _table(p, "docs_oltp") + assert not [e for e in t["entries"] if e["backend_key"] == "arcadedb_imgdefaults_server"] + label = "ArcadeDB (server, image JVM defaults)" + text = " ".join(t["conditions"]) + assert f"{label} is not printed: it was not measured through the benchmark's own HTTP client" in text + assert any(a["backend"] == label and a["kind"] == "withheld" for a in t["declared_absences"]) + assert "image's own JVM settings" not in text + + +def test_the_exporter_refuses_a_frozen_row_of_the_other_client(built, tmp_path): + results, _out, _p = built + bad = tmp_path / "results" + shutil.copytree(results, bad) + rows = list(csv.DictReader((bad / "runs_paper.csv").open())) + served = next(r for r in rows if r["backend"] == "arcadedb_server" and r.get("arcadedb_http_client")) + served["arcadedb_http_client"] = "arcadedb-driver 0.2.0 (sync, httpx)" + with (bad / "runs_paper.csv").open("w", newline="") as fh: + w = csv.DictWriter(fh, fieldnames=list(rows[0])) + w.writeheader() + w.writerows(rows) + proc = _run("export_web.py", bad) + assert proc.returncode != 0 and "not measured through the benchmark's own HTTP client" in proc.stderr + + +def test_the_exporter_refuses_an_overlay_of_the_other_client(built, tmp_path): + results, _out, _p = built + bad = tmp_path / "results" + shutil.copytree(results, bad) + fp = bad / f"dense_mp5_{PIN}" / "mp_arcsrv_b1.json" + passes = json.loads(fp.read_text()) + for r in passes: + r["arcadedb_http_client"] = "arcadedb-driver 0.2.0 (sync, httpx)" + fp.write_text(json.dumps(passes)) + proc = _run("export_web.py", bad) + assert proc.returncode != 0 and "overlay file(s) were not measured through the benchmark's own HTTP client" in proc.stderr + + +def test_the_banned_term_gate_flags_the_driver_and_nothing_else(): + import page_check + assert page_check._check_banned_terms({"conditions": ["through the official ArcadeDB Python driver"]}) == 1 + assert page_check._check_banned_terms({"tables": [{"conditions": ["arcadedb-driver 0.2.0"]}]}) == 1 + assert page_check._check_banned_terms({"conditions": ["through the benchmark's own minimal HTTP client"]}) == 0 def test_l4_prints_the_plain_read_beside_the_bulk_read(payloads): diff --git a/benchmarks/experiments/test_publish_2611_e2e.py b/benchmarks/experiments/test_publish_2611_e2e.py index 34a72df574d..1f7e1ff6c79 100644 --- a/benchmarks/experiments/test_publish_2611_e2e.py +++ b/benchmarks/experiments/test_publish_2611_e2e.py @@ -137,26 +137,31 @@ def test_the_pq_arms_are_their_own_precision_row_beside_fp32(published): assert emb["backend"] == fp32["backend"] == "ArcadeDB (embedded)" or emb["backend"].startswith("ArcadeDB (embedded") -def test_the_served_arcadedb_twin_row_is_not_in_the_headline(published): - # every served ArcadeDB cell has a lean twin (role "sensitivity", 30 percent faster); the headline cell is the median of - # the official-client rows alone +def test_the_served_arcadedb_headline_is_the_lean_client_alone(published): + # every served ArcadeDB cell has a vendor-driver row and a lean row (30 percent faster); the headline cell is the median + # of the lean rows alone, and the freeze holds no vendor-driver row t = _table(published["payload"], "docs_oltp") rows = [r for r in _fixture_rows() if r["lane"] == "l1tpc" and r["backend"].startswith("arcadedb") and "server" in r["backend"] and r.get("workload") == "oltp" and r.get("durability_class") == "relaxed"] assert rows and {r["arcadedb_http_client_role"] for r in rows} == {"headline", "sensitivity"} - head = [r for r in rows if r["arcadedb_http_client_role"] == "headline"] - key = next(k for k in head[0] if k.endswith("_p50_ms") and isinstance(head[0][k], (int, float))) - entry = next(e for e in t["entries"] if e["backend_key"] == head[0]["backend"]) + lean = [r for r in rows if r["arcadedb_http_client_role"] == "sensitivity" and r["backend"] == "arcadedb_server"] + other = [r for r in rows if r["arcadedb_http_client_role"] == "headline" and r["backend"] == "arcadedb_server"] + assert lean and other + key = next(k for k in lean[0] if k.endswith("_p50_ms") and isinstance(lean[0][k], (int, float))) + entry = next(e for e in t["entries"] if e["backend_key"] == "arcadedb_server") got = [m["median"] for m in entry["metrics"].values() if isinstance(m, dict) and "median" in m] - want = statistics.median(r[key] for r in head if r.get("scale") == entry["scale"]) + want = statistics.median(r[key] for r in lean if r.get("scale") == entry["scale"]) assert any(g == pytest.approx(want, rel=1e-3) for g in got), (key, want, got[:8]) - # the freeze keeps the twin rows and the exporter attaches them, labelled, to the headline entry + other_median = statistics.median(r[key] for r in other if r.get("scale") == entry["scale"]) + assert not any(g == pytest.approx(other_median, rel=1e-3) for g in got), "the vendor-driver median must not be a cell" frozen = list(csv.DictReader((published["results"] / "runs_paper.csv").open())) - assert any(r.get("arcadedb_http_client_role") == "sensitivity" for r in frozen) - twin = entry["client_twin"] - assert "lean" in twin["client"] and twin["metrics"] - label = next(k for k, m in entry["metrics"].items() if isinstance(m, dict) and m.get("median") == pytest.approx(want, rel=1e-3)) - assert twin["metrics"][label]["median"] == pytest.approx(want * 0.7, rel=1e-2) + assert not any("arcadedb-driver" in (r.get("arcadedb_http_client") or "") for r in frozen) + assert not any(r.get("arcadedb_http_client_role") == "headline" for r in frozen) + assert "client_twin" not in entry + # the arm with no lean row (the image-defaults arm) has vendor-driver rows only, so it has no frozen row and no cell + assert any(r["backend"] == "arcadedb_imgdefaults_server" for r in _fixture_rows()) + assert not any(r["backend"] == "arcadedb_imgdefaults_server" for r in frozen) + assert not any(e["backend_key"] == "arcadedb_imgdefaults_server" for e in t["entries"]) def test_the_paper_tables_are_written_beside_the_freeze(published):