Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
7cb834b
perf: overlap route reads and expand benchmarks
forhappy Sep 29, 2026
d4d29fa
perf: add opt-in request metadata caches
forhappy Sep 29, 2026
b172a4a
perf: parallelize transaction phases
forhappy Sep 29, 2026
2c87f73
perf: cache immutable account placement
forhappy Sep 29, 2026
f34a00c
fix: avoid caching empty table identities
forhappy Sep 29, 2026
3d5b125
fix: evict deleted placement entries
forhappy Sep 29, 2026
105f167
docs: rename benchmark script
forhappy Sep 29, 2026
8184697
perf: reduce transaction admission round trips
forhappy Sep 29, 2026
ba31ca0
docs: refresh transaction benchmark sample
forhappy Sep 29, 2026
a57f7fc
perf: scale SQL workers with available CPUs
forhappy Sep 29, 2026
de768aa
docs: record CPU-aware worker benchmark
forhappy Sep 29, 2026
1c41bb2
perf: inline small transaction payloads
forhappy Sep 29, 2026
c405b15
perf: cache complete routed pages
forhappy Sep 29, 2026
f51d11a
perf: cache local cell routing handles
forhappy Sep 29, 2026
e82b9ab
docs: qualify cache benchmark capacity
forhappy Sep 29, 2026
880b4aa
perf: skip unused mutation images
forhappy Sep 29, 2026
bd0bb2b
Merge origin/main into performance branch
forhappy Sep 29, 2026
d4a6a00
perf: remove redundant transaction coordination reads
forhappy Sep 29, 2026
50b7578
perf: right-size no-return mutation mailboxes
forhappy Sep 29, 2026
625ebce
perf: bypass coordination for local transactions
forhappy Sep 29, 2026
7f51ace
perf: right-size transaction write envelopes
forhappy Sep 29, 2026
f1830fe
perf: batch cross-cell read release evidence
forhappy Sep 29, 2026
5ca177e
perf: write small item blobs directly
forhappy Sep 29, 2026
009aa5e
docs: record small-item write benchmark
forhappy Sep 29, 2026
853dd84
perf: batch transaction coordinator evidence
forhappy Sep 29, 2026
801ae32
docs: record batched transaction evidence
forhappy Sep 29, 2026
aed6536
perf: extend cached local cell handles
forhappy Sep 29, 2026
f5857c9
perf: make route caches synchronous
forhappy Sep 29, 2026
fa0f25d
perf: use read-only queries for local transact gets
forhappy Sep 29, 2026
cca0b79
perf: inline small item images in primary rows
forhappy Sep 29, 2026
602454c
perf: make active Cell capacity configurable
forhappy Sep 29, 2026
ad2eb29
perf: expose SQL worker tuning
forhappy Sep 29, 2026
c9346db
docs: record worker tuning benchmark
forhappy Sep 29, 2026
3c290f8
perf: skip old image reads for unconditional deletes
forhappy Sep 29, 2026
41ab85e
perf: bound no-return delete envelopes
forhappy Sep 29, 2026
0cfc841
perf: register bounded delete command
forhappy Sep 29, 2026
9956c43
docs: record latest delete benchmark
forhappy Sep 29, 2026
41cf917
perf: cache routed directory leaf pages
forhappy Sep 29, 2026
a94105a
perf: coalesce routed no-return mutations
forhappy Sep 29, 2026
d549193
perf: coalesce routed no-return updates
forhappy Sep 29, 2026
b920a15
perf: keep independent keys in mutation batches
forhappy Sep 29, 2026
af8fab7
fix: preserve transaction progress under recovery and capacity races
forhappy Sep 29, 2026
94f4dcd
docs: record refresh of historical performance sample
forhappy Sep 29, 2026
fef8da8
docs: specify benchmark payload and RustFS image
forhappy Sep 29, 2026
561398d
perf: cache opt-in table metadata responses
forhappy Sep 30, 2026
c7229a6
fix: advance segmented scan past filtered storage pages
forhappy Sep 30, 2026
0c86c95
fix: bound large transaction read responses per Cell
forhappy Sep 30, 2026
c1ca421
docs: record direct RustFS PUT timing diagnostic
forhappy Sep 30, 2026
8aae661
docs: define follower durability integration gates
forhappy Sep 30, 2026
23804ee
perf: flush full no-return queues without another wait
forhappy Sep 30, 2026
8fff592
docs: explain sequential BatchWriteItem publication
forhappy Sep 30, 2026
f8e33cc
feat: bind follower log authority to node lease
forhappy Sep 30, 2026
17c6c67
feat: accept authenticated persistent follower log requests
forhappy Sep 30, 2026
a8abbb9
feat: add pinned follower log transport and enrollment adapter
forhappy Sep 30, 2026
7655c60
feat: recover local follower lanes under fenced claims
forhappy Sep 30, 2026
37285a7
bench: rerun release APIs against pinned SQLite fixture
forhappy Sep 30, 2026
e6aec8a
test: verify remote follower recovery over pinned mTLS
forhappy Sep 30, 2026
1c38cca
feat: compose bounded node-log recovery overlays
forhappy Sep 30, 2026
ad4af2e
perf: batch index projection and recover durable owners on restart
forhappy Sep 30, 2026
718d4bf
Pin latest Cellule and record release qualification attempt
forhappy Sep 30, 2026
3c712f4
Retain benchmark logs and background capacity warnings
forhappy Sep 30, 2026
3820807
Record complete Cellule main release performance rerun
forhappy Sep 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 8 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ repository = "https://github.com/crabbuild/beyonddb"
rust-version = "1.97"

