Skip to content

Commit e8e5f9e

Browse files
authored
Merge pull request #18032 from MinaProtocol/lyh/dkijania/patch-ldb
Implement an alternative to ldb that statically links to Mina so rocksdb version matches
2 parents ea6244d + 43aa7ec commit e8e5f9e

File tree

6 files changed

+62
-5
lines changed

6 files changed

+62
-5
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ build-daemon-utils: ocaml_checks reformat-diff libp2p_helper ## Build daemon uti
164164
src/app/validate_keypair/validate_keypair.exe \
165165
src/app/runtime_genesis_ledger/runtime_genesis_ledger.exe \
166166
src/lib/snark_worker/standalone/run_snark_worker.exe \
167+
src/app/rocksdb-scanner/rocksdb_scanner.exe \
167168
--profile=$(DUNE_PROFILE) \
168169
&& echo "✅ Build complete"
169170

scripts/debian/builder-helpers.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@ copy_common_daemon_configs() {
169169
"${BUILDDIR}/usr/local/bin/mina-validate-keypair"
170170
cp ./default/src/lib/snark_worker/standalone/run_snark_worker.exe \
171171
"${BUILDDIR}/usr/local/bin/mina-standalone-snark-worker"
172+
cp ./default/src/app/rocksdb-scanner/rocksdb_scanner.exe \
173+
"${BUILDDIR}/usr/local/bin/mina-rocksdb-scanner"
174+
172175
# Copy signature-based Binaries (based on signature type $2 passed into the \
173176
# function)
174177
cp ./default/src/app/cli/src/mina_"${2}"_signatures.exe \
@@ -861,4 +864,4 @@ build_create_legacy_genesis_deb() {
861864

862865
build_deb mina-create-legacy-genesis
863866
}
864-
## END CREATE LEGACY GENESIS PACKAGE ##
867+
## END CREATE LEGACY GENESIS PACKAGE ##

scripts/hardfork/mina-verify-packaged-fork-config

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ MINA_EXE=${MINA_EXE:-$(source_build_fallback mina ./_build/default/src/app/cli/s
5656
MINA_GENESIS_EXE=${MINA_GENESIS_EXE:-$(source_build_fallback mina-create-genesis ./_build/default/src/app/runtime_genesis_ledger/runtime_genesis_ledger.exe)}
5757
MINA_LEGACY_GENESIS_EXE=${MINA_LEGACY_GENESIS_EXE:-$(source_build_fallback mina-create-legacy-genesis ./runtime_genesis_ledger_of_mainnet.exe)}
5858
CREATE_RUNTIME_CONFIG=${CREATE_RUNTIME_CONFIG:-$(source_build_fallback mina-hf-create-runtime-config ./scripts/hardfork/create_runtime_config.sh)}
59+
MINA_ROCKSDB_SCANNER=${MINA_ROCKSDB_SCANNER:-$(source_build_fallback mina-rocksdb-scanner ./_build/default/src/app/rocksdb-scanner/rocksdb_scanner.exe)}
5960
GSUTIL=${GSUTIL:-$(command -v gsutil || echo "")}
6061

6162
if [[ ! -e "$PRECOMPUTED_FORK_BLOCK" && ( -z "$GSUTIL" || ! -x "$GSUTIL" ) ]]; then
@@ -206,7 +207,6 @@ for file in "$workdir"/packaged-*.json; do
206207
fi
207208
done
208209

209-
ldb_cmd=$(command -v rocksdb-ldb || command -v rocksdb_ldb || command -v ldb)
210210
for file in "$workdir"/ledgers/*.tar.gz; do
211211
tarname=$(basename "$file")
212212
tarname=${tarname%.tar.gz}
@@ -218,9 +218,9 @@ for file in "$workdir"/ledgers/*.tar.gz; do
218218
base_s3_url="${MINA_LEDGER_S3_BUCKET:-https://s3-us-west-2.amazonaws.com/snark-keys-ro.o1test.net}"
219219
curl "$base_s3_url/$tarname.tar.gz" | tar -xz -C "$tardir/web"
220220

221-
$ldb_cmd --hex --db="$tardir/packaged" scan > "$workdir/packaged.scan"
222-
$ldb_cmd --hex --db="$tardir/web" scan > "$workdir/web.scan"
223-
$ldb_cmd --hex --db="$tardir/generated" scan > "$workdir/generated.scan"
221+
for kind in {packaged,web,generated}; do
222+
$MINA_ROCKSDB_SCANNER --db-path "$tardir/$kind" --output-file "$workdir/$kind.scan"
223+
done
224224

225225
if ! cmp "$workdir/generated.scan" "$workdir/packaged.scan" || ! cmp "$workdir/packaged.scan" "$workdir/web.scan"; then
226226
echo "Error: kvdb contents mismatch for $tarname" >&2

src/app/rocksdb-scanner/dune

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
(executable
2+
(package rocksdb_scanner)
3+
(name rocksdb_scanner)
4+
(public_name mina_rocksdb_scanner)
5+
(modes native)
6+
(libraries
7+
async
8+
core
9+
logger
10+
rocksdb)
11+
(instrumentation
12+
(backend bisect_ppx))
13+
(preprocess
14+
(pps ppx_jane ppx_mina ppx_version)))
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
open Core
2+
open Async
3+
4+
(* RocksDB scanning function that replaces ldb command *)
5+
let scan_rocksdb_to_and_dump_hex_kvs db_path output_file =
6+
let db = Rocksdb.Database.create db_path in
7+
let kv_pairs = Rocksdb.Database.to_alist db in
8+
let%bind writer = Writer.open_file output_file in
9+
List.iter kv_pairs ~f:(fun (key, value) ->
10+
let key_hex =
11+
Bigstring.to_string key
12+
|> String.concat_map ~f:(fun c -> sprintf "%02x" (Char.to_int c))
13+
in
14+
let value_hex =
15+
Bigstring.to_string value
16+
|> String.concat_map ~f:(fun c -> sprintf "%02x" (Char.to_int c))
17+
in
18+
Writer.writef writer "%s : %s\n" key_hex value_hex ) ;
19+
let%map () = Writer.close writer in
20+
Rocksdb.Database.close db
21+
22+
let root_command =
23+
Command.async ~summary:"Scan RocksDB and dump key-value pairs as hex strings"
24+
(let%map_open.Command db_path =
25+
flag "--db-path" (required string)
26+
~doc:"PATH address of Rocksdb database"
27+
and output_file =
28+
flag "--output-file" (required string)
29+
~doc:"PATH of file to dump scanning result"
30+
in
31+
fun () ->
32+
let logger = Logger.create () in
33+
[%log info] "Scanning RocksDB at %s to output file %s" db_path
34+
output_file ;
35+
let%map () = scan_rocksdb_to_and_dump_hex_kvs db_path output_file in
36+
[%log info] "Successfully dumped data to %s" output_file )
37+
38+
let () = Command.run root_command

src/dune-project

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@
160160
(package (name random_oracle))
161161
(package (name replayer))
162162
(package (name rocksdb))
163+
(package (name rocksdb_scanner))
163164
(package (name rosetta_coding))
164165
(package (name rosetta_lib))
165166
(package (name rosetta_models))

0 commit comments

Comments
 (0)