- package db
-
- import (
- "fmt"
- "sync"
-
- cmn "github.com/tendermint/tmlibs/common"
- )
-
- func _fmt(f string, az ...interface{}) string {
- return fmt.Sprintf(f, az...)
- }
-
- //----------------------------------------
- // debugDB
-
- type debugDB struct {
- label string
- db DB
- }
-
- // For printing all operationgs to the console for debugging.
- func NewDebugDB(label string, db DB) debugDB {
- return debugDB{
- label: label,
- db: db,
- }
- }
-
- // Implements atomicSetDeleter.
- func (ddb debugDB) Mutex() *sync.Mutex { return nil }
-
- // Implements DB.
- func (ddb debugDB) Get(key []byte) (value []byte) {
- defer func() {
- fmt.Printf("%v.Get(%v) %v\n", ddb.label, cmn.Cyan(_fmt("%X", key)), cmn.Blue(_fmt("%X", value)))
- }()
- value = ddb.db.Get(key)
- return
- }
-
- // Implements DB.
- func (ddb debugDB) Has(key []byte) (has bool) {
- defer func() {
- fmt.Printf("%v.Has(%v) %v\n", ddb.label, cmn.Cyan(_fmt("%X", key)), has)
- }()
- return ddb.db.Has(key)
- }
-
- // Implements DB.
- func (ddb debugDB) Set(key []byte, value []byte) {
- fmt.Printf("%v.Set(%v, %v)\n", ddb.label, cmn.Cyan(_fmt("%X", key)), cmn.Yellow(_fmt("%X", value)))
- ddb.db.Set(key, value)
- }
-
- // Implements DB.
- func (ddb debugDB) SetSync(key []byte, value []byte) {
- fmt.Printf("%v.SetSync(%v, %v)\n", ddb.label, cmn.Cyan(_fmt("%X", key)), cmn.Yellow(_fmt("%X", value)))
- ddb.db.SetSync(key, value)
- }
-
- // Implements atomicSetDeleter.
- func (ddb debugDB) SetNoLock(key []byte, value []byte) {
- fmt.Printf("%v.SetNoLock(%v, %v)\n", ddb.label, cmn.Cyan(_fmt("%X", key)), cmn.Yellow(_fmt("%X", value)))
- ddb.db.(atomicSetDeleter).SetNoLock(key, value)
- }
-
- // Implements atomicSetDeleter.
- func (ddb debugDB) SetNoLockSync(key []byte, value []byte) {
- fmt.Printf("%v.SetNoLockSync(%v, %v)\n", ddb.label, cmn.Cyan(_fmt("%X", key)), cmn.Yellow(_fmt("%X", value)))
- ddb.db.(atomicSetDeleter).SetNoLockSync(key, value)
- }
-
- // Implements DB.
- func (ddb debugDB) Delete(key []byte) {
- fmt.Printf("%v.Delete(%v)\n", ddb.label, cmn.Red(_fmt("%X", key)))
- ddb.db.Delete(key)
- }
-
- // Implements DB.
- func (ddb debugDB) DeleteSync(key []byte) {
- fmt.Printf("%v.DeleteSync(%v)\n", ddb.label, cmn.Red(_fmt("%X", key)))
- ddb.db.DeleteSync(key)
- }
-
- // Implements atomicSetDeleter.
- func (ddb debugDB) DeleteNoLock(key []byte) {
- fmt.Printf("%v.DeleteNoLock(%v)\n", ddb.label, cmn.Red(_fmt("%X", key)))
- ddb.db.(atomicSetDeleter).DeleteNoLock(key)
- }
-
- // Implements atomicSetDeleter.
- func (ddb debugDB) DeleteNoLockSync(key []byte) {
- fmt.Printf("%v.DeleteNoLockSync(%v)\n", ddb.label, cmn.Red(_fmt("%X", key)))
- ddb.db.(atomicSetDeleter).DeleteNoLockSync(key)
- }
-
- // Implements DB.
- func (ddb debugDB) Iterator(start, end []byte) Iterator {
- fmt.Printf("%v.Iterator(%v, %v)\n", ddb.label, cmn.Cyan(_fmt("%X", start)), cmn.Blue(_fmt("%X", end)))
- return NewDebugIterator(ddb.label, ddb.db.Iterator(start, end))
- }
-
- // Implements DB.
- func (ddb debugDB) ReverseIterator(start, end []byte) Iterator {
- fmt.Printf("%v.ReverseIterator(%v, %v)\n", ddb.label, cmn.Cyan(_fmt("%X", start)), cmn.Blue(_fmt("%X", end)))
- return NewDebugIterator(ddb.label, ddb.db.ReverseIterator(start, end))
- }
-
- // Implements DB.
- // Panics if the underlying db is not an
- // atomicSetDeleter.
- func (ddb debugDB) NewBatch() Batch {
- fmt.Printf("%v.NewBatch()\n", ddb.label)
- return NewDebugBatch(ddb.label, ddb.db.NewBatch())
- }
-
- // Implements DB.
- func (ddb debugDB) Close() {
- fmt.Printf("%v.Close()\n", ddb.label)
- ddb.db.Close()
- }
-
- // Implements DB.
- func (ddb debugDB) Print() {
- ddb.db.Print()
- }
-
- // Implements DB.
- func (ddb debugDB) Stats() map[string]string {
- return ddb.db.Stats()
- }
-
- //----------------------------------------
- // debugIterator
-
- type debugIterator struct {
- label string
- itr Iterator
- }
-
- // For printing all operationgs to the console for debugging.
- func NewDebugIterator(label string, itr Iterator) debugIterator {
- return debugIterator{
- label: label,
- itr: itr,
- }
- }
-
- // Implements Iterator.
- func (ditr debugIterator) Domain() (start []byte, end []byte) {
- defer func() {
- fmt.Printf("%v.itr.Domain() (%X,%X)\n", ditr.label, start, end)
- }()
- start, end = ditr.itr.Domain()
- return
- }
-
- // Implements Iterator.
- func (ditr debugIterator) Valid() (ok bool) {
- defer func() {
- fmt.Printf("%v.itr.Valid() %v\n", ditr.label, ok)
- }()
- ok = ditr.itr.Valid()
- return
- }
-
- // Implements Iterator.
- func (ditr debugIterator) Next() {
- fmt.Printf("%v.itr.Next()\n", ditr.label)
- ditr.itr.Next()
- }
-
- // Implements Iterator.
- func (ditr debugIterator) Key() (key []byte) {
- fmt.Printf("%v.itr.Key() %v\n", ditr.label, cmn.Cyan(_fmt("%X", key)))
- key = ditr.itr.Key()
- return
- }
-
- // Implements Iterator.
- func (ditr debugIterator) Value() (value []byte) {
- fmt.Printf("%v.itr.Value() %v\n", ditr.label, cmn.Blue(_fmt("%X", value)))
- value = ditr.itr.Value()
- return
- }
-
- // Implements Iterator.
- func (ditr debugIterator) Close() {
- fmt.Printf("%v.itr.Close()\n", ditr.label)
- ditr.itr.Close()
- }
-
- //----------------------------------------
- // debugBatch
-
- type debugBatch struct {
- label string
- bch Batch
- }
-
- // For printing all operationgs to the console for debugging.
- func NewDebugBatch(label string, bch Batch) debugBatch {
- return debugBatch{
- label: label,
- bch: bch,
- }
- }
-
- // Implements Batch.
- func (dbch debugBatch) Set(key, value []byte) {
- fmt.Printf("%v.batch.Set(%v, %v)\n", dbch.label, cmn.Cyan(_fmt("%X", key)), cmn.Yellow(_fmt("%X", value)))
- dbch.bch.Set(key, value)
- }
-
- // Implements Batch.
- func (dbch debugBatch) Delete(key []byte) {
- fmt.Printf("%v.batch.Delete(%v)\n", dbch.label, cmn.Red(_fmt("%X", key)))
- dbch.bch.Delete(key)
- }
-
- // Implements Batch.
- func (dbch debugBatch) Write() {
- fmt.Printf("%v.batch.Write()\n", dbch.label)
- dbch.bch.Write()
- }
-
- // Implements Batch.
- func (dbch debugBatch) WriteSync() {
- fmt.Printf("%v.batch.WriteSync()\n", dbch.label)
- dbch.bch.WriteSync()
- }
|