From 5115d455e7891facea7a3c38ff233f2b96c7a73c Mon Sep 17 00:00:00 2001 From: John Howard Date: Tue, 20 Jun 2017 10:34:55 -0700 Subject: [PATCH] LCOW: Rework after 33454 merged which refactored daemon/builder interface Signed-off-by: John Howard Upstream-commit: 3a09b56a10960fb740182d2a12e907f2e80b54c8 Component: engine --- components/engine/builder/builder.go | 4 ++-- .../engine/builder/dockerfile/internals.go | 4 ++-- .../builder/dockerfile/mockbackend_test.go | 4 ++-- components/engine/daemon/build.go | 18 +++++++++++------- components/engine/daemon/commit.go | 2 +- 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/components/engine/builder/builder.go b/components/engine/builder/builder.go index 30c1ee69d8..e480601d46 100644 --- a/components/engine/builder/builder.go +++ b/components/engine/builder/builder.go @@ -43,7 +43,7 @@ type Backend interface { // ContainerCreateWorkdir creates the workdir ContainerCreateWorkdir(containerID string) error - CreateImage(config []byte, parent string) (Image, error) + CreateImage(config []byte, parent string, platform string) (Image, error) ImageCacheBuilder } @@ -100,6 +100,6 @@ type Image interface { type ReleaseableLayer interface { Release() error Mount() (string, error) - Commit() (ReleaseableLayer, error) + Commit(platform string) (ReleaseableLayer, error) DiffID() layer.DiffID } diff --git a/components/engine/builder/dockerfile/internals.go b/components/engine/builder/dockerfile/internals.go index b370302490..42d78ec96c 100644 --- a/components/engine/builder/dockerfile/internals.go +++ b/components/engine/builder/dockerfile/internals.go @@ -65,7 +65,7 @@ func (b *Builder) commitContainer(dispatchState *dispatchState, id string, conta } func (b *Builder) exportImage(state *dispatchState, imageMount *imageMount, runConfig *container.Config) error { - newLayer, err := imageMount.Layer().Commit() + newLayer, err := imageMount.Layer().Commit(b.platform) if err != nil { return err } @@ -93,7 +93,7 @@ func (b *Builder) exportImage(state *dispatchState, imageMount *imageMount, runC return errors.Wrap(err, "failed to encode image config") } - exportedImage, err := b.docker.CreateImage(config, state.imageID) + exportedImage, err := b.docker.CreateImage(config, state.imageID, parentImage.OS) if err != nil { return errors.Wrapf(err, "failed to export image") } diff --git a/components/engine/builder/dockerfile/mockbackend_test.go b/components/engine/builder/dockerfile/mockbackend_test.go index 277f24a41d..adc22762e0 100644 --- a/components/engine/builder/dockerfile/mockbackend_test.go +++ b/components/engine/builder/dockerfile/mockbackend_test.go @@ -78,7 +78,7 @@ func (m *MockBackend) MakeImageCache(cacheFrom []string, platform string) builde return nil } -func (m *MockBackend) CreateImage(config []byte, parent string) (builder.Image, error) { +func (m *MockBackend) CreateImage(config []byte, parent string, platform string) (builder.Image, error) { return nil, nil } @@ -121,7 +121,7 @@ func (l *mockLayer) Mount() (string, error) { return "mountPath", nil } -func (l *mockLayer) Commit() (builder.ReleaseableLayer, error) { +func (l *mockLayer) Commit(string) (builder.ReleaseableLayer, error) { return nil, nil } diff --git a/components/engine/daemon/build.go b/components/engine/daemon/build.go index dfc09dcc71..f0b71fdd51 100644 --- a/components/engine/daemon/build.go +++ b/components/engine/daemon/build.go @@ -2,6 +2,7 @@ package daemon import ( "io" + "runtime" "github.com/Sirupsen/logrus" "github.com/docker/distribution/reference" @@ -39,7 +40,7 @@ func (rl *releaseableLayer) Mount() (string, error) { return rl.rwLayer.Mount("") } -func (rl *releaseableLayer) Commit() (builder.ReleaseableLayer, error) { +func (rl *releaseableLayer) Commit(platform string) (builder.ReleaseableLayer, error) { var chainID layer.ChainID if rl.roLayer != nil { chainID = rl.roLayer.ChainID() @@ -50,7 +51,7 @@ func (rl *releaseableLayer) Commit() (builder.ReleaseableLayer, error) { return nil, err } - newLayer, err := rl.layerStore.Register(stream, chainID) + newLayer, err := rl.layerStore.Register(stream, chainID, layer.Platform(platform)) if err != nil { return nil, err } @@ -139,7 +140,7 @@ func (daemon *Daemon) pullForBuilder(ctx context.Context, name string, authConfi // leaking of layers. func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID string, opts backend.GetImageAndLayerOptions) (builder.Image, builder.ReleaseableLayer, error) { if refOrID == "" { - layer, err := newReleasableLayerForImage(nil, daemon.layerStore) + layer, err := newReleasableLayerForImage(nil, daemon.stores[opts.Platform].layerStore) return nil, layer, err } @@ -163,19 +164,22 @@ func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID st // CreateImage creates a new image by adding a config and ID to the image store. // This is similar to LoadImage() except that it receives JSON encoded bytes of // an image instead of a tar archive. -func (daemon *Daemon) CreateImage(config []byte, parent string) (builder.Image, error) { - id, err := daemon.imageStore.Create(config) +func (daemon *Daemon) CreateImage(config []byte, parent string, platform string) (builder.Image, error) { + if platform == "" { + platform = runtime.GOOS + } + id, err := daemon.stores[platform].imageStore.Create(config) if err != nil { return nil, errors.Wrapf(err, "failed to create image") } if parent != "" { - if err := daemon.imageStore.SetParent(id, image.ID(parent)); err != nil { + if err := daemon.stores[platform].imageStore.SetParent(id, image.ID(parent)); err != nil { return nil, errors.Wrapf(err, "failed to set parent %s", parent) } } - return daemon.imageStore.Get(id) + return daemon.stores[platform].imageStore.Get(id) } // IDMappings returns uid/gid mappings for the builder diff --git a/components/engine/daemon/commit.go b/components/engine/daemon/commit.go index adf253a38c..084f488583 100644 --- a/components/engine/daemon/commit.go +++ b/components/engine/daemon/commit.go @@ -170,7 +170,7 @@ func (daemon *Daemon) Commit(name string, c *backend.ContainerCommitConfig) (str } } - l, err := daemon.stores[container.Platform].layerStore.Register(rwTar, rootFS.ChainID(), layer.Platform(container.Platform)) + l, err := daemon.stores[container.Platform].layerStore.Register(rwTar, parent.RootFS.ChainID(), layer.Platform(container.Platform)) if err != nil { return "", err }