Skip to content

Commit 3aa4a00

Browse files
author
John Howard
committed
LCOW: Move daemon stores to per platform
Signed-off-by: John Howard <[email protected]>
1 parent 6c33684 commit 3aa4a00

40 files changed

Lines changed: 448 additions & 269 deletions

api/server/backend/build/backend.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
// ImageComponent provides an interface for working with images
1818
type ImageComponent interface {
1919
SquashImage(from string, to string) (string, error)
20-
TagImageWithReference(image.ID, reference.Named) error
20+
TagImageWithReference(image.ID, string, reference.Named) error
2121
}
2222

2323
// Backend provides build functionality to the API router

api/server/backend/build/tag.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package build
33
import (
44
"fmt"
55
"io"
6+
"runtime"
67

78
"github.com/docker/distribution/reference"
89
"github.com/docker/docker/image"
10+
"github.com/docker/docker/pkg/system"
911
"github.com/pkg/errors"
1012
)
1113

@@ -33,7 +35,12 @@ func NewTagger(backend ImageComponent, stdout io.Writer, names []string) (*Tagge
3335
// TagImages creates image tags for the imageID
3436
func (bt *Tagger) TagImages(imageID image.ID) error {
3537
for _, rt := range bt.repoAndTags {
36-
if err := bt.imageComponent.TagImageWithReference(imageID, rt); err != nil {
38+
// TODO @jhowardmsft LCOW support. Will need revisiting.
39+
platform := runtime.GOOS
40+
if platform == "windows" && system.LCOWSupported() {
41+
platform = "linux"
42+
}
43+
if err := bt.imageComponent.TagImageWithReference(imageID, platform, rt); err != nil {
3744
return err
3845
}
3946
fmt.Fprintf(bt.stdout, "Successfully tagged %s\n", reference.FamiliarString(rt))

api/types/types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ type ContainerJSONBase struct {
320320
Name string
321321
RestartCount int
322322
Driver string
323+
Platform string
323324
MountLabel string
324325
ProcessLabel string
325326
AppArmorProfile string

cmd/dockerd/daemon.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -267,12 +267,6 @@ func (cli *DaemonCli) start(opts *daemonOptions) (err error) {
267267

268268
logrus.Info("Daemon has completed initialization")
269269

270-
logrus.WithFields(logrus.Fields{
271-
"version": dockerversion.Version,
272-
"commit": dockerversion.GitCommit,
273-
"graphdriver": d.GraphDriverName(),
274-
}).Info("Docker daemon")
275-
276270
cli.d = d
277271

278272
initRouter(api, d, c)

daemon/build.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package daemon
22

33
import (
44
"io"
5+
"runtime"
56

67
"github.com/Sirupsen/logrus"
78
"github.com/docker/distribution/reference"
@@ -147,7 +148,8 @@ func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID st
147148
image, _ := daemon.GetImage(refOrID)
148149
// TODO: shouldn't we error out if error is different from "not found" ?
149150
if image != nil {
150-
layer, err := newReleasableLayerForImage(image, daemon.layerStore)
151+
// TODO LCOW @jhowardmsft. For now using runtime.GOOS for this, will need enhancing for platform when porting the builder
152+
layer, err := newReleasableLayerForImage(image, daemon.stores[runtime.GOOS].layerStore)
151153
return image, layer, err
152154
}
153155
}
@@ -156,7 +158,8 @@ func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID st
156158
if err != nil {
157159
return nil, nil, err
158160
}
159-
layer, err := newReleasableLayerForImage(image, daemon.layerStore)
161+
// TODO LCOW @jhowardmsft. For now using runtime.GOOS for this, will need enhancing for platform when porting the builder
162+
layer, err := newReleasableLayerForImage(image, daemon.stores[runtime.GOOS].layerStore)
160163
return image, layer, err
161164
}
162165

daemon/cache.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package daemon
22

33
import (
4+
"runtime"
5+
46
"github.com/Sirupsen/logrus"
57
"github.com/docker/docker/builder"
68
"github.com/docker/docker/image/cache"
@@ -9,10 +11,12 @@ import (
911
// MakeImageCache creates a stateful image cache.
1012
func (daemon *Daemon) MakeImageCache(sourceRefs []string) builder.ImageCache {
1113
if len(sourceRefs) == 0 {
12-
return cache.NewLocal(daemon.imageStore)
14+
// TODO @jhowardmsft LCOW. For now, assume it is the OS of the host
15+
return cache.NewLocal(daemon.stores[runtime.GOOS].imageStore)
1316
}
1417

15-
cache := cache.New(daemon.imageStore)
18+
// TODO @jhowardmsft LCOW. For now, assume it is the OS of the host
19+
cache := cache.New(daemon.stores[runtime.GOOS].imageStore)
1620

1721
for _, ref := range sourceRefs {
1822
img, err := daemon.GetImage(ref)

daemon/commit.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -160,26 +160,21 @@ func (daemon *Daemon) Commit(name string, c *backend.ContainerCommitConfig) (str
160160
}()
161161

162162
var parent *image.Image
163-
os := runtime.GOOS
164163
if container.ImageID == "" {
165164
parent = new(image.Image)
166165
parent.RootFS = image.NewRootFS()
167166
} else {
168-
parent, err = daemon.imageStore.Get(container.ImageID)
167+
parent, err = daemon.stores[container.Platform].imageStore.Get(container.ImageID)
169168
if err != nil {
170169
return "", err
171170
}
172-
// To support LCOW, Windows needs to pass the platform in when registering the layer in the store
173-
if runtime.GOOS == "windows" {
174-
os = parent.OS
175-
}
176171
}
177172

178-
l, err := daemon.layerStore.Register(rwTar, parent.RootFS.ChainID(), layer.Platform(os))
173+
l, err := daemon.stores[container.Platform].layerStore.Register(rwTar, rootFS.ChainID(), layer.Platform(container.Platform))
179174
if err != nil {
180175
return "", err
181176
}
182-
defer layer.ReleaseAndLog(daemon.layerStore, l)
177+
defer layer.ReleaseAndLog(daemon.stores[container.Platform].layerStore, l)
183178

184179
containerConfig := c.ContainerConfig
185180
if containerConfig == nil {
@@ -198,13 +193,13 @@ func (daemon *Daemon) Commit(name string, c *backend.ContainerCommitConfig) (str
198193
return "", err
199194
}
200195

201-
id, err := daemon.imageStore.Create(config)
196+
id, err := daemon.stores[container.Platform].imageStore.Create(config)
202197
if err != nil {
203198
return "", err
204199
}
205200

206201
if container.ImageID != "" {
207-
if err := daemon.imageStore.SetParent(id, container.ImageID); err != nil {
202+
if err := daemon.stores[container.Platform].imageStore.SetParent(id, container.ImageID); err != nil {
208203
return "", err
209204
}
210205
}
@@ -223,7 +218,7 @@ func (daemon *Daemon) Commit(name string, c *backend.ContainerCommitConfig) (str
223218
return "", err
224219
}
225220
}
226-
if err := daemon.TagImageWithReference(id, newTag); err != nil {
221+
if err := daemon.TagImageWithReference(id, container.Platform, newTag); err != nil {
227222
return "", err
228223
}
229224
imageRef = reference.FamiliarString(newTag)

daemon/container.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"os"
66
"path/filepath"
7+
"runtime"
78
"time"
89

910
"github.com/docker/docker/api/errors"
@@ -144,8 +145,10 @@ func (daemon *Daemon) newContainer(name string, config *containertypes.Config, h
144145
base.ImageID = imgID
145146
base.NetworkSettings = &network.Settings{IsAnonymousEndpoint: noExplicitName}
146147
base.Name = name
147-
base.Driver = daemon.GraphDriverName()
148-
148+
// TODO @jhowardmsft LCOW - Get it from the platform of the container. For now, assume it is the OS of the host
149+
base.Driver = daemon.GraphDriverName(runtime.GOOS)
150+
// TODO @jhowardmsft LCOW - Similarly on this field. To solve this it will need a CLI/REST change in a subsequent PR during LCOW development
151+
base.Platform = runtime.GOOS
149152
return base, err
150153
}
151154

daemon/create.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ func (daemon *Daemon) generateSecurityOpt(hostConfig *containertypes.HostConfig)
215215
func (daemon *Daemon) setRWLayer(container *container.Container) error {
216216
var layerID layer.ChainID
217217
if container.ImageID != "" {
218-
img, err := daemon.imageStore.Get(container.ImageID)
218+
img, err := daemon.stores[container.Platform].imageStore.Get(container.ImageID)
219219
if err != nil {
220220
return err
221221
}
@@ -228,7 +228,7 @@ func (daemon *Daemon) setRWLayer(container *container.Container) error {
228228
StorageOpt: container.HostConfig.StorageOpt,
229229
}
230230

231-
rwLayer, err := daemon.layerStore.CreateRWLayer(container.ID, layerID, rwLayerOpts)
231+
rwLayer, err := daemon.stores[container.Platform].layerStore.CreateRWLayer(container.ID, layerID, rwLayerOpts)
232232
if err != nil {
233233
return err
234234
}

0 commit comments

Comments
 (0)