github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/core/ledger/kvledger/bookkeeping/provider.go (about) 1 /* 2 Copyright hechain. 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/hechain20/hechain/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 // SnapshotRequest maintains the information for snapshot requests 24 SnapshotRequest 25 ) 26 27 // Provider provides db handle to different bookkeepers 28 type Provider struct { 29 dbProvider *leveldbhelper.Provider 30 } 31 32 // NewProvider instantiates a new provider 33 func NewProvider(dbPath string) (*Provider, error) { 34 dbProvider, err := leveldbhelper.NewProvider(&leveldbhelper.Conf{DBPath: dbPath}) 35 if err != nil { 36 return nil, err 37 } 38 return &Provider{dbProvider: dbProvider}, nil 39 } 40 41 // GetDBHandle implements the function in the interface 'BookkeeperProvider' 42 func (p *Provider) GetDBHandle(ledgerID string, cat Category) *leveldbhelper.DBHandle { 43 return p.dbProvider.GetDBHandle(dbName(ledgerID, cat)) 44 } 45 46 // Close implements the function in the interface 'BookKeeperProvider' 47 func (p *Provider) Close() { 48 p.dbProvider.Close() 49 } 50 51 // Drop drops channel-specific data from the config history db 52 func (p *Provider) Drop(ledgerID string) error { 53 for _, cat := range []Category{PvtdataExpiry, MetadataPresenceIndicator, SnapshotRequest} { 54 if err := p.dbProvider.Drop(dbName(ledgerID, cat)); err != nil { 55 return err 56 } 57 } 58 return nil 59 } 60 61 func dbName(ledgerID string, cat Category) string { 62 return fmt.Sprintf(ledgerID+"/%d", cat) 63 }