diff --git a/coordinator/purger.go b/coordinator/purger.go index 21e21fc..fa0256d 100644 --- a/coordinator/purger.go +++ b/coordinator/purger.go @@ -133,9 +133,11 @@ func poolMarkInvalidOldNonces(l2DB *l2db.L2DB, stateDB *statedb.LocalStateDB, if tracerr.Unwrap(err) != db.ErrNotFound { return tracerr.Wrap(err) } else if idx <= lastIdx { - return tracerr.Wrap(fmt.Errorf("account with idx %v not found: %w", idx, err)) + return tracerr.Wrap(fmt.Errorf("account with idx %v (lastIdx: %v) "+ + "not found: %w", idx, lastIdx, err)) } else { - return tracerr.Wrap(fmt.Errorf("unexpected stateDB error with idx %v: %w", idx, err)) + return tracerr.Wrap(fmt.Errorf("unexpected stateDB error with idx %v "+ + "(lastIdx: %v): %w", idx, lastIdx, err)) } } idxsNonce[i].Idx = idx diff --git a/db/kvdb/kvdb.go b/db/kvdb/kvdb.go index b136f0e..88d9c60 100644 --- a/db/kvdb/kvdb.go +++ b/db/kvdb/kvdb.go @@ -135,7 +135,7 @@ func (kvdb *KVDB) reset(batchNum common.BatchNum, closeCurrent bool) error { return tracerr.Wrap(err) } kvdb.db = sto - kvdb.CurrentIdx = 255 + kvdb.CurrentIdx = common.RollupConstReservedIDx // 255 kvdb.CurrentBatch = 0 return nil @@ -204,7 +204,7 @@ func (kvdb *KVDB) ResetFromSynchronizer(batchNum common.BatchNum, synchronizerKV return tracerr.Wrap(err) } kvdb.db = sto - kvdb.CurrentIdx = 255 + kvdb.CurrentIdx = common.RollupConstReservedIDx // 255 kvdb.CurrentBatch = 0 return nil @@ -286,7 +286,7 @@ func (kvdb *KVDB) setCurrentBatch() error { func (kvdb *KVDB) GetCurrentIdx() (common.Idx, error) { idxBytes, err := kvdb.db.Get(keyCurrentIdx) if tracerr.Unwrap(err) == db.ErrNotFound { - return 0, nil + return common.RollupConstReservedIDx, nil // 255, nil } if err != nil { return 0, tracerr.Wrap(err) @@ -442,3 +442,8 @@ func pebbleMakeCheckpoint(source, dest string) error { return nil } + +// Close the DB +func (kvdb *KVDB) Close() { + kvdb.db.Close() +} diff --git a/db/kvdb/kvdb_test.go b/db/kvdb/kvdb_test.go index 16d201e..f50b685 100644 --- a/db/kvdb/kvdb_test.go +++ b/db/kvdb/kvdb_test.go @@ -195,3 +195,42 @@ func TestDeleteOldCheckpoints(t *testing.T) { assert.LessOrEqual(t, len(checkpoints), keep) } } + +func TestGetCurrentIdx(t *testing.T) { + dir, err := ioutil.TempDir("", "tmpdb") + require.NoError(t, err) + defer require.NoError(t, os.RemoveAll(dir)) + + keep := 16 + db, err := NewKVDB(dir, keep) + require.NoError(t, err) + + idx, err := db.GetCurrentIdx() + require.NoError(t, err) + assert.Equal(t, common.Idx(255), idx) + + db.Close() + + db, err = NewKVDB(dir, keep) + require.NoError(t, err) + + idx, err = db.GetCurrentIdx() + require.NoError(t, err) + assert.Equal(t, common.Idx(255), idx) + + err = db.MakeCheckpoint() + require.NoError(t, err) + + idx, err = db.GetCurrentIdx() + require.NoError(t, err) + assert.Equal(t, common.Idx(255), idx) + + db.Close() + + db, err = NewKVDB(dir, keep) + require.NoError(t, err) + + idx, err = db.GetCurrentIdx() + require.NoError(t, err) + assert.Equal(t, common.Idx(255), idx) +} diff --git a/db/statedb/statedb.go b/db/statedb/statedb.go index 8782ff9..dceb144 100644 --- a/db/statedb/statedb.go +++ b/db/statedb/statedb.go @@ -341,6 +341,11 @@ func (s *StateDB) MTGetRoot() *big.Int { return s.MT.Root().BigInt() } +// Close the StateDB +func (s *StateDB) Close() { + s.db.Close() +} + // LocalStateDB represents the local StateDB which allows to make copies from // the synchronizer StateDB, and is used by the tx-selector and the // batch-builder. LocalStateDB is an in-memory storage. diff --git a/db/statedb/statedb_test.go b/db/statedb/statedb_test.go index 22bb45e..da8736f 100644 --- a/db/statedb/statedb_test.go +++ b/db/statedb/statedb_test.go @@ -532,3 +532,38 @@ func TestDeleteOldCheckpoints(t *testing.T) { assert.LessOrEqual(t, len(checkpoints), keep) } } + +func TestCurrentIdx(t *testing.T) { + dir, err := ioutil.TempDir("", "tmpdb") + require.NoError(t, err) + defer require.NoError(t, os.RemoveAll(dir)) + + keep := 16 + sdb, err := NewStateDB(dir, keep, TypeSynchronizer, 32) + require.NoError(t, err) + + idx := sdb.CurrentIdx() + assert.Equal(t, common.Idx(255), idx) + + sdb.Close() + + sdb, err = NewStateDB(dir, keep, TypeSynchronizer, 32) + require.NoError(t, err) + + idx = sdb.CurrentIdx() + assert.Equal(t, common.Idx(255), idx) + + err = sdb.MakeCheckpoint() + require.NoError(t, err) + + idx = sdb.CurrentIdx() + assert.Equal(t, common.Idx(255), idx) + + sdb.Close() + + sdb, err = NewStateDB(dir, keep, TypeSynchronizer, 32) + require.NoError(t, err) + + idx = sdb.CurrentIdx() + assert.Equal(t, common.Idx(255), idx) +}