Skip to content

Commit 134d3b0

Browse files
author
Jason Yellick
committed
FAB-16158 Remove ContainerInfo as dep
Because package info was passed as a ChaincodeContainerInfo struct, it managed to find its way through most of the container code. However, this struct is ill suited for the realities of building/launching containers, and mostly duplicates the package metadata. This CR switches to using the package metadata and removes the container info as a dependency. Change-Id: I983c69d4296f2b4a41c712eb276b5eade4205d82 Signed-off-by: Jason Yellick <jyellick@us.ibm.com>
1 parent 14c60c4 commit 134d3b0

File tree

10 files changed

+101
-124
lines changed

10 files changed

+101
-124
lines changed

core/chaincode/platforms/builder.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@ import (
1010
"io"
1111

1212
docker "github.com/fsouza/go-dockerclient"
13-
"github.com/hyperledger/fabric/core/common/ccprovider"
1413
)
1514

1615
type Builder struct {
1716
Registry *Registry
1817
Client *docker.Client
1918
}
2019

21-
func (b *Builder) GenerateDockerBuild(ccci *ccprovider.ChaincodeContainerInfo, codePackage io.Reader) (io.Reader, error) {
22-
return b.Registry.GenerateDockerBuild(ccci.Type, ccci.Path, codePackage, b.Client)
20+
func (b *Builder) GenerateDockerBuild(ccType, path string, codePackage io.Reader) (io.Reader, error) {
21+
return b.Registry.GenerateDockerBuild(ccType, path, codePackage, b.Client)
2322
}

core/container/container.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"github.com/hyperledger/fabric/common/flogging"
1414
"github.com/hyperledger/fabric/core/chaincode/persistence"
1515
pintf "github.com/hyperledger/fabric/core/chaincode/persistence/intf"
16-
"github.com/hyperledger/fabric/core/common/ccprovider"
1716
"github.com/hyperledger/fabric/core/container/ccintf"
1817

1918
"github.com/pkg/errors"
@@ -25,7 +24,7 @@ var vmLogger = flogging.MustGetLogger("container")
2524

2625
//VM is an abstract virtual image for supporting arbitrary virual machines
2726
type VM interface {
28-
Build(ccci *ccprovider.ChaincodeContainerInfo, codePackageStream io.Reader) (Instance, error)
27+
Build(ccid ccintf.CCID, metadata *persistence.ChaincodePackageMetadata, codePackageStream io.Reader) (Instance, error)
2928
}
3029

3130
//go:generate counterfeiter -o mock/instance.go --fake-name Instance . Instance
@@ -95,16 +94,10 @@ func (r *Router) Build(ccid ccintf.CCID) error {
9594
return errors.WithMessage(err, "get chaincode package for external build failed")
9695
}
9796

98-
ccci := &ccprovider.ChaincodeContainerInfo{
99-
Path: metadata.Path,
100-
Type: metadata.Type,
101-
PackageID: packageID,
102-
}
103-
10497
var instance Instance
10598
var externalErr error
10699
if r.ExternalVM != nil {
107-
instance, externalErr = r.ExternalVM.Build(ccci, codeStream)
100+
instance, externalErr = r.ExternalVM.Build(ccid, metadata, codeStream)
108101
codeStream.Close()
109102
}
110103

@@ -113,7 +106,7 @@ func (r *Router) Build(ccid ccintf.CCID) error {
113106
if err != nil {
114107
return errors.WithMessage(err, "get chaincode package for docker build failed")
115108
}
116-
instance, err = r.DockerVM.Build(ccci, codeStream)
109+
instance, err = r.DockerVM.Build(ccid, metadata, codeStream)
117110
codeStream.Close()
118111
}
119112

core/container/container_test.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
. "github.com/onsi/gomega"
1515

1616
"github.com/hyperledger/fabric/core/chaincode/persistence"
17-
"github.com/hyperledger/fabric/core/common/ccprovider"
1817
"github.com/hyperledger/fabric/core/container"
1918
"github.com/hyperledger/fabric/core/container/ccintf"
2019
"github.com/hyperledger/fabric/core/container/mock"
@@ -62,11 +61,11 @@ var _ = Describe("Container", func() {
6261
Expect(err).NotTo(HaveOccurred())
6362
Expect(fakeDockerVM.BuildCallCount()).To(Equal(0))
6463
Expect(fakeExternalVM.BuildCallCount()).To(Equal(1))
65-
ccci, codeStream := fakeExternalVM.BuildArgsForCall(0)
66-
Expect(ccci).To(Equal(&ccprovider.ChaincodeContainerInfo{
67-
PackageID: "package-id",
68-
Type: "package-type",
69-
Path: "package-path",
64+
ccid, md, codeStream := fakeExternalVM.BuildArgsForCall(0)
65+
Expect(ccid).To(Equal(ccintf.CCID("package-id")))
66+
Expect(md).To(Equal(&persistence.ChaincodePackageMetadata{
67+
Type: "package-type",
68+
Path: "package-path",
7069
}))
7170
codePackage, err := ioutil.ReadAll(codeStream)
7271
Expect(err).NotTo(HaveOccurred())
@@ -96,11 +95,11 @@ var _ = Describe("Container", func() {
9695
Expect(err).To(MatchError("failed external (fake-external-error) and docker build: fake-docker-error"))
9796
Expect(fakeExternalVM.BuildCallCount()).To(Equal(1))
9897
Expect(fakeDockerVM.BuildCallCount()).To(Equal(1))
99-
ccci, codeStream := fakeDockerVM.BuildArgsForCall(0)
100-
Expect(ccci).To(Equal(&ccprovider.ChaincodeContainerInfo{
101-
PackageID: "package-id",
102-
Type: "package-type",
103-
Path: "package-path",
98+
ccid, md, codeStream := fakeDockerVM.BuildArgsForCall(0)
99+
Expect(ccid).To(Equal(ccintf.CCID("package-id")))
100+
Expect(md).To(Equal(&persistence.ChaincodePackageMetadata{
101+
Type: "package-type",
102+
Path: "package-path",
104103
}))
105104
codePackage, err := ioutil.ReadAll(codeStream)
106105
Expect(err).NotTo(HaveOccurred())

core/container/dockercontroller/dockercontroller.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
docker "github.com/fsouza/go-dockerclient"
2525
"github.com/hyperledger/fabric/common/flogging"
2626
"github.com/hyperledger/fabric/common/util"
27-
"github.com/hyperledger/fabric/core/common/ccprovider"
27+
"github.com/hyperledger/fabric/core/chaincode/persistence"
2828
"github.com/hyperledger/fabric/core/container"
2929
"github.com/hyperledger/fabric/core/container/ccintf"
3030
pb "github.com/hyperledger/fabric/protos/peer"
@@ -73,7 +73,7 @@ type dockerClient interface {
7373
}
7474

7575
type PlatformBuilder interface {
76-
GenerateDockerBuild(ccci *ccprovider.ChaincodeContainerInfo, codePackage io.Reader) (io.Reader, error)
76+
GenerateDockerBuild(ccType, path string, codePackage io.Reader) (io.Reader, error)
7777
}
7878

7979
type ContainerInstance struct {
@@ -172,8 +172,7 @@ func (vm *DockerVM) buildImage(ccid ccintf.CCID, reader io.Reader) error {
172172
}
173173

174174
// Build is responsible for building an image if it does not already exist.
175-
func (vm *DockerVM) Build(ccci *ccprovider.ChaincodeContainerInfo, codePackage io.Reader) (container.Instance, error) {
176-
ccid := ccintf.New(ccci.PackageID)
175+
func (vm *DockerVM) Build(ccid ccintf.CCID, metadata *persistence.ChaincodePackageMetadata, codePackage io.Reader) (container.Instance, error) {
177176
imageName, err := vm.GetVMNameForDocker(ccid)
178177
if err != nil {
179178
return nil, err
@@ -182,15 +181,12 @@ func (vm *DockerVM) Build(ccci *ccprovider.ChaincodeContainerInfo, codePackage i
182181
// This is an awkward translation, but better here in a future dead path
183182
// than elsewhere. The old enum types are capital, but at least as implemented
184183
// lifecycle tools seem to allow type to be set lower case.
185-
ccType := strings.ToUpper(ccci.Type)
186-
187-
ccciTranslated := *ccci
188-
ccciTranslated.Type = ccType
184+
ccType := strings.ToUpper(metadata.Type)
189185

190186
_, err = vm.Client.InspectImage(imageName)
191187
switch err {
192188
case docker.ErrNoSuchImage:
193-
dockerfileReader, err := vm.PlatformBuilder.GenerateDockerBuild(&ccciTranslated, codePackage)
189+
dockerfileReader, err := vm.PlatformBuilder.GenerateDockerBuild(ccType, metadata.Path, codePackage)
194190
if err != nil {
195191
return nil, errors.Wrap(err, "platform builder failed")
196192
}

core/container/dockercontroller/dockercontroller_test.go

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"github.com/hyperledger/fabric/common/metrics/disabled"
2525
"github.com/hyperledger/fabric/common/metrics/metricsfakes"
2626
"github.com/hyperledger/fabric/common/util"
27-
"github.com/hyperledger/fabric/core/common/ccprovider"
27+
"github.com/hyperledger/fabric/core/chaincode/persistence"
2828
"github.com/hyperledger/fabric/core/container/ccintf"
2929
"github.com/hyperledger/fabric/core/container/dockercontroller/mock"
3030
pb "github.com/hyperledger/fabric/protos/peer"
@@ -51,12 +51,9 @@ func TestIntegrationPath(t *testing.T) {
5151
}
5252
ccid := ccintf.CCID("simple")
5353

54-
instance, err := dc.Build(&ccprovider.ChaincodeContainerInfo{
55-
PackageID: "simple",
56-
Type: "type",
57-
Path: "path",
58-
Name: "name",
59-
Version: "version",
54+
instance, err := dc.Build("simple", &persistence.ChaincodePackageMetadata{
55+
Type: "type",
56+
Path: "path",
6057
}, bytes.NewBuffer([]byte("code-package")))
6158
require.NoError(t, err)
6259

@@ -409,12 +406,9 @@ func Test_buildImageFailure(t *testing.T) {
409406

410407
func TestBuild(t *testing.T) {
411408
buildMetrics := NewBuildMetrics(&disabled.Provider{})
412-
ccci := &ccprovider.ChaincodeContainerInfo{
413-
PackageID: "chaincode-name:chaincode-version",
414-
Name: "name",
415-
Version: "version",
416-
Type: "type",
417-
Path: "path",
409+
md := &persistence.ChaincodePackageMetadata{
410+
Type: "type",
411+
Path: "path",
418412
}
419413

420414
t.Run("when the image does not exist", func(t *testing.T) {
@@ -425,18 +419,15 @@ func TestBuild(t *testing.T) {
425419
fakePlatformBuilder.GenerateDockerBuildReturns(&bytes.Buffer{}, nil)
426420

427421
dvm := &DockerVM{Client: client, BuildMetrics: buildMetrics, PlatformBuilder: fakePlatformBuilder}
428-
_, err := dvm.Build(ccci, bytes.NewBuffer([]byte("code-package")))
422+
_, err := dvm.Build("chaincode-name:chaincode-version", md, bytes.NewBuffer([]byte("code-package")))
429423
assert.NoError(t, err, "should have built successfully")
430424

431425
assert.Equal(t, 1, client.BuildImageCallCount())
432426

433427
require.Equal(t, 1, fakePlatformBuilder.GenerateDockerBuildCallCount())
434-
ccci, codePackageStream := fakePlatformBuilder.GenerateDockerBuildArgsForCall(0)
435-
assert.Equal(t, "chaincode-name:chaincode-version", string(ccci.PackageID))
436-
assert.Equal(t, "TYPE", ccci.Type)
437-
assert.Equal(t, "path", ccci.Path)
438-
assert.Equal(t, "name", ccci.Name)
439-
assert.Equal(t, "version", ccci.Version)
428+
ccType, path, codePackageStream := fakePlatformBuilder.GenerateDockerBuildArgsForCall(0)
429+
assert.Equal(t, "TYPE", ccType)
430+
assert.Equal(t, "path", path)
440431
codePackage, err := ioutil.ReadAll(codePackageStream)
441432
require.NoError(t, err)
442433
assert.Equal(t, []byte("code-package"), codePackage)
@@ -448,7 +439,7 @@ func TestBuild(t *testing.T) {
448439
client.InspectImageReturns(nil, errors.New("inspecting-image-fails"))
449440

450441
dvm := &DockerVM{Client: client, BuildMetrics: buildMetrics}
451-
_, err := dvm.Build(ccci, bytes.NewBuffer([]byte("code-package")))
442+
_, err := dvm.Build("chaincode-name:chaincode-version", md, bytes.NewBuffer([]byte("code-package")))
452443
assert.EqualError(t, err, "docker image inspection failed: inspecting-image-fails")
453444

454445
assert.Equal(t, 0, client.BuildImageCallCount())
@@ -458,7 +449,7 @@ func TestBuild(t *testing.T) {
458449
client := &mock.DockerClient{}
459450

460451
dvm := &DockerVM{Client: client, BuildMetrics: buildMetrics}
461-
_, err := dvm.Build(ccci, bytes.NewBuffer([]byte("code-package")))
452+
_, err := dvm.Build("chaincode-name:chaincode-version", md, bytes.NewBuffer([]byte("code-package")))
462453
assert.NoError(t, err)
463454

464455
assert.Equal(t, 0, client.BuildImageCallCount())
@@ -473,7 +464,7 @@ func TestBuild(t *testing.T) {
473464
fakePlatformBuilder.GenerateDockerBuildReturns(nil, errors.New("fake-builder-error"))
474465

475466
dvm := &DockerVM{Client: client, BuildMetrics: buildMetrics, PlatformBuilder: fakePlatformBuilder}
476-
_, err := dvm.Build(ccci, bytes.NewBuffer([]byte("code-package")))
467+
_, err := dvm.Build("chaincode-name:chaincode-version", md, bytes.NewBuffer([]byte("code-package")))
477468
assert.Equal(t, 1, client.InspectImageCallCount())
478469
assert.Equal(t, 1, fakePlatformBuilder.GenerateDockerBuildCallCount())
479470
assert.Equal(t, 0, client.BuildImageCallCount())
@@ -488,7 +479,7 @@ func TestBuild(t *testing.T) {
488479
fakePlatformBuilder := &mock.PlatformBuilder{}
489480

490481
dvm := &DockerVM{Client: client, BuildMetrics: buildMetrics, PlatformBuilder: fakePlatformBuilder}
491-
_, err := dvm.Build(ccci, bytes.NewBuffer([]byte("code-package")))
482+
_, err := dvm.Build("chaincode-name:chaincode-version", md, bytes.NewBuffer([]byte("code-package")))
492483
assert.Equal(t, 1, client.InspectImageCallCount())
493484
assert.Equal(t, 1, client.BuildImageCallCount())
494485
assert.EqualError(t, err, "docker image build failed: no-build-for-you")

core/container/dockercontroller/mock/platform_builder.go

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

0 commit comments

Comments
 (0)