feat(core/coretesting): make memDB satisfy db.Db interface (#22570)

This commit is contained in:
Julien Robert 2024-11-20 19:35:37 +04:00 committed by GitHub
parent c6522a72a4
commit d810b77c71
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 44 additions and 1 deletions

View File

@ -291,12 +291,20 @@ func (bt *MemDB) Set(key, value []byte) error {
return bt.kv.Set(key, value)
}
func (bt *MemDB) SetSync(key, value []byte) error {
return bt.Set(key, value)
}
func (bt *MemDB) Delete(key []byte) error {
bt.mtx.Lock()
defer bt.mtx.Unlock()
return bt.kv.Delete(key)
}
func (bt *MemDB) DeleteSync(key []byte) error {
return bt.Delete(key)
}
func (bt *MemDB) Iterator(start, end []byte) (store.Iterator, error) {
return bt.kv.Iterator(start, end)
}
@ -305,6 +313,27 @@ func (bt *MemDB) ReverseIterator(start, end []byte) (store.Iterator, error) {
return bt.kv.ReverseIterator(start, end)
}
func (db *MemDB) Print() error {
db.mtx.RLock()
defer db.mtx.RUnlock()
db.kv.tree.Ascend(item{}, func(i item) bool {
fmt.Printf("[%X]:\t[%X]\n", i.key, i.value)
return true
})
return nil
}
func (db *MemDB) Stats() map[string]string {
db.mtx.RLock()
defer db.mtx.RUnlock()
stats := make(map[string]string)
stats["database.type"] = "memDB"
stats["database.size"] = fmt.Sprintf("%d", db.kv.tree.Len())
return stats
}
// Close closes the MemDB, releasing any resources held.
func (db *MemDB) Close() error {
return nil

View File

@ -50,6 +50,7 @@ require (
cosmossdk.io/x/slashing v0.0.0-00010101000000-000000000000
cosmossdk.io/x/staking v0.0.0-20240226161501-23359a0b6d91
github.com/cometbft/cometbft/api v1.0.0-rc.1
github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22
github.com/google/go-cmp v0.6.0
github.com/google/gofuzz v1.2.0
github.com/jhump/protoreflect v1.17.0
@ -103,7 +104,6 @@ require (
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
github.com/cometbft/cometbft-db v0.15.0 // indirect
github.com/cosmos/btcutil v1.0.5 // indirect
github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22 // indirect
github.com/cosmos/crypto v0.1.2 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cosmos/gogogateway v1.2.0 // indirect

View File

@ -0,0 +1,14 @@
package integration
import (
coretesting "cosmossdk.io/core/testing"
db "github.com/cosmos/cosmos-db"
)
// This file contains a list of type checks that are used to ensure that implementations
// matches the interface. We do not do those type checks directly in the components to
// avoid to bring in more dependencies than needed.
var (
_ db.DB = (*coretesting.MemDB)(nil)
)