github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/core/ledger/kvledger/ledger_data_remover.go (about)

     1  /*
     2  Copyright hechain. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package kvledger
     8  
     9  import (
    10  	"github.com/hechain20/hechain/common/ledger/blkstorage"
    11  	"github.com/hechain20/hechain/core/ledger/confighistory"
    12  	"github.com/hechain20/hechain/core/ledger/kvledger/bookkeeping"
    13  	"github.com/hechain20/hechain/core/ledger/kvledger/history"
    14  	"github.com/hechain20/hechain/core/ledger/kvledger/txmgmt/privacyenabledstate"
    15  	"github.com/hechain20/hechain/core/ledger/pvtdatastorage"
    16  )
    17  
    18  type ledgerDataRemover struct {
    19  	blkStoreProvider     *blkstorage.BlockStoreProvider
    20  	statedbProvider      *privacyenabledstate.DBProvider
    21  	configHistoryMgr     *confighistory.Mgr
    22  	bookkeepingProvider  *bookkeeping.Provider
    23  	historydbProvider    *history.DBProvider
    24  	pvtdataStoreProvider *pvtdatastorage.Provider
    25  }
    26  
    27  // Drop drops channel-specific data from all the ledger DBs, which includes
    28  // stateDB, configHistoryDB, bookkeeperDB, historyDB, pvtdataStore, block index and blocks directory.
    29  // This function can be called multiple times for the same ledgerID. It is not an error if the ledger
    30  // does not exist. The data consistency and concurrency control will be handled outside of this function.
    31  func (r *ledgerDataRemover) Drop(ledgerID string) error {
    32  	logger.Infow("Dropping ledger data", "channel", ledgerID)
    33  	var err error
    34  	if err = r.statedbProvider.Drop(ledgerID); err != nil {
    35  		logger.Errorw("failed to drop ledger data from stateDB", "channel", ledgerID, "error", err)
    36  		return err
    37  	}
    38  
    39  	if err = r.configHistoryMgr.Drop(ledgerID); err != nil {
    40  		logger.Errorw("failed to drop ledger data from configHistoryDB", "channel", ledgerID, "error", err)
    41  		return err
    42  	}
    43  
    44  	if err := r.bookkeepingProvider.Drop(ledgerID); err != nil {
    45  		logger.Errorw("failed to drop ledger data from bookkeepingDB", "channel", ledgerID, "error", err)
    46  		return err
    47  	}
    48  
    49  	if r.historydbProvider != nil {
    50  		if err = r.historydbProvider.Drop(ledgerID); err != nil {
    51  			logger.Errorw("failed to drop ledger data from historyDB", "channel", ledgerID, "error", err)
    52  			return err
    53  		}
    54  	}
    55  
    56  	if err = r.pvtdataStoreProvider.Drop(ledgerID); err != nil {
    57  		logger.Errorw("failed to drop ledger data from pvtdataStore", "channel", ledgerID, "error", err)
    58  		return err
    59  	}
    60  
    61  	if err = r.blkStoreProvider.Drop(ledgerID); err != nil {
    62  		logger.Errorw("failed to drop ledger data from blockstore", "channel", ledgerID, "error", err)
    63  		return err
    64  	}
    65  	return nil
    66  }