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  }