From ca2360b8d9bc6f4454aa9955de4f1c1fe9fb111c Mon Sep 17 00:00:00 2001 From: Jason Yellick Date: Fri, 27 Apr 2018 15:11:07 -0400 Subject: [PATCH] FAB-9803 Push PeerID and NetworkID into dc Only the docker-controller needs the PeerID and NetworkID, but it is constantly passed as part of the arguments through the ccintf. This is unnecessary, and the docker controller instance should retain the value of these strings instead. This CR does that. Change-Id: I64ab1e1405dd646355e469dfda6ec880dc199f4a Signed-off-by: Jason Yellick --- core/chaincode/chaincode_support.go | 2 - core/chaincode/chaincode_support_test.go | 2 +- core/chaincode/config.go | 4 - core/chaincode/config_test.go | 2 - core/chaincode/container_runtime.go | 8 +- core/chaincode/container_runtime_test.go | 24 ++--- core/chaincode/exectransaction_test.go | 2 +- core/chaincode/systemchaincode_test.go | 2 +- core/container/ccintf/ccintf.go | 2 - .../dockercontroller/dockercontroller.go | 49 ++++++----- .../dockercontroller/dockercontroller_test.go | 88 +++++++++++++------ peer/node/start.go | 5 +- 12 files changed, 101 insertions(+), 89 deletions(-) diff --git a/core/chaincode/chaincode_support.go b/core/chaincode/chaincode_support.go index 4304060b88a..251630e8d7d 100644 --- a/core/chaincode/chaincode_support.go +++ b/core/chaincode/chaincode_support.go @@ -68,8 +68,6 @@ func NewChaincodeSupport( Processor: processor, CACert: caCert, PeerAddress: peerAddress, - PeerID: config.PeerID, - PeerNetworkID: config.PeerNetworkID, CommonEnv: []string{ "CORE_CHAINCODE_LOGGING_LEVEL=" + config.LogLevel, "CORE_CHAINCODE_LOGGING_SHIM=" + config.ShimLogLevel, diff --git a/core/chaincode/chaincode_support_test.go b/core/chaincode/chaincode_support_test.go index 62e3c11b4a0..12ebef3d1bf 100644 --- a/core/chaincode/chaincode_support_test.go +++ b/core/chaincode/chaincode_support_test.go @@ -182,7 +182,7 @@ func initMockPeer(chainIDs ...string) (*ChaincodeSupport, error) { aclmgmt.GetACLProvider(), container.NewVMController( map[string]container.VMProvider{ - dockercontroller.ContainerType: dockercontroller.NewProvider(), + dockercontroller.ContainerType: dockercontroller.NewProvider("", ""), inproccontroller.ContainerType: ipRegistry, }, ), diff --git a/core/chaincode/config.go b/core/chaincode/config.go index 84bfa7521ce..966749429ad 100644 --- a/core/chaincode/config.go +++ b/core/chaincode/config.go @@ -22,8 +22,6 @@ const ( ) type Config struct { - PeerNetworkID string - PeerID string TLSEnabled bool Keepalive time.Duration ExecuteTimeout time.Duration @@ -45,8 +43,6 @@ func (c *Config) load() { replacer := strings.NewReplacer(".", "_") viper.SetEnvKeyReplacer(replacer) - c.PeerNetworkID = viper.GetString("peer.networkId") - c.PeerID = viper.GetString("peer.id") c.TLSEnabled = viper.GetBool("peer.tls.enabled") c.Keepalive = toSeconds(viper.GetString("chaincode.keepalive"), 0) diff --git a/core/chaincode/config_test.go b/core/chaincode/config_test.go index 11709dfa5dd..797674b92c8 100644 --- a/core/chaincode/config_test.go +++ b/core/chaincode/config_test.go @@ -31,8 +31,6 @@ func TestGlobalConfig(t *testing.T) { viper.Set("chaincode.logging.shim", "WARNING") config := chaincode.GlobalConfig() - assert.Equal(t, "test-peer-network-id", config.PeerNetworkID) - assert.Equal(t, "test-peer-id", config.PeerID) assert.Equal(t, true, config.TLSEnabled) assert.Equal(t, 50*time.Second, config.Keepalive) assert.Equal(t, 20*time.Hour, config.ExecuteTimeout) diff --git a/core/chaincode/container_runtime.go b/core/chaincode/container_runtime.go index c6076565e78..be543decdd1 100644 --- a/core/chaincode/container_runtime.go +++ b/core/chaincode/container_runtime.go @@ -44,8 +44,6 @@ type ContainerRuntime struct { CACert []byte CommonEnv []string PeerAddress string - PeerID string - PeerNetworkID string } type platformBuilder struct { @@ -65,7 +63,7 @@ func (c *ContainerRuntime) Start(ctxt context.Context, cccid *ccprovider.CCConte return err } - chaincodeLogger.Debugf("start container: %s(networkid:%s,peerid:%s)", cname, c.PeerNetworkID, c.PeerID) + chaincodeLogger.Debugf("start container: %s(networkid:%s,peerid:%s)", cname) chaincodeLogger.Debugf("start container with args: %s", strings.Join(lc.Args, " ")) chaincodeLogger.Debugf("start container with env:\n\t%s", strings.Join(lc.Envs, "\n\t")) @@ -77,8 +75,6 @@ func (c *ContainerRuntime) Start(ctxt context.Context, cccid *ccprovider.CCConte FilesToUpload: lc.Files, CCID: ccintf.CCID{ ChaincodeSpec: cds.ChaincodeSpec, - NetworkID: c.PeerNetworkID, - PeerID: c.PeerID, Version: cccid.Version, }, } @@ -97,8 +93,6 @@ func (c *ContainerRuntime) Stop(ctxt context.Context, cccid *ccprovider.CCContex scr := container.StopContainerReq{ CCID: ccintf.CCID{ ChaincodeSpec: cds.ChaincodeSpec, - NetworkID: c.PeerNetworkID, - PeerID: c.PeerID, Version: cccid.Version, }, Timeout: 0, diff --git a/core/chaincode/container_runtime_test.go b/core/chaincode/container_runtime_test.go index 67bae801b42..19248640df6 100644 --- a/core/chaincode/container_runtime_test.go +++ b/core/chaincode/container_runtime_test.go @@ -171,10 +171,8 @@ func TestContainerRuntimeStart(t *testing.T) { for _, tc := range tests { fakeProcessor := &mock.Processor{} cr := &chaincode.ContainerRuntime{ - Processor: fakeProcessor, - PeerAddress: "peer.example.com", - PeerID: "peer-id", - PeerNetworkID: "peer-network-id", + Processor: fakeProcessor, + PeerAddress: "peer.example.com", } ccctx := ccprovider.NewCCContext("context-chain-id", "context-name", "context-version", "context-tx-id", false, nil, nil) @@ -202,8 +200,6 @@ func TestContainerRuntimeStart(t *testing.T) { assert.Equal(t, startReq.CCID, ccintf.CCID{ ChaincodeSpec: cds.ChaincodeSpec, Version: "context-version", - NetworkID: "peer-network-id", - PeerID: "peer-id", }) } } @@ -224,10 +220,8 @@ func TestContainerRuntimeStartErrors(t *testing.T) { fakeProcessor.ProcessReturns(tc.processErr) cr := &chaincode.ContainerRuntime{ - Processor: fakeProcessor, - PeerAddress: "peer.example.com", - PeerID: "peer-id", - PeerNetworkID: "peer-network-id", + Processor: fakeProcessor, + PeerAddress: "peer.example.com", } ccctx := ccprovider.NewCCContext("context-chain-id", "context-name", "context-version", "context-tx-id", false, nil, nil) @@ -254,9 +248,7 @@ func TestContainerRuntimeStop(t *testing.T) { for _, tc := range tests { fakeProcessor := &mock.Processor{} cr := &chaincode.ContainerRuntime{ - Processor: fakeProcessor, - PeerID: "peer-id", - PeerNetworkID: "peer-network-id", + Processor: fakeProcessor, } ccctx := ccprovider.NewCCContext("context-chain-id", "context-name", "context-version", "context-tx-id", false, nil, nil) @@ -282,8 +274,6 @@ func TestContainerRuntimeStop(t *testing.T) { assert.Equal(t, stopReq.CCID, ccintf.CCID{ ChaincodeSpec: cds.ChaincodeSpec, Version: "context-version", - NetworkID: "peer-network-id", - PeerID: "peer-id", }) } } @@ -302,9 +292,7 @@ func TestContainerRuntimeStopErrors(t *testing.T) { fakeProcessor.ProcessReturns(tc.processErr) cr := &chaincode.ContainerRuntime{ - Processor: fakeProcessor, - PeerID: "peer-id", - PeerNetworkID: "peer-network-id", + Processor: fakeProcessor, } ccctx := ccprovider.NewCCContext("context-chain-id", "context-name", "context-version", "context-tx-id", false, nil, nil) diff --git a/core/chaincode/exectransaction_test.go b/core/chaincode/exectransaction_test.go index fcdaec71746..82a5c596bcb 100644 --- a/core/chaincode/exectransaction_test.go +++ b/core/chaincode/exectransaction_test.go @@ -131,7 +131,7 @@ func initPeer(chainIDs ...string) (net.Listener, *ChaincodeSupport, func(), erro aclmgmt.GetACLProvider(), container.NewVMController( map[string]container.VMProvider{ - dockercontroller.ContainerType: dockercontroller.NewProvider(), + dockercontroller.ContainerType: dockercontroller.NewProvider("", ""), inproccontroller.ContainerType: ipRegistry, }, ), diff --git a/core/chaincode/systemchaincode_test.go b/core/chaincode/systemchaincode_test.go index 4c7689619b3..db17a401b86 100644 --- a/core/chaincode/systemchaincode_test.go +++ b/core/chaincode/systemchaincode_test.go @@ -136,7 +136,7 @@ func initSysCCTests() (*oldSysCCInfo, net.Listener, *ChaincodeSupport, error) { aclmgmt.GetACLProvider(), container.NewVMController( map[string]container.VMProvider{ - dockercontroller.ContainerType: dockercontroller.NewProvider(), + dockercontroller.ContainerType: dockercontroller.NewProvider("", ""), inproccontroller.ContainerType: ipRegistry, }, ), diff --git a/core/container/ccintf/ccintf.go b/core/container/ccintf/ccintf.go index 8f3b6523aec..227f8eac029 100644 --- a/core/container/ccintf/ccintf.go +++ b/core/container/ccintf/ccintf.go @@ -35,8 +35,6 @@ func GetCCHandlerKey() string { //CCID encapsulates chaincode ID type CCID struct { ChaincodeSpec *pb.ChaincodeSpec - NetworkID string - PeerID string Version string } diff --git a/core/container/dockercontroller/dockercontroller.go b/core/container/dockercontroller/dockercontroller.go index 73314cc764d..f0a787ff90d 100644 --- a/core/container/dockercontroller/dockercontroller.go +++ b/core/container/dockercontroller/dockercontroller.go @@ -1,17 +1,7 @@ /* -Copyright IBM Corp. 2016 All Rights Reserved. +Copyright IBM Corp. All Rights Reserved. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: Apache-2.0 */ package dockercontroller @@ -59,6 +49,8 @@ type getClient func() (dockerClient, error) type DockerVM struct { id string getClientFnc getClient + PeerID string + NetworkID string } // dockerClient represents a docker client @@ -90,21 +82,30 @@ type dockerClient interface { } // Controller implements container.VMProvider -type Provider struct{} +type Provider struct { + PeerID string + NetworkID string +} // NewProvider creates a new instance of Provider -func NewProvider() *Provider { - return &Provider{} +func NewProvider(peerID, networkID string) *Provider { + return &Provider{ + PeerID: peerID, + NetworkID: networkID, + } } // NewVM creates a new DockerVM instance func (p *Provider) NewVM() container.VM { - return NewDockerVM() + return NewDockerVM(p.PeerID, p.NetworkID) } // NewDockerVM returns a new DockerVM instance -func NewDockerVM() *DockerVM { - vm := DockerVM{} +func NewDockerVM(peerID, networkID string) *DockerVM { + vm := DockerVM{ + PeerID: peerID, + NetworkID: networkID, + } vm.getClientFnc = getDockerClient return &vm } @@ -479,12 +480,12 @@ func (vm *DockerVM) Destroy(ctxt context.Context, ccid ccintf.CCID, force bool, func (vm *DockerVM) GetVMName(ccid ccintf.CCID, format func(string) (string, error)) (string, error) { name := ccid.GetName() - if ccid.NetworkID != "" && ccid.PeerID != "" { - name = fmt.Sprintf("%s-%s-%s", ccid.NetworkID, ccid.PeerID, name) - } else if ccid.NetworkID != "" { - name = fmt.Sprintf("%s-%s", ccid.NetworkID, name) - } else if ccid.PeerID != "" { - name = fmt.Sprintf("%s-%s", ccid.PeerID, name) + if vm.NetworkID != "" && vm.PeerID != "" { + name = fmt.Sprintf("%s-%s-%s", vm.NetworkID, vm.PeerID, name) + } else if vm.NetworkID != "" { + name = fmt.Sprintf("%s-%s", vm.NetworkID, name) + } else if vm.PeerID != "" { + name = fmt.Sprintf("%s-%s", vm.PeerID, name) } if format != nil { diff --git a/core/container/dockercontroller/dockercontroller_test.go b/core/container/dockercontroller/dockercontroller_test.go index 86b0537f748..d6cf725994d 100644 --- a/core/container/dockercontroller/dockercontroller_test.go +++ b/core/container/dockercontroller/dockercontroller_test.go @@ -1,17 +1,7 @@ /* -Copyright IBM Corp. 2016 All Rights Reserved. +Copyright IBM Corp. All Rights Reserved. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: Apache-2.0 */ package dockercontroller @@ -46,7 +36,7 @@ import ( func TestRealPath(t *testing.T) { coreutil.SetupTestConfig() ctxt := context.Background() - dc := NewDockerVM() + dc := NewDockerVM("", "") ccid := ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "simple"}}} reader := getCodeChainBytesInMem() @@ -249,27 +239,73 @@ func Test_Destroy(t *testing.T) { type testCase struct { name string + vm *DockerVM ccid ccintf.CCID formatFunc func(string) (string, error) expectedOutput string } func TestGetVMName(t *testing.T) { - dvm := DockerVM{} - var tc []testCase - - tc = append(tc, - testCase{"mycc", ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "mycc"}}, NetworkID: "dev", PeerID: "peer0", Version: "1.0"}, formatImageName, fmt.Sprintf("%s-%s", "dev-peer0-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("dev-peer0-mycc-1.0"))))}, - testCase{"mycc-nonetworkid", ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "mycc"}}, PeerID: "peer1", Version: "1.0"}, formatImageName, fmt.Sprintf("%s-%s", "peer1-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("peer1-mycc-1.0"))))}, - testCase{"myCC-UCids", ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "myCC"}}, NetworkID: "Dev", PeerID: "Peer0", Version: "1.0"}, formatImageName, fmt.Sprintf("%s-%s", "dev-peer0-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("Dev-Peer0-myCC-1.0"))))}, - testCase{"myCC-idsWithSpecialChars", ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "myCC"}}, NetworkID: "Dev$dev", PeerID: "Peer*0", Version: "1.0"}, formatImageName, fmt.Sprintf("%s-%s", "dev-dev-peer-0-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("Dev$dev-Peer*0-myCC-1.0"))))}, - testCase{"mycc-nopeerid", ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "mycc"}}, NetworkID: "dev", Version: "1.0"}, formatImageName, fmt.Sprintf("%s-%s", "dev-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("dev-mycc-1.0"))))}, - testCase{"myCC-LCids", ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "myCC"}}, NetworkID: "dev", PeerID: "peer0", Version: "1.0"}, formatImageName, fmt.Sprintf("%s-%s", "dev-peer0-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("dev-peer0-myCC-1.0"))))}, - testCase{"myCC-preserveCase", ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "myCC"}}, NetworkID: "Dev", PeerID: "Peer0", Version: "1.0"}, nil, fmt.Sprintf("%s", "Dev-Peer0-myCC-1.0")}, - testCase{"invalidCharsFormatFunction", ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "myCC"}}, NetworkID: "Dev", PeerID: "Peer0", Version: "1.0"}, formatInvalidChars, fmt.Sprintf("%s", "inv-lid-character--")}) + tc := []testCase{ + { + name: "mycc", + vm: &DockerVM{NetworkID: "dev", PeerID: "peer0"}, + ccid: ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "mycc"}}, Version: "1.0"}, + formatFunc: formatImageName, + expectedOutput: fmt.Sprintf("%s-%s", "dev-peer0-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("dev-peer0-mycc-1.0")))), + }, + { + name: "mycc-nonetworkid", + vm: &DockerVM{PeerID: "peer1"}, + ccid: ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "mycc"}}, Version: "1.0"}, + formatFunc: formatImageName, + expectedOutput: fmt.Sprintf("%s-%s", "peer1-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("peer1-mycc-1.0")))), + }, + { + name: "myCC-UCids", + vm: &DockerVM{NetworkID: "Dev", PeerID: "Peer0"}, + ccid: ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "myCC"}}, Version: "1.0"}, + formatFunc: formatImageName, + expectedOutput: fmt.Sprintf("%s-%s", "dev-peer0-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("Dev-Peer0-myCC-1.0")))), + }, + { + name: "myCC-idsWithSpecialChars", + vm: &DockerVM{NetworkID: "Dev$dev", PeerID: "Peer*0"}, + ccid: ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "myCC"}}, Version: "1.0"}, + formatFunc: formatImageName, + expectedOutput: fmt.Sprintf("%s-%s", "dev-dev-peer-0-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("Dev$dev-Peer*0-myCC-1.0")))), + }, + { + name: "mycc-nopeerid", + vm: &DockerVM{NetworkID: "dev"}, + ccid: ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "mycc"}}, Version: "1.0"}, + formatFunc: formatImageName, + expectedOutput: fmt.Sprintf("%s-%s", "dev-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("dev-mycc-1.0")))), + }, + { + name: "myCC-LCids", + vm: &DockerVM{NetworkID: "dev", PeerID: "peer0"}, + ccid: ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "myCC"}}, Version: "1.0"}, + formatFunc: formatImageName, + expectedOutput: fmt.Sprintf("%s-%s", "dev-peer0-mycc-1.0", hex.EncodeToString(util.ComputeSHA256([]byte("dev-peer0-myCC-1.0")))), + }, + { + name: "myCC-preserveCase", + vm: &DockerVM{NetworkID: "Dev", PeerID: "Peer0"}, + ccid: ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "myCC"}}, Version: "1.0"}, + formatFunc: nil, + expectedOutput: fmt.Sprintf("%s", "Dev-Peer0-myCC-1.0")}, + { + name: "invalidCharsFormatFunction", + vm: &DockerVM{NetworkID: "Dev", PeerID: "Peer0"}, + ccid: ccintf.CCID{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeId: &pb.ChaincodeID{Name: "myCC"}}, Version: "1.0"}, + formatFunc: formatInvalidChars, + expectedOutput: fmt.Sprintf("%s", "inv-lid-character--"), + }, + } for _, test := range tc { - name, err := dvm.GetVMName(test.ccid, test.formatFunc) + name, err := test.vm.GetVMName(test.ccid, test.formatFunc) assert.Nil(t, err, "Expected nil error") assert.Equal(t, test.expectedOutput, name, "Unexpected output for test case name: %s", test.name) } diff --git a/peer/node/start.go b/peer/node/start.go index c9bed9589d7..a5a4b6e1615 100644 --- a/peer/node/start.go +++ b/peer/node/start.go @@ -600,7 +600,10 @@ func registerChaincodeSupport(grpcServer *comm.GRPCServer, ccEndpoint string, ca &ccprovider.CCInfoFSImpl{}, aclmgmt.GetACLProvider(), container.NewVMController(map[string]container.VMProvider{ - dockercontroller.ContainerType: dockercontroller.NewProvider(), + dockercontroller.ContainerType: dockercontroller.NewProvider( + viper.GetString("peer.id"), + viper.GetString("peer.networkId"), + ), inproccontroller.ContainerType: ipRegistry, }), sccp,