Merge pull request #27149 from swernli/servicing_fix
Fixing servicing bug by always specifying LayerFolderPath
This commit is contained in:
commit
33ae7d4c19
3 changed files with 24 additions and 14 deletions
|
@ -22,13 +22,22 @@ func (daemon *Daemon) postRunProcessing(container *container.Container, e libcon
|
|||
return err
|
||||
}
|
||||
|
||||
servicingOption := &libcontainerd.ServicingOption{
|
||||
newOpts := []libcontainerd.CreateOption{&libcontainerd.ServicingOption{
|
||||
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
|
||||
// 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)
|
||||
return fmt.Errorf("Post-run update servicing failed: %s", err)
|
||||
}
|
||||
|
|
|
@ -30,10 +30,10 @@ func (daemon *Daemon) getLibcontainerdCreateOptions(container *container.Contain
|
|||
}
|
||||
if hvOpts.IsHyperV {
|
||||
hvOpts.SandboxPath = filepath.Dir(m["dir"])
|
||||
} else {
|
||||
layerOpts.LayerFolderPath = m["dir"]
|
||||
}
|
||||
|
||||
layerOpts.LayerFolderPath = m["dir"]
|
||||
|
||||
// Generate the layer paths of the layer options
|
||||
img, err := daemon.imageStore.Get(container.ImageID)
|
||||
if err != nil {
|
||||
|
|
|
@ -40,15 +40,15 @@ const defaultOwner = "docker"
|
|||
// 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,
|
||||
// where if not populated, is omitted.
|
||||
// +-----------------+--------------------------------------------+--------------------------------------------+
|
||||
// +-----------------+--------------------------------------------+---------------------------------------------------+
|
||||
// | | Isolation=Process | Isolation=Hyper-V |
|
||||
// +-----------------+--------------------------------------------+--------------------------------------------+
|
||||
// +-----------------+--------------------------------------------+---------------------------------------------------+
|
||||
// | 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 |
|
||||
// | SandboxPath | | %root%\windowsfilter |
|
||||
// | HvRuntime | | ImagePath=%root%\BaseLayerID\UtilityVM |
|
||||
// +-----------------+--------------------------------------------+--------------------------------------------+
|
||||
// +-----------------+--------------------------------------------+---------------------------------------------------+
|
||||
//
|
||||
// Isolation=Process example:
|
||||
//
|
||||
|
@ -183,9 +183,10 @@ func (clnt *client) Create(containerID string, checkpoint string, checkpointDir
|
|||
configuration.HvRuntime = &hcsshim.HvRuntime{ImagePath: uvmImagePath}
|
||||
} else {
|
||||
configuration.VolumePath = spec.Root.Path
|
||||
configuration.LayerFolderPath = layerOpt.LayerFolderPath
|
||||
}
|
||||
|
||||
configuration.LayerFolderPath = layerOpt.LayerFolderPath
|
||||
|
||||
for _, layerPath := range layerOpt.LayerPaths {
|
||||
_, filename := filepath.Split(layerPath)
|
||||
g, err := hcsshim.NameToGuid(filename)
|
||||
|
|
Loading…
Reference in a new issue