github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/swarm/storage/database.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:49</date> 10 //</624342680679223296> 11 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 // 25 // 26 // 27 28 package storage 29 30 // 31 // 32 33 import ( 34 "fmt" 35 36 "github.com/ethereum/go-ethereum/metrics" 37 "github.com/syndtr/goleveldb/leveldb" 38 "github.com/syndtr/goleveldb/leveldb/iterator" 39 "github.com/syndtr/goleveldb/leveldb/opt" 40 ) 41 42 const openFileLimit = 128 43 44 type LDBDatabase struct { 45 db *leveldb.DB 46 } 47 48 func NewLDBDatabase(file string) (*LDBDatabase, error) { 49 // 50 db, err := leveldb.OpenFile(file, &opt.Options{OpenFilesCacheCapacity: openFileLimit}) 51 if err != nil { 52 return nil, err 53 } 54 55 database := &LDBDatabase{db: db} 56 57 return database, nil 58 } 59 60 func (db *LDBDatabase) Put(key []byte, value []byte) { 61 metrics.GetOrRegisterCounter("ldbdatabase.put", nil).Inc(1) 62 63 err := db.db.Put(key, value, nil) 64 if err != nil { 65 fmt.Println("Error put", err) 66 } 67 } 68 69 func (db *LDBDatabase) Get(key []byte) ([]byte, error) { 70 metrics.GetOrRegisterCounter("ldbdatabase.get", nil).Inc(1) 71 72 dat, err := db.db.Get(key, nil) 73 if err != nil { 74 return nil, err 75 } 76 return dat, nil 77 } 78 79 func (db *LDBDatabase) Delete(key []byte) error { 80 return db.db.Delete(key, nil) 81 } 82 83 func (db *LDBDatabase) LastKnownTD() []byte { 84 data, _ := db.Get([]byte("LTD")) 85 86 if len(data) == 0 { 87 data = []byte{0x0} 88 } 89 90 return data 91 } 92 93 func (db *LDBDatabase) NewIterator() iterator.Iterator { 94 metrics.GetOrRegisterCounter("ldbdatabase.newiterator", nil).Inc(1) 95 96 return db.db.NewIterator(nil, nil) 97 } 98 99 func (db *LDBDatabase) Write(batch *leveldb.Batch) error { 100 metrics.GetOrRegisterCounter("ldbdatabase.write", nil).Inc(1) 101 102 return db.db.Write(batch, nil) 103 } 104 105 func (db *LDBDatabase) Close() { 106 // 107 db.db.Close() 108 } 109