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