From c138efe41582a0231064c3d5be25f8ded3327ce3 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Wed, 25 Mar 2020 13:48:39 +0100 Subject: [PATCH] all: remove two iterator methods --- cmd/utils/cmd.go | 2 +- core/rawdb/accessors_chain.go | 2 +- core/rawdb/accessors_snapshot.go | 2 +- core/rawdb/table.go | 15 +------- core/state/snapshot/disklayer_test.go | 6 ++-- core/state/snapshot/wipe_test.go | 8 ++--- eth/filters/bench_test.go | 2 +- ethdb/dbtest/testsuite.go | 51 ++++++++++++--------------- ethdb/iterator.go | 13 ++----- ethdb/leveldb/leveldb.go | 13 ------- ethdb/memorydb/memorydb.go | 15 +------- les/clientpool.go | 3 +- 12 files changed, 39 insertions(+), 93 deletions(-) diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index a3ee45ba7f..79913637c6 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -301,7 +301,7 @@ func ExportPreimages(db ethdb.Database, fn string) error { defer writer.(*gzip.Writer).Close() } // Iterate over the preimages and export them - it := db.NewIteratorWithPrefix([]byte("secure-key-")) + it := db.NewIteratorWith([]byte("secure-key-"), nil) defer it.Release() for it.Next() { diff --git a/core/rawdb/accessors_chain.go b/core/rawdb/accessors_chain.go index 4d064a3390..b7538e3926 100644 --- a/core/rawdb/accessors_chain.go +++ b/core/rawdb/accessors_chain.go @@ -69,7 +69,7 @@ func ReadAllHashes(db ethdb.Iteratee, number uint64) []common.Hash { prefix := headerKeyPrefix(number) hashes := make([]common.Hash, 0, 1) - it := db.NewIteratorWithPrefix(prefix) + it := db.NewIteratorWith(prefix, nil) defer it.Release() for it.Next() { diff --git a/core/rawdb/accessors_snapshot.go b/core/rawdb/accessors_snapshot.go index 3a8d6c779e..63a76929f6 100644 --- a/core/rawdb/accessors_snapshot.go +++ b/core/rawdb/accessors_snapshot.go @@ -93,7 +93,7 @@ func DeleteStorageSnapshot(db ethdb.KeyValueWriter, accountHash, storageHash com // IterateStorageSnapshots returns an iterator for walking the entire storage // space of a specific account. func IterateStorageSnapshots(db ethdb.Iteratee, accountHash common.Hash) ethdb.Iterator { - return db.NewIteratorWithPrefix(storageSnapshotsKey(accountHash)) + return db.NewIteratorWith(storageSnapshotsKey(accountHash), nil) } // ReadSnapshotJournal retrieves the serialized in-memory diff layers saved at diff --git a/core/rawdb/table.go b/core/rawdb/table.go index a63536c416..36c4f851a2 100644 --- a/core/rawdb/table.go +++ b/core/rawdb/table.go @@ -106,20 +106,7 @@ func (t *table) Delete(key []byte) error { // NewIterator creates a binary-alphabetical iterator over the entire keyspace // contained within the database. func (t *table) NewIterator() ethdb.Iterator { - return t.NewIteratorWithPrefix(nil) -} - -// NewIteratorWithStart creates a binary-alphabetical iterator over a subset of -// database content starting at a particular initial key (or after, if it does -// not exist). -func (t *table) NewIteratorWithStart(start []byte) ethdb.Iterator { - return t.NewIteratorWith(nil, start) -} - -// NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset -// of database content with a particular key prefix. -func (t *table) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { - return t.NewIteratorWith(prefix, nil) + return t.NewIteratorWith(nil, nil) } // NewIteratorWith creates a binary-alphabetical iterator over a subset diff --git a/core/state/snapshot/disklayer_test.go b/core/state/snapshot/disklayer_test.go index 94760d9f9b..f6d3d645ee 100644 --- a/core/state/snapshot/disklayer_test.go +++ b/core/state/snapshot/disklayer_test.go @@ -18,7 +18,6 @@ package snapshot import ( "bytes" - "github.com/ethereum/go-ethereum/ethdb/leveldb" "io/ioutil" "testing" @@ -26,6 +25,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/leveldb" "github.com/ethereum/go-ethereum/ethdb/memorydb" ) @@ -454,9 +454,9 @@ func tempDB() (ethdb.Database, error) { func TestDiskSeek(t *testing.T) { // Create some accounts in the disk layer //db := memorydb.New() - db ,err := tempDB() + db, err := tempDB() if err != nil { - t.Fatal( err) + t.Fatal(err) } // Fill even keys [0,2,4...] for i := 0; i < 0xff; i += 2 { diff --git a/core/state/snapshot/wipe_test.go b/core/state/snapshot/wipe_test.go index cb6e174b31..4ccfb47fda 100644 --- a/core/state/snapshot/wipe_test.go +++ b/core/state/snapshot/wipe_test.go @@ -60,7 +60,7 @@ func TestWipe(t *testing.T) { // Sanity check that all the keys are present var items int - it := db.NewIteratorWithPrefix(rawdb.SnapshotAccountPrefix) + it := db.NewIteratorWith(rawdb.SnapshotAccountPrefix, nil) defer it.Release() for it.Next() { @@ -69,7 +69,7 @@ func TestWipe(t *testing.T) { items++ } } - it = db.NewIteratorWithPrefix(rawdb.SnapshotStoragePrefix) + it = db.NewIteratorWith(rawdb.SnapshotStoragePrefix, nil) defer it.Release() for it.Next() { @@ -88,7 +88,7 @@ func TestWipe(t *testing.T) { <-wipeSnapshot(db, true) // Iterate over the database end ensure no snapshot information remains - it = db.NewIteratorWithPrefix(rawdb.SnapshotAccountPrefix) + it = db.NewIteratorWith(rawdb.SnapshotAccountPrefix, nil) defer it.Release() for it.Next() { @@ -97,7 +97,7 @@ func TestWipe(t *testing.T) { t.Errorf("snapshot entry remained after wipe: %x", key) } } - it = db.NewIteratorWithPrefix(rawdb.SnapshotStoragePrefix) + it = db.NewIteratorWith(rawdb.SnapshotStoragePrefix, nil) defer it.Release() for it.Next() { diff --git a/eth/filters/bench_test.go b/eth/filters/bench_test.go index 584ea23d02..251362ee4b 100644 --- a/eth/filters/bench_test.go +++ b/eth/filters/bench_test.go @@ -147,7 +147,7 @@ var bloomBitsPrefix = []byte("bloomBits-") func clearBloomBits(db ethdb.Database) { fmt.Println("Clearing bloombits data...") - it := db.NewIteratorWithPrefix(bloomBitsPrefix) + it := db.NewIteratorWith(bloomBitsPrefix, nil) for it.Next() { db.Delete(it.Key()) } diff --git a/ethdb/dbtest/testsuite.go b/ethdb/dbtest/testsuite.go index b6dcf92707..a7863f40d0 100644 --- a/ethdb/dbtest/testsuite.go +++ b/ethdb/dbtest/testsuite.go @@ -32,32 +32,32 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { tests := []struct { content map[string]string prefix string - start string + start string order []string }{ // Empty databases should be iterable - {map[string]string{}, "","", nil}, - {map[string]string{}, "non-existent-prefix","", nil}, + {map[string]string{}, "", "", nil}, + {map[string]string{}, "non-existent-prefix", "", nil}, // Single-item databases should be iterable - {map[string]string{"key": "val"}, "","", []string{"key"}}, - {map[string]string{"key": "val"}, "k","", []string{"key"}}, - {map[string]string{"key": "val"}, "l","", nil}, + {map[string]string{"key": "val"}, "", "", []string{"key"}}, + {map[string]string{"key": "val"}, "k", "", []string{"key"}}, + {map[string]string{"key": "val"}, "l", "", nil}, // Multi-item databases should be fully iterable { map[string]string{"k1": "v1", "k5": "v5", "k2": "v2", "k4": "v4", "k3": "v3"}, - "","", + "", "", []string{"k1", "k2", "k3", "k4", "k5"}, }, { map[string]string{"k1": "v1", "k5": "v5", "k2": "v2", "k4": "v4", "k3": "v3"}, - "k","", + "k", "", []string{"k1", "k2", "k3", "k4", "k5"}, }, { map[string]string{"k1": "v1", "k5": "v5", "k2": "v2", "k4": "v4", "k3": "v3"}, - "l","", + "l", "", nil, }, // Multi-item databases should be prefix-iterable @@ -66,7 +66,7 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", }, - "ka","", + "ka", "", []string{"ka1", "ka2", "ka3", "ka4", "ka5"}, }, { @@ -74,7 +74,7 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", }, - "kc","", + "kc", "", nil, }, // Multi-item databases should be prefix-iterable with start position @@ -83,7 +83,7 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", }, - "ka","3", + "ka", "3", []string{"ka3", "ka4", "ka5"}, }, { @@ -91,7 +91,7 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", }, - "ka","8", + "ka", "8", nil, }, } @@ -147,57 +147,52 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { if err := it.Error(); err != nil { t.Fatal(err) } - it.Release() if !reflect.DeepEqual(got, want) { t.Errorf("Iterator: got: %s; want: %s", got, want) } } { - it := db.NewIteratorWithPrefix([]byte("1")) + it := db.NewIteratorWith([]byte("1"), nil) got, want := iterateKeys(it), []string{"1", "10", "11", "12"} if err := it.Error(); err != nil { t.Fatal(err) } - it.Release() if !reflect.DeepEqual(got, want) { - t.Errorf("IteratorWithPrefix(1): got: %s; want: %s", got, want) + t.Errorf("IteratorWith(1,nil): got: %s; want: %s", got, want) } } { - it := db.NewIteratorWithPrefix([]byte("5")) + it := db.NewIteratorWith([]byte("5"), nil) got, want := iterateKeys(it), []string{} if err := it.Error(); err != nil { t.Fatal(err) } - it.Release() if !reflect.DeepEqual(got, want) { - t.Errorf("IteratorWithPrefix(1): got: %s; want: %s", got, want) + t.Errorf("IteratorWith(5,nil): got: %s; want: %s", got, want) } } { - it := db.NewIteratorWithStart([]byte("2")) + it := db.NewIteratorWith(nil, []byte("2")) got, want := iterateKeys(it), []string{"2", "20", "21", "22", "3", "4", "6"} if err := it.Error(); err != nil { t.Fatal(err) } - it.Release() if !reflect.DeepEqual(got, want) { - t.Errorf("IteratorWithStart(2): got: %s; want: %s", got, want) + t.Errorf("IteratorWith(nil,2): got: %s; want: %s", got, want) } } { - it := db.NewIteratorWithStart([]byte("5")) + it := db.NewIteratorWith(nil, []byte("5")) got, want := iterateKeys(it), []string{"6"} if err := it.Error(); err != nil { t.Fatal(err) } - it.Release() if !reflect.DeepEqual(got, want) { - t.Errorf("IteratorWithStart(2): got: %s; want: %s", got, want) + t.Errorf("IteratorWith(nil,5): got: %s; want: %s", got, want) } } }) @@ -268,7 +263,6 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { if got, want := iterateKeys(it), []string{"1", "2", "3", "4"}; !reflect.DeepEqual(got, want) { t.Errorf("got: %s; want: %s", got, want) } - it.Release() } b.Reset() @@ -289,7 +283,6 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { if got, want := iterateKeys(it), []string{"2", "3", "4", "5", "6"}; !reflect.DeepEqual(got, want) { t.Errorf("got: %s; want: %s", got, want) } - it.Release() } }) @@ -318,7 +311,6 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { if got := iterateKeys(it); !reflect.DeepEqual(got, want) { t.Errorf("got: %s; want: %s", got, want) } - it.Release() }) } @@ -329,5 +321,6 @@ func iterateKeys(it ethdb.Iterator) []string { keys = append(keys, string(it.Key())) } sort.Strings(keys) + it.Release() return keys } diff --git a/ethdb/iterator.go b/ethdb/iterator.go index 3d95f867d1..d2cd33859d 100644 --- a/ethdb/iterator.go +++ b/ethdb/iterator.go @@ -55,17 +55,8 @@ type Iteratee interface { // contained within the key-value database. NewIterator() Iterator - // NewIteratorWithStart creates a binary-alphabetical iterator over a subset of - // database content starting at a particular initial key (or after, if it does - // not exist). - NewIteratorWithStart(start []byte) Iterator - - // NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset - // of database content with a particular key prefix. - NewIteratorWithPrefix(prefix []byte) Iterator - - // NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset + // NewIteratorWith creates a binary-alphabetical iterator over a subset // of database content with a particular key prefix, starting at a particular - //initial key (or after, if it does not exist). + // initial key (or after, if it does not exist). NewIteratorWith(prefix []byte, start []byte) Iterator } diff --git a/ethdb/leveldb/leveldb.go b/ethdb/leveldb/leveldb.go index cd7458f2c7..ce0fd0af5f 100644 --- a/ethdb/leveldb/leveldb.go +++ b/ethdb/leveldb/leveldb.go @@ -189,19 +189,6 @@ func (db *Database) NewIterator() ethdb.Iterator { return db.db.NewIterator(new(util.Range), nil) } -// NewIteratorWithStart creates a binary-alphabetical iterator over a subset of -// database content starting at a particular initial key (or after, if it does -// not exist). -func (db *Database) NewIteratorWithStart(start []byte) ethdb.Iterator { - return db.db.NewIterator(&util.Range{Start: start}, nil) -} - -// NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset -// of database content with a particular key prefix. -func (db *Database) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { - return db.db.NewIterator(util.BytesPrefix(prefix), nil) -} - // NewIteratorWith creates a binary-alphabetical iterator over a subset // of database content with a particular key prefix, starting at a particular // initial key (or after, if it does not exist). diff --git a/ethdb/memorydb/memorydb.go b/ethdb/memorydb/memorydb.go index 2d254c8551..e4ac45007c 100644 --- a/ethdb/memorydb/memorydb.go +++ b/ethdb/memorydb/memorydb.go @@ -132,20 +132,7 @@ func (db *Database) NewBatch() ethdb.Batch { // NewIterator creates a binary-alphabetical iterator over the entire keyspace // contained within the memory database. func (db *Database) NewIterator() ethdb.Iterator { - return db.NewIteratorWithStart(nil) -} - -// NewIteratorWithStart creates a binary-alphabetical iterator over a subset of -// database content starting at a particular initial key (or after, if it does -// not exist). -func (db *Database) NewIteratorWithStart(start []byte) ethdb.Iterator { - return db.NewIteratorWith(nil, start) -} - -// NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset -// of database content with a particular key prefix. -func (db *Database) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { - return db.NewIteratorWith(prefix, nil) + return db.NewIteratorWith(nil, nil) } // NewIteratorWith creates a binary-alphabetical iterator over a subset diff --git a/les/clientpool.go b/les/clientpool.go index 6efcc0afde..8d5432859b 100644 --- a/les/clientpool.go +++ b/les/clientpool.go @@ -849,8 +849,9 @@ func (db *nodeDB) expireNodes() { visited int deleted int start = time.Now() + prefix = db.getPrefix(true) ) - iter := db.db.NewIteratorWithPrefix(append(db.verbuf[:], negativeBalancePrefix...)) + iter := db.db.NewIteratorWith(prefix, nil) for iter.Next() { visited += 1 var balance negBalance