Merge pull request #27149 from swernli/servicing_fix

Fixing servicing bug by always specifying LayerFolderPath
This commit is contained in:
Alexander Morozov 2016-10-05 13:21:47 -07:00 committed by GitHub
commit 33ae7d4c19
3 changed files with 24 additions and 14 deletions

View file

@ -22,13 +22,22 @@ func (daemon *Daemon) postRunProcessing(container *container.Container, e libcon
return err return err
} }
servicingOption := &libcontainerd.ServicingOption{ newOpts := []libcontainerd.CreateOption{&libcontainerd.ServicingOption{
IsServicing: true, IsServicing: true,
}}
copts, err := daemon.getLibcontainerdCreateOptions(container)
if err != nil {
return err
}
if copts != nil {
newOpts = append(newOpts, *copts...)
} }
// Create a new servicing container, which will start, complete the update, and merge back the // Create a new servicing container, which will start, complete the update, and merge back the
// results if it succeeded, all as part of the below function call. // results if it succeeded, all as part of the below function call.
if err := daemon.containerd.Create((container.ID + "_servicing"), "", "", *spec, servicingOption); err != nil { if err := daemon.containerd.Create((container.ID + "_servicing"), "", "", *spec, newOpts...); err != nil {
container.SetExitCode(-1) container.SetExitCode(-1)
return fmt.Errorf("Post-run update servicing failed: %s", err) return fmt.Errorf("Post-run update servicing failed: %s", err)
} }

View file

@ -30,10 +30,10 @@ func (daemon *Daemon) getLibcontainerdCreateOptions(container *container.Contain
} }
if hvOpts.IsHyperV { if hvOpts.IsHyperV {
hvOpts.SandboxPath = filepath.Dir(m["dir"]) hvOpts.SandboxPath = filepath.Dir(m["dir"])
} else {
layerOpts.LayerFolderPath = m["dir"]
} }
layerOpts.LayerFolderPath = m["dir"]
// Generate the layer paths of the layer options // Generate the layer paths of the layer options
img, err := daemon.imageStore.Get(container.ImageID) img, err := daemon.imageStore.Get(container.ImageID)
if err != nil { if err != nil {

View file

@ -40,15 +40,15 @@ const defaultOwner = "docker"
// Create is the entrypoint to create a container from a spec, and if successfully // Create is the entrypoint to create a container from a spec, and if successfully
// created, start it too. Table below shows the fields required for HCS JSON calling parameters, // created, start it too. Table below shows the fields required for HCS JSON calling parameters,
// where if not populated, is omitted. // where if not populated, is omitted.
// +-----------------+--------------------------------------------+--------------------------------------------+ // +-----------------+--------------------------------------------+---------------------------------------------------+
// | | Isolation=Process | Isolation=Hyper-V | // | | Isolation=Process | Isolation=Hyper-V |
// +-----------------+--------------------------------------------+--------------------------------------------+ // +-----------------+--------------------------------------------+---------------------------------------------------+
// | VolumePath | \\?\\Volume{GUIDa} | | // | VolumePath | \\?\\Volume{GUIDa} | |
// | LayerFolderPath | %root%\windowsfilter\containerID | | // | LayerFolderPath | %root%\windowsfilter\containerID | %root%\windowsfilter\containerID (servicing only) |
// | Layers[] | ID=GUIDb;Path=%root%\windowsfilter\layerID | ID=GUIDb;Path=%root%\windowsfilter\layerID | // | Layers[] | ID=GUIDb;Path=%root%\windowsfilter\layerID | ID=GUIDb;Path=%root%\windowsfilter\layerID |
// | SandboxPath | | %root%\windowsfilter | // | SandboxPath | | %root%\windowsfilter |
// | HvRuntime | | ImagePath=%root%\BaseLayerID\UtilityVM | // | HvRuntime | | ImagePath=%root%\BaseLayerID\UtilityVM |
// +-----------------+--------------------------------------------+--------------------------------------------+ // +-----------------+--------------------------------------------+---------------------------------------------------+
// //
// Isolation=Process example: // Isolation=Process example:
// //
@ -183,9 +183,10 @@ func (clnt *client) Create(containerID string, checkpoint string, checkpointDir
configuration.HvRuntime = &hcsshim.HvRuntime{ImagePath: uvmImagePath} configuration.HvRuntime = &hcsshim.HvRuntime{ImagePath: uvmImagePath}
} else { } else {
configuration.VolumePath = spec.Root.Path configuration.VolumePath = spec.Root.Path
configuration.LayerFolderPath = layerOpt.LayerFolderPath
} }
configuration.LayerFolderPath = layerOpt.LayerFolderPath
for _, layerPath := range layerOpt.LayerPaths { for _, layerPath := range layerOpt.LayerPaths {
_, filename := filepath.Split(layerPath) _, filename := filepath.Split(layerPath)
g, err := hcsshim.NameToGuid(filename) g, err := hcsshim.NameToGuid(filename)