github.com/ewagmig/fabric@v2.1.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  }