Skip to content

Commit

Permalink
LCOW: Rework after 33454 merged which refactored daemon/builder inter…
Browse files Browse the repository at this point in the history
…face

Signed-off-by: John Howard <[email protected]>
  • Loading branch information
John Howard committed Jun 21, 2017
1 parent b21d9ab commit 3a09b56
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 14 deletions.
4 changes: 2 additions & 2 deletions builder/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down Expand Up @@ -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
}
4 changes: 2 additions & 2 deletions builder/dockerfile/internals.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down Expand Up @@ -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")
}
Expand Down
4 changes: 2 additions & 2 deletions builder/dockerfile/mockbackend_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down Expand Up @@ -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
}

Expand Down
18 changes: 11 additions & 7 deletions daemon/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package daemon

import (
"io"
"runtime"

"github.com/Sirupsen/logrus"
"github.com/docker/distribution/reference"
Expand Down Expand Up @@ -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()
Expand All @@ -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
}
Expand Down Expand Up @@ -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
}

Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion daemon/commit.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down

0 comments on commit 3a09b56

Please sign in to comment.