From 3a86bcaf37c3306c42e04c4f5c367bb8543056f7 Mon Sep 17 00:00:00 2001 From: erhant Date: Thu, 9 Jul 2026 11:32:37 +0300 Subject: [PATCH] fix(indexer): seed breakpoint meta only on fresh store `RISC0_DEV_MODE=1 RISC0_SKIP_BUILD=1 cargo test -p storage -p indexer_core` --- lez/storage/src/indexer/mod.rs | 8 +++++--- lez/storage/src/indexer/tests.rs | 11 +++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lez/storage/src/indexer/mod.rs b/lez/storage/src/indexer/mod.rs index dbf12226..eae1e511 100644 --- a/lez/storage/src/indexer/mod.rs +++ b/lez/storage/src/indexer/mod.rs @@ -88,9 +88,11 @@ impl RocksDBIO { let dbio = Self { db }; - // First breakpoint setup - dbio.put_breakpoint(0, initial_state)?; - dbio.put_meta_last_breakpoint_id(0)?; + // Seed the genesis snapshot once; reopening must not clobber breakpoint meta. + if dbio.get_meta_last_breakpoint_id()?.is_none() { + dbio.put_breakpoint(0, initial_state)?; + dbio.put_meta_last_breakpoint_id(0)?; + } Ok(dbio) } diff --git a/lez/storage/src/indexer/tests.rs b/lez/storage/src/indexer/tests.rs index ad963ef5..45361d4d 100644 --- a/lez/storage/src/indexer/tests.rs +++ b/lez/storage/src/indexer/tests.rs @@ -471,3 +471,14 @@ fn account_map() { assert_eq!(acc1_tx_limited_hashes.as_slice(), &tx_hash_res[1..5]); } + +#[test] +fn reopen_preserves_breakpoint_meta() { + let temp_dir = tempdir().unwrap(); + { + let dbio = RocksDBIO::open_or_create(temp_dir.path(), &initial_state()).unwrap(); + dbio.put_meta_last_breakpoint_id(5).unwrap(); + } // drop releases the RocksDB lock + let dbio = RocksDBIO::open_or_create(temp_dir.path(), &initial_state()).unwrap(); + assert_eq!(dbio.get_meta_last_breakpoint_id().unwrap(), Some(5)); +}