[workspace.dependencies]
cellule-app = { git = "https://github.com/crabbuild/cellule.git", rev = "70c3c218fafc815b951a40d4df1b50bba15b7d4c" }
cellule-host = { git = "https://github.com/crabbuild/cellule.git", rev = "70c3c218fafc815b951a40d4df1b50bba15b7d4c" }
cellule-peer-http = { git = "https://github.com/crabbuild/cellule.git", rev = "70c3c218fafc815b951a40d4df1b50bba15b7d4c" }
cellule-runtime = { git = "https://github.com/crabbuild/cellule.git", rev = "70c3c218fafc815b951a40d4df1b50bba15b7d4c" }
cellule-store = { git = "https://github.com/crabbuild/cellule.git", rev = "70c3c218fafc815b951a40d4df1b50bba15b7d4c" }
cellule-ltx = { git = "https://github.com/crabbuild/cellule.git", rev = "70c3c218fafc815b951a40d4df1b50bba15b7d4c" }
cellule-app = { git = "https://github.com/crabbuild/cellule.git", rev = "9e17746a633ca1046bd93866866074226091f81a" }
cellule-host = { git = "https://github.com/crabbuild/cellule.git", rev = "9e17746a633ca1046bd93866866074226091f81a" }
cellule-peer-http = { git = "https://github.com/crabbuild/cellule.git", rev = "9e17746a633ca1046bd93866866074226091f81a" }
cellule-runtime = { git = "https://github.com/crabbuild/cellule.git", rev = "9e17746a633ca1046bd93866866074226091f81a" }
cellule-store = { git = "https://github.com/crabbuild/cellule.git", rev = "9e17746a633ca1046bd93866866074226091f81a" }
cellule-ltx = { git = "https://github.com/crabbuild/cellule.git", rev = "9e17746a633ca1046bd93866866074226091f81a" }
async-trait = "0.1"
blake3 = "1.8"
futures-util = "0.3"
Expand All @@ -29,6 +29,7 @@ aws-credential-types = "1"
aws-sdk-dynamodb = "1"
ed25519-dalek = "2.2"
object_store = { version = "0.14.1", default-features = false }
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "stream"] }
tempfile = "3"

