Fix incorrect initial CurrentIdx in kvdb
Eduard S eduard@iden3.io
Thu, 28 Jan 2021 11:43:33 +0100
5 files changed,
91 insertions(+),
5 deletions(-)
M
coordinator/purger.go
→
coordinator/purger.go
@@ -133,9 +133,11 @@ if err != nil {
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
M
db/kvdb/kvdb.go
→
db/kvdb/kvdb.go
@@ -135,7 +135,7 @@ if err != nil {
return tracerr.Wrap(err) } kvdb.db = sto - kvdb.CurrentIdx = 255 + kvdb.CurrentIdx = common.RollupConstReservedIDx // 255 kvdb.CurrentBatch = 0 return nil@@ -204,7 +204,7 @@ if err != nil {
return tracerr.Wrap(err) } kvdb.db = sto - kvdb.CurrentIdx = 255 + kvdb.CurrentIdx = common.RollupConstReservedIDx // 255 kvdb.CurrentBatch = 0 return nil@@ -286,7 +286,7 @@ // used for an Account in the KVDB.
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 @@ }
return nil } + +// Close the DB +func (kvdb *KVDB) Close() { + kvdb.db.Close() +}
M
db/kvdb/kvdb_test.go
→
db/kvdb/kvdb_test.go
@@ -195,3 +195,42 @@ require.NoError(t, err)
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) +}
M
db/statedb/statedb.go
→
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.
M
db/statedb/statedb_test.go
→
db/statedb/statedb_test.go
@@ -532,3 +532,38 @@ require.NoError(t, err)
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) +}