Merge pull request #513 from hermeznetwork/test/idx

Fix incorrect initial CurrentIdx in kvdb
This commit is contained in:
arnau
2021-01-29 13:27:03 +01:00
committed by GitHub
5 changed files with 91 additions and 5 deletions

View File

@@ -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

View File

@@ -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()
}

View File

@@ -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)
}

View File

@@ -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.

View File

@@ -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)
}