3 Star 6 Fork 7

Gitee 极速下载 / Hyperledger fabric

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/hyperledger/fabric
克隆/下载
lsccstate_listener.go 2.59 KB
一键复制 编辑 原始数据 按行查看 历史
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package cceventmgmt
import (
"github.com/hyperledger/fabric/core/ledger"
"github.com/hyperledger/fabric/protos/ledger/rwset/kvrwset"
)
// KVLedgerLSCCStateListener listens for state changes for chaincode lifecycle
type KVLedgerLSCCStateListener struct {
DeployedChaincodeInfoProvider ledger.DeployedChaincodeInfoProvider
}
// HandleStateUpdates uses 'DeployedChaincodeInfoProvider' to findout deployment of a chaincode
// and invokes `HandleChaincodeDeploy` function on chaincode event manager (which in turn is responsible for creation of statedb
// artifacts for the chaincode statedata)
func (listener *KVLedgerLSCCStateListener) HandleStateUpdates(trigger *ledger.StateUpdateTrigger) error {
channelName, kvWrites, postCommitQE, deployCCInfoProvider :=
trigger.LedgerID, convertToKVWrites(trigger.StateUpdates), trigger.PostCommitQueryExecutor, listener.DeployedChaincodeInfoProvider
logger.Debugf("Channel [%s]: Handling state updates in LSCC namespace - stateUpdates=%#v", channelName, kvWrites)
updatedChaincodes, err := deployCCInfoProvider.UpdatedChaincodes(kvWrites)
if err != nil {
return err
}
chaincodeDefs := []*ChaincodeDefinition{}
for _, updatedChaincode := range updatedChaincodes {
logger.Infof("Channel [%s]: Handling deploy or update of chaincode [%s]", channelName, updatedChaincode.Name)
if updatedChaincode.Deleted {
// TODO handle delete case when delete is implemented in lifecycle
continue
}
deployedCCInfo, err := deployCCInfoProvider.ChaincodeInfo(updatedChaincode.Name, postCommitQE)
if err != nil {
return err
}
chaincodeDefs = append(chaincodeDefs, &ChaincodeDefinition{
Name: deployedCCInfo.Name,
Hash: deployedCCInfo.Hash,
Version: deployedCCInfo.Version,
CollectionConfigs: deployedCCInfo.CollectionConfigPkg,
})
}
return GetMgr().HandleChaincodeDeploy(channelName, chaincodeDefs)
}
// InterestedInNamespaces implements function from interface `ledger.StateListener`
func (listener *KVLedgerLSCCStateListener) InterestedInNamespaces() []string {
return listener.DeployedChaincodeInfoProvider.Namespaces()
}
// StateCommitDone implements function from interface `ledger.StateListener`
func (listener *KVLedgerLSCCStateListener) StateCommitDone(channelName string) {
GetMgr().ChaincodeDeployDone(channelName)
}
func convertToKVWrites(stateUpdates ledger.StateUpdates) map[string][]*kvrwset.KVWrite {
m := map[string][]*kvrwset.KVWrite{}
for ns, updates := range stateUpdates {
m[ns] = updates.([]*kvrwset.KVWrite)
}
return m
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors/fabric.git
git@gitee.com:mirrors/fabric.git
mirrors
fabric
Hyperledger fabric
v1.4.4

搜索帮助

344bd9b3 5694891 D2dac590 5694891