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

Commit 10d3883

Browse files
committed
Cache last ranged hash
1 parent f74e65e commit 10d3883

1 file changed

Lines changed: 40 additions & 13 deletions

File tree

ss/pebbledb/db.go

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ type Database struct {
6969

7070
// Pending changes to be written to the DB
7171
pendingChanges chan VersionedChangesets
72+
73+
// Cache for last range hashed
74+
lastRangeHashedCache int64
75+
lastRangeHashedMu sync.RWMutex
7276
}
7377

7478
type VersionedChangesets struct {
@@ -126,6 +130,14 @@ func New(dataDir string, config config.StateStoreConfig) (*Database, error) {
126130
earliestVersion: earliestVersion,
127131
pendingChanges: make(chan VersionedChangesets, config.AsyncWriteBuffer),
128132
}
133+
134+
// Initialize the lastRangeHashed cache
135+
lastHashed, err := retrieveLastRangeHashed(db)
136+
if err != nil {
137+
return nil, fmt.Errorf("failed to retrieve last range hashed: %w", err)
138+
}
139+
database.lastRangeHashedCache = lastHashed
140+
129141
if config.DedicatedChangelog {
130142
streamHandler, _ := changelog.NewStream(
131143
logger.NewNopLogger(),
@@ -206,25 +218,23 @@ func (db *Database) GetEarliestVersion() (int64, error) {
206218
func (db *Database) SetLastRangeHashed(latestHashed int64) error {
207219
var ts [VersionSize]byte
208220
binary.LittleEndian.PutUint64(ts[:], uint64(latestHashed))
221+
222+
// Update the cache first
223+
db.lastRangeHashedMu.Lock()
224+
db.lastRangeHashedCache = latestHashed
225+
db.lastRangeHashedMu.Unlock()
226+
209227
return db.storage.Set([]byte(lastRangeHashKey), ts[:], defaultWriteOpts)
210228
}
211229

212230
// GetLastRangeHashed returns the highest block that has been fully hashed in ranges.
213231
func (db *Database) GetLastRangeHashed() (int64, error) {
214-
bz, closer, err := db.storage.Get([]byte(lastRangeHashKey))
215-
if err != nil {
216-
if errors.Is(err, pebble.ErrNotFound) {
217-
// means we haven't hashed anything yet
218-
return 0, nil
219-
}
220-
return 0, err
221-
}
222-
defer closer.Close()
232+
// Return the cached value
233+
db.lastRangeHashedMu.RLock()
234+
cachedValue := db.lastRangeHashedCache
235+
db.lastRangeHashedMu.RUnlock()
223236

224-
if len(bz) == 0 {
225-
return 0, nil
226-
}
227-
return int64(binary.LittleEndian.Uint64(bz)), nil
237+
return cachedValue, nil
228238
}
229239

230240
// Retrieves earliest version from db
@@ -1025,3 +1035,20 @@ func (db *Database) WriteBlockRangeHash(storeKey string, beginBlockRange, endBlo
10251035
}
10261036
return nil
10271037
}
1038+
1039+
func retrieveLastRangeHashed(db *pebble.DB) (int64, error) {
1040+
bz, closer, err := db.Get([]byte(lastRangeHashKey))
1041+
if err != nil {
1042+
if errors.Is(err, pebble.ErrNotFound) {
1043+
// means we haven't hashed anything yet
1044+
return 0, nil
1045+
}
1046+
return 0, err
1047+
}
1048+
defer closer.Close()
1049+
1050+
if len(bz) == 0 {
1051+
return 0, nil
1052+
}
1053+
return int64(binary.LittleEndian.Uint64(bz)), nil
1054+
}

0 commit comments

Comments
 (0)