2014-08-10 16:35:08 -07:00
|
|
|
package db
|
|
|
|
|
2014-12-28 00:44:56 -08:00
|
|
|
import (
|
|
|
|
"path"
|
|
|
|
|
|
|
|
. "github.com/tendermint/tendermint/common"
|
|
|
|
. "github.com/tendermint/tendermint/config"
|
|
|
|
)
|
|
|
|
|
2014-10-04 19:16:49 -07:00
|
|
|
type DB interface {
|
2014-08-10 16:35:08 -07:00
|
|
|
Get([]byte) []byte
|
|
|
|
Set([]byte, []byte)
|
2014-12-09 18:49:04 -08:00
|
|
|
SetSync([]byte, []byte)
|
|
|
|
Delete([]byte)
|
|
|
|
DeleteSync([]byte)
|
2014-08-10 16:35:08 -07:00
|
|
|
}
|
2014-12-28 00:44:56 -08:00
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
// Database types
|
|
|
|
const DBBackendMemDB = "memdb"
|
|
|
|
const DBBackendLevelDB = "leveldb"
|
|
|
|
|
|
|
|
var dbs = NewCMap()
|
|
|
|
|
|
|
|
func GetDB(name string) DB {
|
|
|
|
db := dbs.Get(name)
|
|
|
|
if db != nil {
|
|
|
|
return db.(DB)
|
|
|
|
}
|
|
|
|
switch Config.DB.Backend {
|
|
|
|
case DBBackendMemDB:
|
|
|
|
db := NewMemDB()
|
|
|
|
dbs.Set(name, db)
|
|
|
|
return db
|
|
|
|
case DBBackendLevelDB:
|
|
|
|
db, err := NewLevelDB(path.Join(Config.DB.Dir, name+".db"))
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
dbs.Set(name, db)
|
|
|
|
return db
|
|
|
|
default:
|
2014-12-31 22:13:49 -08:00
|
|
|
panic(Fmt("Unknown DB backend: %v", Config.DB.Backend))
|
2014-12-28 00:44:56 -08:00
|
|
|
}
|
|
|
|
}
|