Skip to content

Commit 3d3b4a7

Browse files
manish-sethimastersingh24
authored andcommitted
Ledger-lscc: Interface for decoupling ledger and lscc
This CR - Introduces an interface 'DeployedChaincodeInfoProvider' for decoupling the ledger code from chaincode lifecycle code - Declares ledger's dependency on this interface explicitly. The intent is that ledger code will use this dependency for listening to chaincode lifecycle events and for querying the information about the deployed chaicodes - Introduces a convenient function in legder that other modules can use directly to get information about the chaincodes FAB-11562 #done Change-Id: I3eb0e798f00ceb18203128fd9da93822fc2bca2b Signed-off-by: manish <manish.sethi@gmail.com>
1 parent 080f1af commit 3d3b4a7

18 files changed

+614
-204
lines changed

core/chaincode/mock/tx_simulator.go

Lines changed: 70 additions & 70 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/ledger/kvledger/custom_processor_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (ctp *customTxProcessor) GenerateSimulationResults(txEnvelop *common.Envelo
4343
func TestCustomProcessor(t *testing.T) {
4444
env := newTestEnv(t)
4545
defer env.cleanup()
46-
provider, _ := NewProvider()
46+
provider := testutilNewProvider(t)
4747
defer provider.Close()
4848

4949
// create a custom tx processor and register it to handle '100 and 101' type of transaction
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package kvledger
8+
9+
import (
10+
"github.com/hyperledger/fabric/core/ledger"
11+
"github.com/hyperledger/fabric/protos/common"
12+
)
13+
14+
type deployedCCInfoRetriever struct {
15+
ledger ledger.PeerLedger
16+
infoProvider ledger.DeployedChaincodeInfoProvider
17+
}
18+
19+
func (r *deployedCCInfoRetriever) ChaincodeInfo(chaincodeName string) (*ledger.DeployedChaincodeInfo, error) {
20+
qe, err := r.ledger.NewQueryExecutor()
21+
if err != nil {
22+
return nil, err
23+
}
24+
defer qe.Done()
25+
return r.infoProvider.ChaincodeInfo(chaincodeName, qe)
26+
}
27+
28+
func (r *deployedCCInfoRetriever) CollectionInfo(chaincodeName, collectionName string) (*common.StaticCollectionConfig, error) {
29+
qe, err := r.ledger.NewQueryExecutor()
30+
if err != nil {
31+
return nil, err
32+
}
33+
defer qe.Done()
34+
return r.infoProvider.CollectionInfo(chaincodeName, collectionName, qe)
35+
}

core/ledger/kvledger/example/main/example.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ func init() {
5555
// Note, if subledgers are supported in the future,
5656
// the various ledgers could be created/managed at this level
5757
cleanup()
58-
ledgermgmt.Initialize(nil, platforms.NewRegistry(&golang.Platform{}))
58+
ledgermgmt.Initialize(&ledgermgmt.Initializer{
59+
PlatformRegistry: platforms.NewRegistry(&golang.Platform{}),
60+
})
5961
var err error
6062

6163
gb, _ := configtxtest.MakeGenesisBlock(ledgerID)

core/ledger/kvledger/kv_ledger.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ func newKVLedger(
5050
historyDB historydb.HistoryDB,
5151
configHistoryMgr confighistory.Mgr,
5252
stateListeners []ledger.StateListener,
53-
bookkeeperProvider bookkeeping.Provider) (*kvLedger, error) {
53+
bookkeeperProvider bookkeeping.Provider,
54+
ccInfoProvider ledger.DeployedChaincodeInfoProvider) (*kvLedger, error) {
5455

5556
logger.Debugf("Creating KVLedger ledgerID=%s: ", ledgerID)
5657
stateListeners = append(stateListeners, configHistoryMgr)

core/ledger/kvledger/kv_ledger_provider.go

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@ import (
1010
"bytes"
1111
"fmt"
1212

13-
"github.com/hyperledger/fabric/core/ledger/confighistory"
14-
1513
"github.com/golang/protobuf/proto"
1614
"github.com/hyperledger/fabric/common/ledger/util/leveldbhelper"
1715
"github.com/hyperledger/fabric/core/ledger"
16+
"github.com/hyperledger/fabric/core/ledger/confighistory"
1817
"github.com/hyperledger/fabric/core/ledger/kvledger/bookkeeping"
1918
"github.com/hyperledger/fabric/core/ledger/kvledger/history/historydb"
2019
"github.com/hyperledger/fabric/core/ledger/kvledger/history/historydb/historyleveldb"
@@ -48,39 +47,36 @@ type Provider struct {
4847
configHistoryMgr confighistory.Mgr
4948
stateListeners []ledger.StateListener
5049
bookkeepingProvider bookkeeping.Provider
50+
initializer *ledger.Initializer
5151
}
5252

5353
// NewProvider instantiates a new Provider.
5454
// This is not thread-safe and assumed to be synchronized be the caller
5555
func NewProvider() (ledger.PeerLedgerProvider, error) {
56-
5756
logger.Info("Initializing ledger provider")
58-
5957
// Initialize the ID store (inventory of chainIds/ledgerIds)
6058
idStore := openIDStore(ledgerconfig.GetLedgerProviderPath())
61-
6259
ledgerStoreProvider := ledgerstorage.NewProvider()
63-
6460
// Initialize the versioned database (state database)
6561
vdbProvider, err := privacyenabledstate.NewCommonStorageDBProvider()
6662
if err != nil {
6763
return nil, err
6864
}
69-
7065
// Initialize the history database (index for history of values by key)
7166
historydbProvider := historyleveldb.NewHistoryDBProvider()
7267
bookkeepingProvider := bookkeeping.NewProvider()
73-
// Initialize config history mgr
74-
configHistoryMgr := confighistory.NewMgr()
7568
logger.Info("ledger provider Initialized")
76-
provider := &Provider{idStore, ledgerStoreProvider, vdbProvider, historydbProvider, configHistoryMgr, nil, bookkeepingProvider}
77-
provider.recoverUnderConstructionLedger()
69+
provider := &Provider{idStore, ledgerStoreProvider,
70+
vdbProvider, historydbProvider, nil, nil, bookkeepingProvider, nil}
7871
return provider, nil
7972
}
8073

8174
// Initialize implements the corresponding method from interface ledger.PeerLedgerProvider
82-
func (provider *Provider) Initialize(stateListeners []ledger.StateListener) {
83-
provider.stateListeners = stateListeners
75+
func (provider *Provider) Initialize(initializer *ledger.Initializer) {
76+
provider.initializer = initializer
77+
provider.configHistoryMgr = confighistory.NewMgr()
78+
provider.stateListeners = initializer.StateListeners
79+
provider.recoverUnderConstructionLedger()
8480
}
8581

8682
// Create implements the corresponding method from interface ledger.PeerLedgerProvider
@@ -155,7 +151,8 @@ func (provider *Provider) openInternal(ledgerID string) (ledger.PeerLedger, erro
155151

156152
// Create a kvLedger for this chain/ledger, which encasulates the underlying data stores
157153
// (id store, blockstore, state database, history database)
158-
l, err := newKVLedger(ledgerID, blockStore, vDB, historyDB, provider.configHistoryMgr, provider.stateListeners, provider.bookkeepingProvider)
154+
l, err := newKVLedger(ledgerID, blockStore, vDB, historyDB, provider.configHistoryMgr,
155+
provider.stateListeners, provider.bookkeepingProvider, provider.initializer.DeployedChaincodeInfoProvider)
159156
if err != nil {
160157
return nil, err
161158
}

0 commit comments

Comments
 (0)