Skip to content
This repository was archived by the owner on Jan 20, 2026. It is now read-only.

Commit de1d7fe

Browse files
authored
Merge pull request #105 from sei-protocol/PebbleSurfaceErrors
Surface Read Errors
2 parents 2533953 + 542619f commit de1d7fe

4 files changed

Lines changed: 23 additions & 27 deletions

File tree

ss/pebbledb/db.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ func (db *Database) Has(storeKey string, version int64, key []byte) (bool, error
298298
}
299299

300300
val, err := db.Get(storeKey, version, key)
301-
if err != nil {
301+
if err != nil && !errors.Is(err, errorutils.ErrRecordNotFound) {
302302
return false, err
303303
}
304304

@@ -307,15 +307,11 @@ func (db *Database) Has(storeKey string, version int64, key []byte) (bool, error
307307

308308
func (db *Database) Get(storeKey string, targetVersion int64, key []byte) ([]byte, error) {
309309
if targetVersion < db.earliestVersion {
310-
return nil, nil
310+
return nil, errorutils.ErrRecordNotFound
311311
}
312312

313313
prefixedVal, err := getMVCCSlice(db.storage, storeKey, key, targetVersion)
314314
if err != nil {
315-
if errors.Is(err, errorutils.ErrRecordNotFound) {
316-
return nil, nil
317-
}
318-
319315
return nil, fmt.Errorf("failed to perform PebbleDB read: %w", err)
320316
}
321317

@@ -342,7 +338,7 @@ func (db *Database) Get(storeKey string, targetVersion int64, key []byte) ([]byt
342338
}
343339

344340
// the value is considered deleted
345-
return nil, nil
341+
return nil, errorutils.ErrRecordNotFound
346342
}
347343

348344
func (db *Database) ApplyChangeset(version int64, cs *proto.NamedChangeSet) error {

ss/rocksdb/db.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ package rocksdb
66
import (
77
"bytes"
88
"encoding/binary"
9+
"errors"
910
"fmt"
1011
"sync"
1112

1213
"github.com/linxGnu/grocksdb"
13-
"github.com/sei-protocol/sei-db/common/errors"
14+
errorutils "github.com/sei-protocol/sei-db/common/errors"
1415
"github.com/sei-protocol/sei-db/config"
1516
"github.com/sei-protocol/sei-db/proto"
1617
"github.com/sei-protocol/sei-db/ss/types"
@@ -141,7 +142,7 @@ func (db *Database) Has(storeKey string, version int64, key []byte) (bool, error
141142
}
142143

143144
slice, err := db.getSlice(storeKey, version, key)
144-
if err != nil {
145+
if err != nil && !errors.Is(err, errorutils.ErrRecordNotFound) {
145146
return false, err
146147
}
147148

@@ -150,7 +151,7 @@ func (db *Database) Has(storeKey string, version int64, key []byte) (bool, error
150151

151152
func (db *Database) Get(storeKey string, version int64, key []byte) ([]byte, error) {
152153
if version < db.tsLow {
153-
return nil, nil
154+
return nil, errorutils.ErrRecordNotFound
154155
}
155156

156157
slice, err := db.getSlice(storeKey, version, key)
@@ -207,11 +208,11 @@ func (db *Database) Prune(version int64) error {
207208

208209
func (db *Database) Iterator(storeKey string, version int64, start, end []byte) (types.DBIterator, error) {
209210
if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) {
210-
return nil, errors.ErrKeyEmpty
211+
return nil, errorutils.ErrKeyEmpty
211212
}
212213

213214
if start != nil && end != nil && bytes.Compare(start, end) > 0 {
214-
return nil, errors.ErrStartAfterEnd
215+
return nil, errorutils.ErrStartAfterEnd
215216
}
216217

217218
prefix := storePrefix(storeKey)
@@ -223,11 +224,11 @@ func (db *Database) Iterator(storeKey string, version int64, start, end []byte)
223224

224225
func (db *Database) ReverseIterator(storeKey string, version int64, start, end []byte) (types.DBIterator, error) {
225226
if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) {
226-
return nil, errors.ErrKeyEmpty
227+
return nil, errorutils.ErrKeyEmpty
227228
}
228229

229230
if start != nil && end != nil && bytes.Compare(start, end) > 0 {
230-
return nil, errors.ErrStartAfterEnd
231+
return nil, errorutils.ErrStartAfterEnd
231232
}
232233

233234
prefix := storePrefix(storeKey)

ss/sqlite/db.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func (db *Database) SetEarliestVersion(version int64, ignoreVersion bool) error
148148

149149
func (db *Database) Has(storeKey string, version int64, key []byte) (bool, error) {
150150
val, err := db.Get(storeKey, version, key)
151-
if err != nil {
151+
if err != nil && !errors.Is(err, errorutils.ErrRecordNotFound) {
152152
return false, err
153153
}
154154

@@ -172,10 +172,6 @@ func (db *Database) Get(storeKey string, targetVersion int64, key []byte) ([]byt
172172
tomb int64
173173
)
174174
if err := stmt.QueryRow(storeKey, key, targetVersion).Scan(&value, &tomb); err != nil {
175-
if errors.Is(err, sql.ErrNoRows) {
176-
return nil, nil
177-
}
178-
179175
return nil, fmt.Errorf("failed to query row: %w", err)
180176
}
181177

ss/test/storage_test_suite.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"sync"
66

77
"github.com/cosmos/iavl"
8+
errorutils "github.com/sei-protocol/sei-db/common/errors"
89
"github.com/sei-protocol/sei-db/config"
910
"github.com/sei-protocol/sei-db/ss/types"
1011
"github.com/stretchr/testify/suite"
@@ -141,7 +142,7 @@ func (s *StorageTestSuite) TestDatabaseGetVersionedKey() {
141142
// all queries after version 15 should return nil
142143
for i := int64(15); i <= 17; i++ {
143144
bz, err = db.Get(storeKey1, i, key)
144-
s.Require().NoError(err)
145+
s.Require().ErrorIs(err, errorutils.ErrRecordNotFound)
145146
s.Require().Nil(bz)
146147

147148
ok, err = db.Has(storeKey1, i, key)
@@ -618,10 +619,11 @@ func (s *StorageTestSuite) TestDatabasePrune() {
618619
val := fmt.Sprintf("val%03d-%03d", i, v)
619620

620621
bz, err := db.Get(storeKey1, v, []byte(key))
621-
s.Require().NoError(err)
622622
if v <= 25 {
623+
s.Require().ErrorIs(err, errorutils.ErrRecordNotFound)
623624
s.Require().Nil(bz)
624625
} else {
626+
s.Require().NoError(err)
625627
s.Require().Equal([]byte(val), bz)
626628
}
627629
}
@@ -644,7 +646,7 @@ func (s *StorageTestSuite) TestDatabasePrune() {
644646
key := fmt.Sprintf("key%03d", i)
645647

646648
bz, err := db.Get(storeKey1, v, []byte(key))
647-
s.Require().NoError(err)
649+
s.Require().ErrorIs(err, errorutils.ErrRecordNotFound)
648650
s.Require().Nil(bz)
649651
}
650652
}
@@ -688,7 +690,7 @@ func (s *StorageTestSuite) TestDatabasePruneKeepRecent() {
688690

689691
// ensure queries for versions 50 and older return nil
690692
bz, err := db.Get(storeKey1, 49, key)
691-
s.Require().Nil(err)
693+
s.Require().ErrorIs(err, errorutils.ErrRecordNotFound)
692694
s.Require().Nil(bz)
693695

694696
itr, err := db.Iterator(storeKey1, 49, nil, nil)
@@ -733,11 +735,11 @@ func (s *StorageTestSuite) TestDatabasePruneKeepLastVersion() {
733735

734736
// Verify that all keys before prune height are deleted
735737
bz, err := db.Get(storeKey1, 100, []byte("key000"))
736-
s.Require().NoError(err)
738+
s.Require().ErrorIs(err, errorutils.ErrRecordNotFound)
737739
s.Require().Nil(bz)
738740

739741
bz, err = db.Get(storeKey1, 160, []byte("key001"))
740-
s.Require().NoError(err)
742+
s.Require().ErrorIs(err, errorutils.ErrRecordNotFound)
741743
s.Require().Nil(bz)
742744

743745
// Verify keys after prune height can be retrieved
@@ -926,7 +928,7 @@ func (s *StorageTestSuite) TestParallelWriteAndPruning() {
926928
// check if the data is pruned
927929
version := int64(latestVersion - prunePeriod)
928930
val, err := db.Get(storeKey1, version, []byte(fmt.Sprintf("key-%d-%03d", version-1, 0)))
929-
s.Require().Nil(err)
931+
s.Require().ErrorIs(err, errorutils.ErrRecordNotFound)
930932
s.Require().Nil(val)
931933

932934
version = int64(latestVersion)
@@ -1136,10 +1138,11 @@ func (s *StorageTestSuite) TestParallelIterationAndPruning() {
11361138
val := fmt.Sprintf("val%03d-%03d", i, v)
11371139

11381140
bz, err := db.Get(storeKey1, v, []byte(key))
1139-
s.Require().NoError(err)
11401141
if v <= int64(latestVersion-numHeightsPruned) {
1142+
s.Require().ErrorIs(err, errorutils.ErrRecordNotFound)
11411143
s.Require().Nil(bz)
11421144
} else {
1145+
s.Require().NoError(err)
11431146
s.Require().Equal([]byte(val), bz)
11441147
}
11451148
}

0 commit comments

Comments
 (0)