Merge pull request #31586 from aaronlehmann/digest-pin-context

cluster: Renew the context after communicating with the registry
This commit is contained in:
Victor Vieux 2017-03-14 09:46:15 -07:00 committed by GitHub
commit 08bbd434f5
1 changed files with 20 additions and 0 deletions

View File

@ -122,6 +122,16 @@ func (c *Cluster) CreateService(s types.ServiceSpec, encodedAuth string) (*apity
} else {
logrus.Debugf("creating service using supplied digest reference %s", ctnr.Image)
}
// Replace the context with a fresh one.
// If we timed out while communicating with the
// registry, then "ctx" will already be expired, which
// would cause UpdateService below to fail. Reusing
// "ctx" could make it impossible to create a service
// if the registry is slow or unresponsive.
var cancel func()
ctx, cancel = c.getRequestContext()
defer cancel()
}
r, err := state.controlClient.CreateService(ctx, &swarmapi.CreateServiceRequest{Spec: &serviceSpec})
@ -212,6 +222,16 @@ func (c *Cluster) UpdateService(serviceIDOrName string, version uint64, spec typ
} else {
logrus.Debugf("updating service using supplied digest reference %s", newCtnr.Image)
}
// Replace the context with a fresh one.
// If we timed out while communicating with the
// registry, then "ctx" will already be expired, which
// would cause UpdateService below to fail. Reusing
// "ctx" could make it impossible to update a service
// if the registry is slow or unresponsive.
var cancel func()
ctx, cancel = c.getRequestContext()
defer cancel()
}
var rollback swarmapi.UpdateServiceRequest_Rollback