@ -3,8 +3,14 @@ package db
import (
import (
"fmt"
"fmt"
"sync"
"sync"
cmn "github.com/tendermint/tmlibs/common"
)
)
func _fmt ( f string , az ... interface { } ) string {
return fmt . Sprintf ( f , az ... )
}
//----------------------------------------
//----------------------------------------
// debugDB
// debugDB
@ -26,78 +32,84 @@ func (ddb debugDB) Mutex() *sync.Mutex { return nil }
// Implements DB.
// Implements DB.
func ( ddb debugDB ) Get ( key [ ] byte ) ( value [ ] byte ) {
func ( ddb debugDB ) Get ( key [ ] byte ) ( value [ ] byte ) {
defer fmt . Printf ( "%v.Get(%X) %X\n" , ddb . label , key , value )
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 )
value = ddb . db . Get ( key )
return
return
}
}
// Implements DB.
// Implements DB.
func ( ddb debugDB ) Has ( key [ ] byte ) ( has bool ) {
func ( ddb debugDB ) Has ( key [ ] byte ) ( has bool ) {
defer fmt . Printf ( "%v.Has(%X) %v\n" , ddb . label , key , has )
defer func ( ) {
fmt . Printf ( "%v.Has(%v) %v\n" , ddb . label , cmn . Cyan ( _fmt ( "%X" , key ) ) , has )
} ( )
return ddb . db . Has ( key )
return ddb . db . Has ( key )
}
}
// Implements DB.
// Implements DB.
func ( ddb debugDB ) Set ( key [ ] byte , value [ ] byte ) {
func ( ddb debugDB ) Set ( key [ ] byte , value [ ] byte ) {
fmt . Printf ( "%v.Set(%X, %X )\n" , ddb . label , key , value )
fmt . Printf ( "%v.Set(%v, %v )\n" , ddb . label , cmn . Cyan ( _fmt ( "%X" , key ) ) , cmn . Yellow ( _fmt ( "%X" , value ) ) )
ddb . db . Set ( key , value )
ddb . db . Set ( key , value )
}
}
// Implements DB.
// Implements DB.
func ( ddb debugDB ) SetSync ( key [ ] byte , value [ ] byte ) {
func ( ddb debugDB ) SetSync ( key [ ] byte , value [ ] byte ) {
fmt . Printf ( "%v.SetSync(%X, %X )\n" , ddb . label , key , value )
fmt . Printf ( "%v.SetSync(%v, %v )\n" , ddb . label , cmn . Cyan ( _fmt ( "%X" , key ) ) , cmn . Yellow ( _fmt ( "%X" , value ) ) )
ddb . db . SetSync ( key , value )
ddb . db . SetSync ( key , value )
}
}
// Implements atomicSetDeleter.
// Implements atomicSetDeleter.
func ( ddb debugDB ) SetNoLock ( key [ ] byte , value [ ] byte ) {
func ( ddb debugDB ) SetNoLock ( key [ ] byte , value [ ] byte ) {
fmt . Printf ( "%v.SetNoLock(%X, %X )\n" , ddb . label , key , value )
ddb . db . Set ( key , value )
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.
// Implements atomicSetDeleter.
func ( ddb debugDB ) SetNoLockSync ( key [ ] byte , value [ ] byte ) {
func ( ddb debugDB ) SetNoLockSync ( key [ ] byte , value [ ] byte ) {
fmt . Printf ( "%v.SetNoLockSync(%X, %X )\n" , ddb . label , key , value )
ddb . db . SetSync ( key , value )
fmt . Printf ( "%v.SetNoLockSync(%v, %v )\n" , ddb . label , cmn . Cyan ( _fmt ( "%X" , key ) ) , cmn . Yellow ( _fmt ( "%X" , value ) ) )
ddb . db . ( atomicSetDeleter ) . SetNoLock Sync ( key , value )
}
}
// Implements DB.
// Implements DB.
func ( ddb debugDB ) Delete ( key [ ] byte ) {
func ( ddb debugDB ) Delete ( key [ ] byte ) {
fmt . Printf ( "%v.Delete(%X )\n" , ddb . label , key )
fmt . Printf ( "%v.Delete(%v )\n" , ddb . label , cmn . Red ( _fmt ( "%X" , key ) ) )
ddb . db . Delete ( key )
ddb . db . Delete ( key )
}
}
// Implements DB.
// Implements DB.
func ( ddb debugDB ) DeleteSync ( key [ ] byte ) {
func ( ddb debugDB ) DeleteSync ( key [ ] byte ) {
fmt . Printf ( "%v.DeleteSync(%X )\n" , ddb . label , key )
fmt . Printf ( "%v.DeleteSync(%v )\n" , ddb . label , cmn . Red ( _fmt ( "%X" , key ) ) )
ddb . db . DeleteSync ( key )
ddb . db . DeleteSync ( key )
}
}
// Implements atomicSetDeleter.
// Implements atomicSetDeleter.
func ( ddb debugDB ) DeleteNoLock ( key [ ] byte ) {
func ( ddb debugDB ) DeleteNoLock ( key [ ] byte ) {
fmt . Printf ( "%v.DeleteNoLock(%X )\n" , ddb . label , key )
ddb . db . Delete ( key )
fmt . Printf ( "%v.DeleteNoLock(%v )\n" , ddb . label , cmn . Red ( _fmt ( "%X" , key ) ) )
ddb . db . ( atomicSetDeleter ) . DeleteNoLock ( key )
}
}
// Implements atomicSetDeleter.
// Implements atomicSetDeleter.
func ( ddb debugDB ) DeleteNoLockSync ( key [ ] byte ) {
func ( ddb debugDB ) DeleteNoLockSync ( key [ ] byte ) {
fmt . Printf ( "%v.DeleteNoLockSync(%X )\n" , ddb . label , key )
ddb . db . DeleteSync ( key )
fmt . Printf ( "%v.DeleteNoLockSync(%v )\n" , ddb . label , cmn . Red ( _fmt ( "%X" , key ) ) )
ddb . db . ( atomicSetDeleter ) . DeleteNoLock Sync ( key )
}
}
// Implements DB.
// Implements DB.
func ( ddb debugDB ) Iterator ( start , end [ ] byte ) Iterator {
func ( ddb debugDB ) Iterator ( start , end [ ] byte ) Iterator {
fmt . Printf ( "%v.Iterator(%X, %X )\n" , ddb . label , start , end )
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 ) )
return NewDebugIterator ( ddb . label , ddb . db . Iterator ( start , end ) )
}
}
// Implements DB.
// Implements DB.
func ( ddb debugDB ) ReverseIterator ( start , end [ ] byte ) Iterator {
func ( ddb debugDB ) ReverseIterator ( start , end [ ] byte ) Iterator {
fmt . Printf ( "%v.ReverseIterator(%X, %X )\n" , ddb . label , start , end )
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 ) )
return NewDebugIterator ( ddb . label , ddb . db . ReverseIterator ( start , end ) )
}
}
// Implements DB.
// Implements DB.
// Panics if the underlying db is not an
// atomicSetDeleter.
func ( ddb debugDB ) NewBatch ( ) Batch {
func ( ddb debugDB ) NewBatch ( ) Batch {
fmt . Printf ( "%v.NewBatch()\n" , ddb . label )
fmt . Printf ( "%v.NewBatch()\n" , ddb . label )
return NewDebugBatch ( ddb . label , ddb . db . NewBatch ( ) )
return NewDebugBatch ( ddb . label , ddb . db . NewBatch ( ) )
@ -137,14 +149,18 @@ func NewDebugIterator(label string, itr Iterator) debugIterator {
// Implements Iterator.
// Implements Iterator.
func ( ditr debugIterator ) Domain ( ) ( start [ ] byte , end [ ] byte ) {
func ( ditr debugIterator ) Domain ( ) ( start [ ] byte , end [ ] byte ) {
defer fmt . Printf ( "%v.itr.Domain() (%X,%X)\n" , ditr . label , start , end )
defer func ( ) {
fmt . Printf ( "%v.itr.Domain() (%X,%X)\n" , ditr . label , start , end )
} ( )
start , end = ditr . itr . Domain ( )
start , end = ditr . itr . Domain ( )
return
return
}
}
// Implements Iterator.
// Implements Iterator.
func ( ditr debugIterator ) Valid ( ) ( ok bool ) {
func ( ditr debugIterator ) Valid ( ) ( ok bool ) {
defer fmt . Printf ( "%v.itr.Valid() %v\n" , ditr . label , ok )
defer func ( ) {
fmt . Printf ( "%v.itr.Valid() %v\n" , ditr . label , ok )
} ( )
ok = ditr . itr . Valid ( )
ok = ditr . itr . Valid ( )
return
return
}
}
@ -157,14 +173,14 @@ func (ditr debugIterator) Next() {
// Implements Iterator.
// Implements Iterator.
func ( ditr debugIterator ) Key ( ) ( key [ ] byte ) {
func ( ditr debugIterator ) Key ( ) ( key [ ] byte ) {
fmt . Printf ( "%v.itr.Key() %X \n" , ditr . label , key )
fmt . Printf ( "%v.itr.Key() %v \n" , ditr . label , cmn . Cyan ( _fmt ( "%X" , key ) ) )
key = ditr . itr . Key ( )
key = ditr . itr . Key ( )
return
return
}
}
// Implements Iterator.
// Implements Iterator.
func ( ditr debugIterator ) Value ( ) ( value [ ] byte ) {
func ( ditr debugIterator ) Value ( ) ( value [ ] byte ) {
fmt . Printf ( "%v.itr.Value() %X \n" , ditr . label , value )
fmt . Printf ( "%v.itr.Value() %v \n" , ditr . label , cmn . Blue ( _fmt ( "%X" , value ) ) )
value = ditr . itr . Value ( )
value = ditr . itr . Value ( )
return
return
}
}
@ -193,13 +209,13 @@ func NewDebugBatch(label string, bch Batch) debugBatch {
// Implements Batch.
// Implements Batch.
func ( dbch debugBatch ) Set ( key , value [ ] byte ) {
func ( dbch debugBatch ) Set ( key , value [ ] byte ) {
fmt . Printf ( "%v.batch.Set(%X, %X )\n" , dbch . label , key , value )
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 )
dbch . bch . Set ( key , value )
}
}
// Implements Batch.
// Implements Batch.
func ( dbch debugBatch ) Delete ( key [ ] byte ) {
func ( dbch debugBatch ) Delete ( key [ ] byte ) {
fmt . Printf ( "%v.batch.Delete(%X )\n" , dbch . label , key )
fmt . Printf ( "%v.batch.Delete(%v )\n" , dbch . label , cmn . Red ( _fmt ( "%X" , key ) ) )
dbch . bch . Delete ( key )
dbch . bch . Delete ( key )
}
}