[package]
Expand Down Expand Up @@ -60,6 +61,7 @@ extenddb-storage = { git = "https://github.com/crabbuild/extenddb.git", rev = "7
futures-util.workspace = true
fs4 = "0.13.1"
getrandom = "0.3"
reqwest.workspace = true
serde.workspace = true
serde_json.workspace = true
sysinfo = { version = "0.38.4", default-features = false, features = ["system"] }
Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ stream intent commit in one Cell command. The successful response follows
durable publication. [PNG version](diagram/beyonddb-architecture/durable-write@2x.png) ·
[Detailed architecture and recovery design](docs/architecture.md)

The serving binary currently waits for object-store publication on each
durable write. Cellule's follower-log mode is not enabled in BeyondDB. An
opt-in persistent follower store and authenticated peer transport exist, but
the durability provider is not installed in serving and successor recovery
is unfinished. See the [follower durability design](docs/follower-durability.md).

## Current capability boundary

| Area | Current state |
Expand Down
48 changes: 48 additions & 0 deletions benchmarks/2026-09-29-cellule-main-attempt/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Cellule `9e17746` release qualification attempt

This is a **failed, incomplete performance qualification**, retained to make the
result reproducible. BeyondDB was built with Cellule
`9e17746a633ca1046bd93866866074226091f81a`; ExtendDB SQLite remained at
`7eaa89b437feed0af0f05883d3f1493f86c6fc6d`. The BeyondDB binary SHA-256
and the exact pinned RustFS image are in [meta.json](meta.json). Both backends
used signed boto3 requests, a 1 KiB payload, 5 seconds per case, and one/eight
clients. BeyondDB used four initial partitions, 12 SQL workers, and the auth
cache. SQLite used its local file backend. See the fixture details in
[meta.json](meta.json) and [sqlite-meta.json](sqlite-meta.json).

The host had 12 logical CPUs. Load was **44.5** at pair start, **47.5** after
BeyondDB, and **90.4** after SQLite. Other builds and virtual machines were
active. These numbers cannot establish an intrinsic throughput difference or
the impact of the Cellule update.

| API | BeyondDB 1 / 8 clients (req/s) | SQLite 1 / 8 clients (req/s) |
| --- | ---: | ---: |
| GetItem | 125.85 / 283.41 | 260.56 / 482.32 |
| Query | 153.15 / 228.51 | 224.34 / 538.40 |
| Scan | 107.93 / 86.75 | 215.92 / 475.59 |
| BatchGetItem | 30.78 / 191.86 | 115.40 / 353.96 |
| TransactGetItems | 1.41 / 2.14 | 76.73 / 225.91 |

The eight-client TransactGetItems case completed 21 requests and returned one
`TransactionCanceledException` with a `ThrottlingError` cancellation reason.
The BeyondDB server also logged deferred GSI projection and capacity sweeps,
incomplete cross-Cell participant resolution, and a transaction participant
capacity refusal from Cell mailbox-byte exhaustion. Zero errors in the first
nine cases therefore do not mean background work settled.
The fail-fast harness then stopped, leaving **10 of 24 BeyondDB cases** in
[run.json](run.json). SQLite completed **24 of 24 cases with zero request
errors** in [sqlite-run.json](sqlite-run.json). Full p50/p95/p99 latency,
elapsed time, and error fields are in those raw files. The harness now offers
`--continue-on-error` so the next overloaded attempt can collect all cases and
still exit unsuccessfully when any request fails.

The separate signed release smoke check wrote a 1 KiB item, killed the serving
process, and read the same item after restart. All 17 library tests, formatting,
and strict Clippy passed. The broader ignored SDK restart test failed earlier
in GSI setup with HTTP 503 after Cell SQL deadlines on a host with load near
100. That failure remains unresolved. Neither this attempt nor the smoke check
proves the all-API SQLite performance objective.

Run control, server warnings, and raw case output are in
[pair-status.json](pair-status.json), [server.log](server.log), and
[bench.log](bench.log).
11 changes: 11 additions & 0 deletions benchmarks/2026-09-29-cellule-main-attempt/bench.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{"operation": "get", "items_per_request": 1, "clients": 1, "elapsed_s": 5.01, "completed": 630, "errors": 0, "first_error": null, "ops_per_s": 125.85, "items_per_s": 125.85, "mean_ms": 7.94, "p50_ms": 4.93, "p95_ms": 18.72, "p99_ms": 26.41}
{"operation": "get", "items_per_request": 1, "clients": 8, "elapsed_s": 5.01, "completed": 1421, "errors": 0, "first_error": null, "ops_per_s": 283.41, "items_per_s": 283.41, "mean_ms": 28.11, "p50_ms": 21.15, "p95_ms": 64.72, "p99_ms": 120.36}
{"operation": "query", "items_per_request": 1, "clients": 1, "elapsed_s": 5.05, "completed": 773, "errors": 0, "first_error": null, "ops_per_s": 153.15, "items_per_s": 153.15, "mean_ms": 6.53, "p50_ms": 4.61, "p95_ms": 16.61, "p99_ms": 28.73}
{"operation": "query", "items_per_request": 1, "clients": 8, "elapsed_s": 5.01, "completed": 1146, "errors": 0, "first_error": null, "ops_per_s": 228.51, "items_per_s": 228.51, "mean_ms": 34.9, "p50_ms": 25.67, "p95_ms": 94.88, "p99_ms": 210.2}
{"operation": "scan", "items_per_request": 1, "clients": 1, "elapsed_s": 5.0, "completed": 540, "errors": 0, "first_error": null, "ops_per_s": 107.93, "items_per_s": 107.93, "mean_ms": 9.26, "p50_ms": 5.22, "p95_ms": 25.83, "p99_ms": 77.64}
{"operation": "scan", "items_per_request": 1, "clients": 8, "elapsed_s": 5.05, "completed": 438, "errors": 0, "first_error": null, "ops_per_s": 86.75, "items_per_s": 86.75, "mean_ms": 91.6, "p50_ms": 31.97, "p95_ms": 92.1, "p99_ms": 2885.71}
{"operation": "batch_get", "items_per_request": 2, "clients": 1, "elapsed_s": 5.0, "completed": 154, "errors": 0, "first_error": null, "ops_per_s": 30.78, "items_per_s": 61.56, "mean_ms": 32.45, "p50_ms": 20.11, "p95_ms": 109.1, "p99_ms": 202.28}
{"operation": "batch_get", "items_per_request": 2, "clients": 8, "elapsed_s": 5.03, "completed": 965, "errors": 0, "first_error": null, "ops_per_s": 191.86, "items_per_s": 383.72, "mean_ms": 41.49, "p50_ms": 29.77, "p95_ms": 94.39, "p99_ms": 225.75}
{"operation": "transact_get", "items_per_request": 2, "clients": 1, "elapsed_s": 5.67, "completed": 8, "errors": 0, "first_error": null, "ops_per_s": 1.41, "items_per_s": 2.82, "mean_ms": 708.14, "p50_ms": 852.61, "p95_ms": 1047.76, "p99_ms": 1047.76}
{"operation": "transact_get", "items_per_request": 2, "clients": 8, "elapsed_s": 9.83, "completed": 21, "errors": 1, "first_error": "TransactionCanceledException: An error occurred (TransactionCanceledException) when calling the TransactGetItems operation: Transaction cancelled, please refer cancellation reasons for specific reasons [ThrottlingError, None]", "ops_per_s": 2.14, "items_per_s": 4.27, "mean_ms": 3127.2, "p50_ms": 3610.88, "p95_ms": 5749.02, "p99_ms": 5749.02}
stopped after request error
2 changes: 2 additions & 0 deletions benchmarks/2026-09-29-cellule-main-attempt/beyond-runner.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
run started; host load: (46.8740234375, 58.19580078125, 53.64794921875)
run finished exit: 1 host load: (47.5185546875, 56.4794921875, 53.38232421875)
29 changes: 29 additions & 0 deletions benchmarks/2026-09-29-cellule-main-attempt/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"server_commit": "ad4af2efd775409c2820a19013e59c79807d7c20 + Cellule 9e17746 pin and recovery fix",
"binary_sha256": "6429879d281eb49c9dd5b9b361007d52002560e64ce43a5da5c5a34e05c12abf",
"rustfs_image": "ghcr.io/rustfs/rustfs:1.0.0-glibc@sha256:bffcab0c9d647aab0055d1c69d340b202d0909966b385932d4ead1aeb7602858",
"host_load_start": [
46.8740234375,
58.19580078125,
53.64794921875
],
"logical_cpus": 12,
"boto3_version": "1.43.105",
"fixture": {
"initial_partitions": 4,
"sql_workers": 12,
"max_active_cells": 128,
"follower_store_bytes": 1073741824,
"auth_cache_enabled": true,
"server_object_publication": true
},
"endpoint": "http://127.0.0.1:53167",
"started_at_unix": 1790749922.373023,
"host_load_end": [
47.5185546875,
56.4794921875,
53.38232421875
],
"ended_at_unix": 1790749990.2865338,
"bench_exit_code": 1
}
22 changes: 22 additions & 0 deletions benchmarks/2026-09-29-cellule-main-attempt/pair-status.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"root": "/var/folders/rn/k2b7mvbs2dgb__6ys6_h94pm0000gn/T/beyonddb-perf-current-zsbtxro3",
"started_at_unix": 1790749916.511093,
"host_load_start": [
44.51318359375,
57.92919921875,
53.5283203125
],
"beyond_exit_code": 1,
"host_load_after_beyond": [
47.5185546875,
56.4794921875,
53.38232421875
],
"sqlite_exit_code": 0,
"ended_at_unix": 1790750119.0698938,
"host_load_end": [
90.37353515625,
66.35498046875,
57.46142578125
]
}
Loading
Loading