From fe91b4c8780100907a367bf3de594bb4689f1857 Mon Sep 17 00:00:00 2001 From: Ori Newman Date: Sun, 12 Apr 2020 09:25:40 +0300 Subject: [PATCH] [NOD-914] Make LevelDB.Cursor receive bucket instead of prefix (#696) --- database/ffldb/ffldb.go | 2 +- database/ffldb/initialize.go | 3 +-- database/ffldb/ldb/cursor.go | 12 ++++++------ database/ffldb/ldb/transaction.go | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/database/ffldb/ffldb.go b/database/ffldb/ffldb.go index 634ac35db..31b4a20f8 100644 --- a/database/ffldb/ffldb.go +++ b/database/ffldb/ffldb.go @@ -156,7 +156,7 @@ func (db *ffldb) RetrieveFromStore(storeName string, location []byte) ([]byte, e // Cursor begins a new cursor over the given bucket. // This method is part of the DataAccessor interface. func (db *ffldb) Cursor(bucket *database.Bucket) (database.Cursor, error) { - ldbCursor := db.levelDB.Cursor(bucket.Path()) + ldbCursor := db.levelDB.Cursor(bucket) return ldbCursor, nil } diff --git a/database/ffldb/initialize.go b/database/ffldb/initialize.go index 599e5cda5..e403ca3e8 100644 --- a/database/ffldb/initialize.go +++ b/database/ffldb/initialize.go @@ -18,8 +18,7 @@ func (db *ffldb) initialize() error { } func (db *ffldb) flatFiles() (map[string][]byte, error) { - flatFilesBucketPath := flatFilesBucket.Path() - flatFilesCursor := db.levelDB.Cursor(flatFilesBucketPath) + flatFilesCursor := db.levelDB.Cursor(flatFilesBucket) defer func() { err := flatFilesCursor.Close() if err != nil { diff --git a/database/ffldb/ldb/cursor.go b/database/ffldb/ldb/cursor.go index bc9a1d73c..e2b17ed79 100644 --- a/database/ffldb/ldb/cursor.go +++ b/database/ffldb/ldb/cursor.go @@ -11,17 +11,17 @@ import ( // LevelDBCursor is a thin wrapper around native leveldb iterators. type LevelDBCursor struct { ldbIterator iterator.Iterator - prefix []byte + bucket *database.Bucket isClosed bool } // Cursor begins a new cursor over the given prefix. -func (db *LevelDB) Cursor(prefix []byte) *LevelDBCursor { - ldbIterator := db.ldb.NewIterator(util.BytesPrefix(prefix), nil) +func (db *LevelDB) Cursor(bucket *database.Bucket) *LevelDBCursor { + ldbIterator := db.ldb.NewIterator(util.BytesPrefix(bucket.Path()), nil) return &LevelDBCursor{ ldbIterator: ldbIterator, - prefix: prefix, + bucket: bucket, isClosed: false, } } @@ -84,8 +84,8 @@ func (c *LevelDBCursor) Key() (*database.Key, error) { return nil, errors.Wrapf(database.ErrNotFound, "cannot get the "+ "key of a done cursor") } - suffix := bytes.TrimPrefix(fullKeyPath, c.prefix) - return database.MakeBucket(c.prefix).Key(suffix), nil + suffix := bytes.TrimPrefix(fullKeyPath, c.bucket.Path()) + return c.bucket.Key(suffix), nil } // Value returns the value of the current key/value pair, or ErrNotFound if done. diff --git a/database/ffldb/ldb/transaction.go b/database/ffldb/ldb/transaction.go index a2df308ae..41c3866da 100644 --- a/database/ffldb/ldb/transaction.go +++ b/database/ffldb/ldb/transaction.go @@ -135,5 +135,5 @@ func (tx *LevelDBTransaction) Cursor(bucket *database.Bucket) (*LevelDBCursor, e return nil, errors.New("cannot open a cursor from a closed transaction") } - return tx.db.Cursor(bucket.Path()), nil + return tx.db.Cursor(bucket), nil }