github.com/kaituanwang/hyperledger@v2.0.1+incompatible/core/ledger/kvledger/bookkeeping/provider.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package bookkeeping 8 9 import ( 10 "fmt" 11 12 "github.com/hyperledger/fabric/common/ledger/util/leveldbhelper" 13 ) 14 15 // Category is an enum type for representing the bookkeeping of different type 16 type Category int 17 18 const ( 19 // PvtdataExpiry represents the bookkeeping related to expiry of pvtdata because of BTL policy 20 PvtdataExpiry Category = iota 21 // MetadataPresenceIndicator maintains the bookkeeping about whether metadata is ever set for a namespace 22 MetadataPresenceIndicator 23 ) 24 25 // Provider provides handle to different bookkeepers for the given ledger 26 type Provider interface { 27 // GetDBHandle returns a db handle that can be used for maintaining the bookkeeping of a given category 28 GetDBHandle(ledgerID string, cat Category) *leveldbhelper.DBHandle 29 // Close closes the BookkeeperProvider 30 Close() 31 } 32 33 type provider struct { 34 dbProvider *leveldbhelper.Provider 35 } 36 37 // NewProvider instantiates a new provider 38 func NewProvider(dbPath string) (Provider, error) { 39 dbProvider, err := leveldbhelper.NewProvider(&leveldbhelper.Conf{DBPath: dbPath}) 40 if err != nil { 41 return nil, err 42 } 43 return &provider{dbProvider: dbProvider}, nil 44 } 45 46 // GetDBHandle implements the function in the interface 'BookkeeperProvider' 47 func (provider *provider) GetDBHandle(ledgerID string, cat Category) *leveldbhelper.DBHandle { 48 return provider.dbProvider.GetDBHandle(fmt.Sprintf(ledgerID+"/%d", cat)) 49 } 50 51 // Close implements the function in the interface 'BookKeeperProvider' 52 func (provider *provider) Close() { 53 provider.dbProvider.Close() 54 }