1
0
mirror of https://github.com/docker/cli.git synced 2026-01-13 18:22:35 +03:00

Fix failure to get containers when deleting a layer

Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: d4095a5902b62181d49ef07db18610975cb49d08
Component: engine
This commit is contained in:
Darren Stahl
2016-11-10 14:07:11 -08:00
parent 5c8a6f6329
commit 9a8c3a6932

View File

@@ -17,6 +17,7 @@ import (
"strings"
"sync"
"syscall"
"time"
"unsafe"
"github.com/Microsoft/go-winio"
@@ -260,10 +261,29 @@ func (d *Driver) Remove(id string) error {
return err
}
// Get and terminate any template VMs that are currently using the layer
computeSystems, err := hcsshim.GetContainers(hcsshim.ComputeSystemQuery{})
if err != nil {
return err
// This retry loop is due to a bug in Windows (Internal bug #9432268)
// if GetContainers fails with ErrVmcomputeOperationInvalidState
// it is a transient error. Retry until it succeeds.
var computeSystems []hcsshim.ContainerProperties
retryCount := 0
for {
// Get and terminate any template VMs that are currently using the layer
computeSystems, err = hcsshim.GetContainers(hcsshim.ComputeSystemQuery{})
if err != nil {
if err == hcsshim.ErrVmcomputeOperationInvalidState {
if retryCount >= 5 {
// If we are unable to get the list of containers
// go ahead and attempt to delete the layer anyway
// as it will most likely work.
break
}
retryCount++
time.Sleep(2 * time.Second)
continue
}
return err
}
break
}
for _, computeSystem := range computeSystems {