diff --git a/ss/pebbledb/db.go b/ss/pebbledb/db.go index 40ca2fe..7f02a28 100644 --- a/ss/pebbledb/db.go +++ b/ss/pebbledb/db.go @@ -318,7 +318,7 @@ func (db *Database) Has(storeKey string, version int64, key []byte) (bool, error } val, err := db.Get(storeKey, version, key) - if err != nil && !errors.Is(err, errorutils.ErrRecordNotFound) { + if err != nil { return false, err } @@ -327,11 +327,15 @@ func (db *Database) Has(storeKey string, version int64, key []byte) (bool, error func (db *Database) Get(storeKey string, targetVersion int64, key []byte) ([]byte, error) { if targetVersion < db.earliestVersion { - return nil, errorutils.ErrRecordNotFound + return nil, nil } prefixedVal, err := getMVCCSlice(db.storage, storeKey, key, targetVersion) if err != nil { + if errors.Is(err, errorutils.ErrRecordNotFound) { + return nil, nil + } + return nil, fmt.Errorf("failed to perform PebbleDB read: %w", err) } @@ -358,7 +362,7 @@ func (db *Database) Get(storeKey string, targetVersion int64, key []byte) ([]byt } // the value is considered deleted - return nil, errorutils.ErrRecordNotFound + return nil, nil } func (db *Database) ApplyChangeset(version int64, cs *proto.NamedChangeSet) error { diff --git a/ss/rocksdb/db.go b/ss/rocksdb/db.go index 3605476..f171d63 100644 --- a/ss/rocksdb/db.go +++ b/ss/rocksdb/db.go @@ -6,13 +6,12 @@ package rocksdb import ( "bytes" "encoding/binary" - "errors" "fmt" "sync" "time" "github.com/linxGnu/grocksdb" - errorutils "github.com/sei-protocol/sei-db/common/errors" + "github.com/sei-protocol/sei-db/common/errors" "github.com/sei-protocol/sei-db/common/logger" "github.com/sei-protocol/sei-db/common/utils" "github.com/sei-protocol/sei-db/config" @@ -212,7 +211,7 @@ func (db *Database) Has(storeKey string, version int64, key []byte) (bool, error } slice, err := db.getSlice(storeKey, version, key) - if err != nil && !errors.Is(err, errorutils.ErrRecordNotFound) { + if err != nil { return false, err } @@ -221,7 +220,7 @@ func (db *Database) Has(storeKey string, version int64, key []byte) (bool, error func (db *Database) Get(storeKey string, version int64, key []byte) ([]byte, error) { if version < db.earliestVersion { - return nil, errorutils.ErrRecordNotFound + return nil, nil } slice, err := db.getSlice(storeKey, version, key) @@ -229,11 +228,6 @@ func (db *Database) Get(storeKey string, version int64, key []byte) ([]byte, err return nil, fmt.Errorf("failed to get RocksDB slice: %w", err) } - if !slice.Exists() { - slice.Free() - return nil, errorutils.ErrRecordNotFound - } - return copyAndFreeSlice(slice), nil } @@ -330,11 +324,11 @@ func (db *Database) Prune(version int64) error { func (db *Database) Iterator(storeKey string, version int64, start, end []byte) (types.DBIterator, error) { if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { - return nil, errorutils.ErrKeyEmpty + return nil, errors.ErrKeyEmpty } if start != nil && end != nil && bytes.Compare(start, end) > 0 { - return nil, errorutils.ErrStartAfterEnd + return nil, errors.ErrStartAfterEnd } prefix := storePrefix(storeKey) @@ -346,11 +340,11 @@ func (db *Database) Iterator(storeKey string, version int64, start, end []byte) func (db *Database) ReverseIterator(storeKey string, version int64, start, end []byte) (types.DBIterator, error) { if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { - return nil, errorutils.ErrKeyEmpty + return nil, errors.ErrKeyEmpty } if start != nil && end != nil && bytes.Compare(start, end) > 0 { - return nil, errorutils.ErrStartAfterEnd + return nil, errors.ErrStartAfterEnd } prefix := storePrefix(storeKey) diff --git a/ss/sqlite/db.go b/ss/sqlite/db.go index 54a0e4f..d5278eb 100644 --- a/ss/sqlite/db.go +++ b/ss/sqlite/db.go @@ -148,7 +148,7 @@ func (db *Database) SetEarliestVersion(version int64, ignoreVersion bool) error func (db *Database) Has(storeKey string, version int64, key []byte) (bool, error) { val, err := db.Get(storeKey, version, key) - if err != nil && !errors.Is(err, errorutils.ErrRecordNotFound) { + if err != nil { return false, err } @@ -172,6 +172,10 @@ func (db *Database) Get(storeKey string, targetVersion int64, key []byte) ([]byt tomb int64 ) if err := stmt.QueryRow(storeKey, key, targetVersion).Scan(&value, &tomb); err != nil { + if errors.Is(err, sql.ErrNoRows) { + return nil, nil + } + return nil, fmt.Errorf("failed to query row: %w", err) } diff --git a/ss/test/storage_test_suite.go b/ss/test/storage_test_suite.go index 9753286..11ebc1e 100644 --- a/ss/test/storage_test_suite.go +++ b/ss/test/storage_test_suite.go @@ -5,7 +5,6 @@ import ( "sync" "github.com/cosmos/iavl" - errorutils "github.com/sei-protocol/sei-db/common/errors" "github.com/sei-protocol/sei-db/config" "github.com/sei-protocol/sei-db/ss/types" "github.com/stretchr/testify/suite" @@ -142,7 +141,7 @@ func (s *StorageTestSuite) TestDatabaseGetVersionedKey() { // all queries after version 15 should return nil for i := int64(15); i <= 17; i++ { bz, err = db.Get(storeKey1, i, key) - s.Require().ErrorIs(err, errorutils.ErrRecordNotFound) + s.Require().NoError(err) s.Require().Nil(bz) ok, err = db.Has(storeKey1, i, key) @@ -619,11 +618,10 @@ func (s *StorageTestSuite) TestDatabasePrune() { val := fmt.Sprintf("val%03d-%03d", i, v) bz, err := db.Get(storeKey1, v, []byte(key)) + s.Require().NoError(err) if v <= 25 { - s.Require().ErrorIs(err, errorutils.ErrRecordNotFound) s.Require().Nil(bz) } else { - s.Require().NoError(err) s.Require().Equal([]byte(val), bz) } } @@ -646,7 +644,7 @@ func (s *StorageTestSuite) TestDatabasePrune() { key := fmt.Sprintf("key%03d", i) bz, err := db.Get(storeKey1, v, []byte(key)) - s.Require().ErrorIs(err, errorutils.ErrRecordNotFound) + s.Require().NoError(err) s.Require().Nil(bz) } } @@ -690,7 +688,7 @@ func (s *StorageTestSuite) TestDatabasePruneKeepRecent() { // ensure queries for versions 50 and older return nil bz, err := db.Get(storeKey1, 49, key) - s.Require().ErrorIs(err, errorutils.ErrRecordNotFound) + s.Require().Nil(err) s.Require().Nil(bz) itr, err := db.Iterator(storeKey1, 49, nil, nil) @@ -738,11 +736,11 @@ func (s *StorageTestSuite) TestDatabasePruneKeepLastVersion() { // Verify that all keys before prune height are deleted bz, err := db.Get(storeKey1, 100, []byte("key000")) - s.Require().ErrorIs(err, errorutils.ErrRecordNotFound) + s.Require().NoError(err) s.Require().Nil(bz) bz, err = db.Get(storeKey1, 160, []byte("key001")) - s.Require().ErrorIs(err, errorutils.ErrRecordNotFound) + s.Require().NoError(err) s.Require().Nil(bz) // Verify keys after prune height can be retrieved @@ -932,7 +930,7 @@ func (s *StorageTestSuite) TestParallelWriteAndPruning() { // check if the data is pruned version := int64(latestVersion - prunePeriod) val, err := db.Get(storeKey1, version, []byte(fmt.Sprintf("key-%d-%03d", version-1, 0))) - s.Require().ErrorIs(err, errorutils.ErrRecordNotFound) + s.Require().Nil(err) s.Require().Nil(val) version = int64(latestVersion) @@ -1142,11 +1140,10 @@ func (s *StorageTestSuite) TestParallelIterationAndPruning() { val := fmt.Sprintf("val%03d-%03d", i, v) bz, err := db.Get(storeKey1, v, []byte(key)) + s.Require().NoError(err) if v <= int64(latestVersion-numHeightsPruned) { - s.Require().ErrorIs(err, errorutils.ErrRecordNotFound) s.Require().Nil(bz) } else { - s.Require().NoError(err) s.Require().Equal([]byte(val), bz) } }