59ee532bf6
The secure-messaging store (smsgDB) used the LevelDB API directly. Mass- mapped to the equivalent RocksDB types: leveldb::DB/Status/WriteBatch/ Iterator/Slice/ReadOptions/WriteOptions/WriteBatch::Handler -> rocksdb::*. The RocksDB API surface for our usage is binary-compatible — pure namespace substitution, no semantic changes. Consumers in rpcsmessage.cpp and qt/messagemodel.cpp updated to match. RocksDB now becomes a hard build dependency (was optional behind BUILD_ROCKSDB). The chain-DB rocksdb backend is consequently always available; -chaindb=leveldb remains the default until the Phase-4 LevelDB retirement. Removed the BUILD_ROCKSDB cmake option, the #ifdef BUILD_ROCKSDB guards in txdb*, and the runtime error path that triggered when the flag was off. CI updated: librocksdb-dev (Ubuntu), mingw-w64-x86_64-rocksdb (MSYS2), and rocksdb (Homebrew) added to all build jobs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
85 lines
2.9 KiB
Markdown
85 lines
2.9 KiB
Markdown
# Chain DB benchmark harness
|
||
|
||
Measures `FastImportBlockFile()` speed under each chain-DB backend
|
||
(LevelDB vs RocksDB) using a user-supplied `blk0001.dat` block stream.
|
||
|
||
## Prerequisites
|
||
|
||
- A `trianglesd` binary (RocksDB is now a hard build dep, both backends are
|
||
always available):
|
||
```
|
||
cmake -B build -G Ninja \
|
||
-DCMAKE_BUILD_TYPE=Release \
|
||
-DBUILD_QT=OFF \
|
||
-DBUILD_DAEMON=ON
|
||
cmake --build build
|
||
```
|
||
- An `blk0001.dat` file (old-style block stream). If you have a synced
|
||
node, copy `~/.triangles/blk0001.dat` (Linux) or `%APPDATA%\triangles\blk0001.dat` (Windows).
|
||
- Free disk space: ~3× the size of `blk0001.dat` per backend run
|
||
(raw blocks + chain DB index + working space).
|
||
|
||
## Usage
|
||
|
||
```bash
|
||
contrib/bench/bench-chaindb.sh \
|
||
--binary=$(pwd)/build/bin/trianglesd \
|
||
--bootstrap=/path/to/blk0001.dat
|
||
```
|
||
|
||
Runs each backend in turn, appends a CSV row to `./bench-results.csv`,
|
||
and prints a summary to stdout. Default `--dbcache=2048` (MB).
|
||
|
||
### Options
|
||
|
||
| Flag | Default | Notes |
|
||
| --- | --- | --- |
|
||
| `--binary=PATH` | (required) | Path to `trianglesd` |
|
||
| `--bootstrap=PATH` | (required) | Path to `blk0001.dat` |
|
||
| `--backends=LIST` | `leveldb,rocksdb` | Comma-separated subset |
|
||
| `--workdir=DIR` | `/tmp/triangles-bench-XXXXXX` | Per-backend datadirs go here |
|
||
| `--dbcache=MB` | `2048` | Chain DB cache size |
|
||
| `--results-csv=FILE` | `./bench-results.csv` | Appended to |
|
||
| `--keep-datadirs` | off | Preserve datadirs after run for inspection |
|
||
| `--rpc-port=BASE` | `19112` | Each backend uses `BASE+offset` |
|
||
|
||
## What it measures
|
||
|
||
| Column | Source |
|
||
| --- | --- |
|
||
| `wall_ms` | The daemon's own log line: `FastImportBlockFile: indexed N blocks in Mms` |
|
||
| `peak_rss_kb` | `ps -o rss=` sampled once per second |
|
||
| `datadir_bytes` | `du -sb` of the working datadir (includes `blk0001.dat`) |
|
||
| `blocks_indexed` | Parsed from the same log line |
|
||
|
||
## What it does not measure
|
||
|
||
- Network IBD (peer fetch, header sync) — this is pure DB ingest.
|
||
- UTXO snapshot load — `LoadSnapshot` is currently rocksdb-guarded
|
||
(see `src/utxosnapshot.cpp`); will be unblocked when LevelDB is retired.
|
||
- Reorg cost — separate test, not yet implemented.
|
||
- Disk I/O bytes (read/written) — could be added with `iostat` integration.
|
||
|
||
## Interpreting results
|
||
|
||
A meaningful comparison requires both rows to have run on the same machine
|
||
with the same `blk0001.dat`. The `host` column makes mixing runs across
|
||
machines visible in the CSV.
|
||
|
||
Backend-relevant size comparisons should subtract `bootstrap_size_bytes`
|
||
from `datadir_bytes` to isolate the chain DB tree.
|
||
|
||
## One-liners
|
||
|
||
```bash
|
||
# LevelDB only
|
||
./bench-chaindb.sh --binary=... --bootstrap=... --backends=leveldb
|
||
|
||
# Compare 2GB vs 4GB cache on RocksDB
|
||
./bench-chaindb.sh --binary=... --bootstrap=... --backends=rocksdb --dbcache=2048
|
||
./bench-chaindb.sh --binary=... --bootstrap=... --backends=rocksdb --dbcache=4096
|
||
|
||
# Keep the datadirs for poking around afterwards
|
||
./bench-chaindb.sh --binary=... --bootstrap=... --keep-datadirs
|
||
```
|