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)); +}