Skip to content

Commit

Permalink
FAB-3557 Remove duplicate ChaincodeInstance
Browse files Browse the repository at this point in the history
This change set removes the duplicate definition of the ChaincodeInstance
struct.

Change-Id: I507ba3d14855bc7ef183e5f0a01bf43504cd0bc8
Signed-off-by: Alessandro Sorniotti <ale.linux@sopit.net>
  • Loading branch information
ale-linux committed May 2, 2017
1 parent b982051 commit 1b4ad7c
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 33 deletions.
31 changes: 16 additions & 15 deletions core/committer/txvalidator/txvalidator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/hyperledger/fabric/common/configtx/test"
"github.com/hyperledger/fabric/common/ledger/testutil"
util2 "github.com/hyperledger/fabric/common/util"
"github.com/hyperledger/fabric/core/common/sysccprovider"
"github.com/hyperledger/fabric/core/ledger/ledgermgmt"
"github.com/hyperledger/fabric/core/ledger/util"
ledgerUtil "github.com/hyperledger/fabric/core/ledger/util"
Expand Down Expand Up @@ -214,12 +215,12 @@ func TestGetTxCCInstance(t *testing.T) {
payload, err := utils.GetPayload(env)
assert.NoError(t, err)

expectInvokeCCIns := &ChaincodeInstance{
expectInvokeCCIns := &sysccprovider.ChaincodeInstance{
ChainID: chainID,
ChaincodeName: "lscc",
ChaincodeVersion: "",
}
expectUpgradeCCIns := &ChaincodeInstance{
expectUpgradeCCIns := &sysccprovider.ChaincodeInstance{
ChainID: chainID,
ChaincodeName: upgradeCCName,
ChaincodeVersion: upgradeCCVersion,
Expand All @@ -235,20 +236,20 @@ func TestGetTxCCInstance(t *testing.T) {
}

func TestInvalidTXsForUpgradeCC(t *testing.T) {
txsChaincodeNames := map[int]*ChaincodeInstance{
0: &ChaincodeInstance{"chain0", "cc0", "v0"}, // invoke cc0/chain0:v0, should not be affected by upgrade tx in other chain
1: &ChaincodeInstance{"chain1", "cc0", "v0"}, // invoke cc0/chain1:v0, should be invalided by cc1/chain1 upgrade tx
2: &ChaincodeInstance{"chain1", "lscc", ""}, // upgrade cc0/chain1 to v1, should be invalided by latter cc0/chain1 upgtade tx
3: &ChaincodeInstance{"chain1", "cc0", "v0"}, // invoke cc0/chain1:v0, should be invalided by cc1/chain1 upgrade tx
4: &ChaincodeInstance{"chain1", "cc0", "v1"}, // invoke cc0/chain1:v1, should be invalided by cc1/chain1 upgrade tx
5: &ChaincodeInstance{"chain1", "cc1", "v0"}, // invoke cc1/chain1:v0, should not be affected by other chaincode upgrade tx
6: &ChaincodeInstance{"chain1", "lscc", ""}, // upgrade cc0/chain1 to v2, should be invalided by latter cc0/chain1 upgtade tx
7: &ChaincodeInstance{"chain1", "lscc", ""}, // upgrade cc0/chain1 to v3
txsChaincodeNames := map[int]*sysccprovider.ChaincodeInstance{
0: &sysccprovider.ChaincodeInstance{"chain0", "cc0", "v0"}, // invoke cc0/chain0:v0, should not be affected by upgrade tx in other chain
1: &sysccprovider.ChaincodeInstance{"chain1", "cc0", "v0"}, // invoke cc0/chain1:v0, should be invalided by cc1/chain1 upgrade tx
2: &sysccprovider.ChaincodeInstance{"chain1", "lscc", ""}, // upgrade cc0/chain1 to v1, should be invalided by latter cc0/chain1 upgtade tx
3: &sysccprovider.ChaincodeInstance{"chain1", "cc0", "v0"}, // invoke cc0/chain1:v0, should be invalided by cc1/chain1 upgrade tx
4: &sysccprovider.ChaincodeInstance{"chain1", "cc0", "v1"}, // invoke cc0/chain1:v1, should be invalided by cc1/chain1 upgrade tx
5: &sysccprovider.ChaincodeInstance{"chain1", "cc1", "v0"}, // invoke cc1/chain1:v0, should not be affected by other chaincode upgrade tx
6: &sysccprovider.ChaincodeInstance{"chain1", "lscc", ""}, // upgrade cc0/chain1 to v2, should be invalided by latter cc0/chain1 upgtade tx
7: &sysccprovider.ChaincodeInstance{"chain1", "lscc", ""}, // upgrade cc0/chain1 to v3
}
upgradedChaincodes := map[int]*ChaincodeInstance{
2: &ChaincodeInstance{"chain1", "cc0", "v1"},
6: &ChaincodeInstance{"chain1", "cc0", "v2"},
7: &ChaincodeInstance{"chain1", "cc0", "v3"},
upgradedChaincodes := map[int]*sysccprovider.ChaincodeInstance{
2: &sysccprovider.ChaincodeInstance{"chain1", "cc0", "v1"},
6: &sysccprovider.ChaincodeInstance{"chain1", "cc0", "v2"},
7: &sysccprovider.ChaincodeInstance{"chain1", "cc0", "v3"},
}

txsfltr := ledgerUtil.NewTxValidationFlags(8)
Expand Down
29 changes: 11 additions & 18 deletions core/committer/txvalidator/validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,6 @@ type txValidator struct {
vscc vsccValidator
}

// ChaincodeInstance is unique identifier of chaincode instance
type ChaincodeInstance struct {
ChainID string
ChaincodeName string
ChaincodeVersion string
}

var logger *logging.Logger // package-level logger

func init() {
Expand Down Expand Up @@ -121,9 +114,9 @@ func (v *txValidator) Validate(block *common.Block) error {
// Initialize trans as valid here, then set invalidation reason code upon invalidation below
txsfltr := ledgerUtil.NewTxValidationFlags(len(block.Data.Data))
// txsChaincodeNames records all the invoked chaincodes by tx in a block
txsChaincodeNames := make(map[int]*ChaincodeInstance)
txsChaincodeNames := make(map[int]*sysccprovider.ChaincodeInstance)
// upgradedChaincodes records all the chaincodes that are upgrded in a block
txsUpgradedChaincodes := make(map[int]*ChaincodeInstance)
txsUpgradedChaincodes := make(map[int]*sysccprovider.ChaincodeInstance)
for tIdx, d := range block.Data.Data {
if d != nil {
if env, err := utils.GetEnvelopeFromBlock(d); err != nil {
Expand Down Expand Up @@ -238,14 +231,14 @@ func (v *txValidator) generateCCKey(ccName, chainID string) string {
}

// invalidTXsForUpgradeCC invalid all txs that should be invalided because of chaincode upgrade txs
func (v *txValidator) invalidTXsForUpgradeCC(txsChaincodeNames map[int]*ChaincodeInstance, txsUpgradedChaincodes map[int]*ChaincodeInstance, txsfltr ledgerUtil.TxValidationFlags) ledgerUtil.TxValidationFlags {
func (v *txValidator) invalidTXsForUpgradeCC(txsChaincodeNames map[int]*sysccprovider.ChaincodeInstance, txsUpgradedChaincodes map[int]*sysccprovider.ChaincodeInstance, txsfltr ledgerUtil.TxValidationFlags) ledgerUtil.TxValidationFlags {
if len(txsUpgradedChaincodes) == 0 {
return txsfltr
}

// Invalid former cc upgrade txs if there're two or more txs upgrade the same cc
finalValidUpgradeTXs := make(map[string]int)
upgradedChaincodes := make(map[string]*ChaincodeInstance)
upgradedChaincodes := make(map[string]*sysccprovider.ChaincodeInstance)
for tIdx, cc := range txsUpgradedChaincodes {
if cc == nil {
continue
Expand Down Expand Up @@ -285,7 +278,7 @@ func (v *txValidator) invalidTXsForUpgradeCC(txsChaincodeNames map[int]*Chaincod
return txsfltr
}

func (v *txValidator) getTxCCInstance(payload *common.Payload) (invokeCCIns, upgradeCCIns *ChaincodeInstance, err error) {
func (v *txValidator) getTxCCInstance(payload *common.Payload) (invokeCCIns, upgradeCCIns *sysccprovider.ChaincodeInstance, err error) {
// This is duplicated unpacking work, but make test easier.
chdr, err := utils.UnmarshalChannelHeader(payload.Header.ChannelHeader)
if err != nil {
Expand All @@ -301,7 +294,7 @@ func (v *txValidator) getTxCCInstance(payload *common.Payload) (invokeCCIns, upg
return nil, nil, err
}
invokeCC := hdrExt.ChaincodeId
invokeIns := &ChaincodeInstance{ChainID: chainID, ChaincodeName: invokeCC.Name, ChaincodeVersion: invokeCC.Version}
invokeIns := &sysccprovider.ChaincodeInstance{ChainID: chainID, ChaincodeName: invokeCC.Name, ChaincodeVersion: invokeCC.Version}

// Transaction
tx, err := utils.GetTransaction(payload.Data)
Expand Down Expand Up @@ -345,23 +338,23 @@ func (v *txValidator) getTxCCInstance(payload *common.Payload) (invokeCCIns, upg
return invokeIns, nil, nil
}

func (v *txValidator) getUpgradeTxInstance(chainID string, cdsBytes []byte) (*ChaincodeInstance, error) {
func (v *txValidator) getUpgradeTxInstance(chainID string, cdsBytes []byte) (*sysccprovider.ChaincodeInstance, error) {
cds, err := utils.GetChaincodeDeploymentSpec(cdsBytes)
if err != nil {
return nil, err
}

return &ChaincodeInstance{
return &sysccprovider.ChaincodeInstance{
ChainID: chainID,
ChaincodeName: cds.ChaincodeSpec.ChaincodeId.Name,
ChaincodeVersion: cds.ChaincodeSpec.ChaincodeId.Version,
}, nil
}

// GetInfoForValidate gets the ChaincodeInstance(with latest version) of tx, vscc and policy from lscc
func (v *vsccValidatorImpl) GetInfoForValidate(txid, chID, ccID string) (*ChaincodeInstance, *ChaincodeInstance, []byte, error) {
cc := &ChaincodeInstance{ChainID: chID}
vscc := &ChaincodeInstance{ChainID: chID}
func (v *vsccValidatorImpl) GetInfoForValidate(txid, chID, ccID string) (*sysccprovider.ChaincodeInstance, *sysccprovider.ChaincodeInstance, []byte, error) {
cc := &sysccprovider.ChaincodeInstance{ChainID: chID}
vscc := &sysccprovider.ChaincodeInstance{ChainID: chID}
var policy []byte
if ccID != "lscc" {
// when we are validating any chaincode other than
Expand Down

0 comments on commit 1b4ad7c

Please sign in to comment.