mirror of
https://github.com/kaspanet/kaspad.git
synced 2026-02-16 08:34:17 +00:00
Add DB compaction following the deletion of a DB prefix (#2003)
This commit is contained in:
@@ -935,7 +935,7 @@ func (pm *pruningManager) PruningPointAndItsAnticone() ([]*externalapi.DomainHas
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// By the Prunality proof, The pruning point anticone is a closed set (i.e., guaranteed not to change) ,
|
// By the Prunality proof, the pruning point anticone is a closed set (i.e., guaranteed not to change) ,
|
||||||
// so we can safely cache it.
|
// so we can safely cache it.
|
||||||
if pm.cachedPruningPoint != nil && pm.cachedPruningPoint.Equal(pruningPoint) {
|
if pm.cachedPruningPoint != nil && pm.cachedPruningPoint.Equal(pruningPoint) {
|
||||||
return append([]*externalapi.DomainHash{pruningPoint}, pm.cachedPruningPointAnticone...), nil
|
return append([]*externalapi.DomainHash{pruningPoint}, pm.cachedPruningPointAnticone...), nil
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ func InactivePrefix(dataAccessor database.DataAccessor) (*prefix.Prefix, bool, e
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteInactivePrefix deletes all data associated with the inactive database prefix, including itself.
|
// DeleteInactivePrefix deletes all data associated with the inactive database prefix, including itself.
|
||||||
func DeleteInactivePrefix(dataAccessor database.DataAccessor) error {
|
func DeleteInactivePrefix(db database.Database) error {
|
||||||
prefixBytes, err := dataAccessor.Get(inactivePrefixKey)
|
prefixBytes, err := db.Get(inactivePrefixKey)
|
||||||
if database.IsNotFoundError(err) {
|
if database.IsNotFoundError(err) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -62,12 +62,18 @@ func DeleteInactivePrefix(dataAccessor database.DataAccessor) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = deletePrefix(dataAccessor, prefix)
|
err = deletePrefix(db, prefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return dataAccessor.Delete(inactivePrefixKey)
|
err = db.Delete(inactivePrefixKey)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("Compacting database after prefix delete")
|
||||||
|
return db.Compact()
|
||||||
}
|
}
|
||||||
|
|
||||||
func deletePrefix(dataAccessor database.DataAccessor, prefix *prefix.Prefix) error {
|
func deletePrefix(dataAccessor database.DataAccessor, prefix *prefix.Prefix) error {
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ type Database interface {
|
|||||||
// Begin begins a new database transaction.
|
// Begin begins a new database transaction.
|
||||||
Begin() (Transaction, error)
|
Begin() (Transaction, error)
|
||||||
|
|
||||||
|
// Compact compacts the database instance.
|
||||||
|
Compact() error
|
||||||
|
|
||||||
// Close closes the database.
|
// Close closes the database.
|
||||||
Close() error
|
Close() error
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/syndtr/goleveldb/leveldb"
|
"github.com/syndtr/goleveldb/leveldb"
|
||||||
ldbErrors "github.com/syndtr/goleveldb/leveldb/errors"
|
ldbErrors "github.com/syndtr/goleveldb/leveldb/errors"
|
||||||
"github.com/syndtr/goleveldb/leveldb/opt"
|
"github.com/syndtr/goleveldb/leveldb/opt"
|
||||||
|
"github.com/syndtr/goleveldb/leveldb/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// LevelDB defines a thin wrapper around leveldb.
|
// LevelDB defines a thin wrapper around leveldb.
|
||||||
@@ -47,6 +48,12 @@ func NewLevelDB(path string, cacheSizeMiB int) (*LevelDB, error) {
|
|||||||
return db, nil
|
return db, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compact compacts the leveldb instance.
|
||||||
|
func (db *LevelDB) Compact() error {
|
||||||
|
err := db.ldb.CompactRange(util.Range{Start: nil, Limit: nil})
|
||||||
|
return errors.WithStack(err)
|
||||||
|
}
|
||||||
|
|
||||||
// Close closes the leveldb instance.
|
// Close closes the leveldb instance.
|
||||||
func (db *LevelDB) Close() error {
|
func (db *LevelDB) Close() error {
|
||||||
err := db.ldb.Close()
|
err := db.ldb.Close()
|
||||||
|
|||||||
Reference in New Issue
Block a user