prysm-pulse/beacon-chain/db/cleanup_history.go
Jie Hou aad64d113a Auto Clean Block Vote Cache (#972)
* WIP: Dummy db clean service

* [WIP. NOT READY FOR REVIEW] Add DB cleanup routine that cleans block vote cache

* Add missing bazel config

* Put DB clean behind a CLI flag

* Address review comments

* Fix error handling
2018-11-28 17:02:35 +08:00

44 lines
1.1 KiB
Go

package db
import (
"errors"
"github.com/boltdb/bolt"
)
// GetCleanedFinalizedSlot returns the most recent finalized slot when we did a DB clean up.
func (db *BeaconDB) GetCleanedFinalizedSlot() (uint64, error) {
var lastFinalizedSlot uint64
err := db.view(func(tx *bolt.Tx) error {
cleanupHistory := tx.Bucket(cleanupHistoryBucket)
slotEnc := cleanupHistory.Get(cleanedFinalizedSlotKey)
// If last cleaned slot number is not found, we will return 0 instead
if slotEnc == nil {
return nil
}
lastFinalizedSlot = decodeToSlotNumber(slotEnc)
return nil
})
return lastFinalizedSlot, err
}
// SaveCleanedFinalizedSlot writes the slot when we did DB cleanup so we can start from here in future cleanup tasks.
func (db *BeaconDB) SaveCleanedFinalizedSlot(slot uint64) error {
slotEnc := encodeSlotNumber(slot)
err := db.update(func(tx *bolt.Tx) error {
cleanupHistory := tx.Bucket(cleanupHistoryBucket)
if err := cleanupHistory.Put(cleanedFinalizedSlotKey, slotEnc); err != nil {
return errors.New("failed to store cleaned finalized slot in DB")
}
return nil
})
return err
}