Update daemon to new swarmkit

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
(cherry picked from commit a83bba467a8bd24924b1a0cf55b954ac49937b5b)
This commit is contained in:
Tonis Tiigi 2016-06-15 22:41:43 -07:00 committed by Tibor Vass
parent 528f3ab668
commit 01c5b208e8
3 changed files with 27 additions and 26 deletions

View File

@ -111,7 +111,7 @@ func New(config Config) (*Cluster, error) {
select { select {
case <-time.After(swarmConnectTimeout): case <-time.After(swarmConnectTimeout):
logrus.Errorf("swarm component could not be started before timeout was reached") logrus.Errorf("swarm component could not be started before timeout was reached")
case <-n.Ready(context.Background()): case <-n.Ready():
case <-ctx.Done(): case <-ctx.Done():
} }
if ctx.Err() != nil { if ctx.Err() != nil {
@ -213,7 +213,7 @@ func (c *Cluster) startNewNode(forceNewCluster bool, listenAddr, joinAddr, secre
go func() { go func() {
select { select {
case <-node.Ready(context.Background()): case <-node.Ready():
c.Lock() c.Lock()
c.reconnectDelay = initialReconnectDelay c.reconnectDelay = initialReconnectDelay
c.Unlock() c.Unlock()
@ -273,7 +273,7 @@ func (c *Cluster) Init(req types.InitRequest) (string, error) {
c.Unlock() c.Unlock()
select { select {
case <-n.Ready(context.Background()): case <-n.Ready():
if err := initAcceptancePolicy(n, req.Spec.AcceptancePolicy); err != nil { if err := initAcceptancePolicy(n, req.Spec.AcceptancePolicy); err != nil {
return "", err return "", err
} }
@ -319,7 +319,7 @@ func (c *Cluster) Join(req types.JoinRequest) error {
return fmt.Errorf("Timeout reached before node was joined. Your cluster settings may be preventing this node from automatically joining. To accept this node into cluster run `docker node accept %v` in an existing cluster manager", nodeid) return fmt.Errorf("Timeout reached before node was joined. Your cluster settings may be preventing this node from automatically joining. To accept this node into cluster run `docker node accept %v` in an existing cluster manager", nodeid)
} }
return ErrSwarmJoinTimeoutReached return ErrSwarmJoinTimeoutReached
case <-n.Ready(context.Background()): case <-n.Ready():
go c.reconnectOnFailure(ctx) go c.reconnectOnFailure(ctx)
return nil return nil
case <-ctx.Done(): case <-ctx.Done():

View File

@ -39,7 +39,7 @@ func newContainerAdapter(b executorpkg.Backend, task *api.Task) (*containerAdapt
func (c *containerAdapter) pullImage(ctx context.Context) error { func (c *containerAdapter) pullImage(ctx context.Context) error {
// if the image needs to be pulled, the auth config will be retrieved and updated // if the image needs to be pulled, the auth config will be retrieved and updated
encodedAuthConfig := c.container.task.ServiceAnnotations.Labels[fmt.Sprintf("%v.registryauth", systemLabelPrefix)] encodedAuthConfig := c.container.spec().RegistryAuth
authConfig := &types.AuthConfig{} authConfig := &types.AuthConfig{}
if encodedAuthConfig != "" { if encodedAuthConfig != "" {

View File

@ -2,13 +2,13 @@ package container
import ( import (
"fmt" "fmt"
"strings"
executorpkg "github.com/docker/docker/daemon/cluster/executor" executorpkg "github.com/docker/docker/daemon/cluster/executor"
"github.com/docker/engine-api/types" "github.com/docker/engine-api/types"
"github.com/docker/swarmkit/agent/exec" "github.com/docker/swarmkit/agent/exec"
"github.com/docker/swarmkit/api" "github.com/docker/swarmkit/api"
"github.com/docker/swarmkit/log" "github.com/docker/swarmkit/log"
"github.com/pkg/errors"
"golang.org/x/net/context" "golang.org/x/net/context"
) )
@ -84,31 +84,32 @@ func (r *controller) Prepare(ctx context.Context) error {
return err return err
} }
for { if err := r.adapter.pullImage(ctx); err != nil {
if err := r.checkClosed(); err != nil { // NOTE(stevvooe): We always try to pull the image to make sure we have
return err // the most up to date version. This will return an error, but we only
} // log it. If the image truly doesn't exist, the create below will
if err := r.adapter.create(ctx, r.backend); err != nil { // error out.
if isContainerCreateNameConflict(err) { //
if _, err := r.adapter.inspect(ctx); err != nil { // This gives us some nice behavior where we use up to date versions of
return err // mutable tags, but will still run if the old image is available but a
} // registry is down.
//
// If you don't want this behavior, lock down your image to an
// immutable tag or digest.
log.G(ctx).WithError(err).Error("pulling image failed")
}
// container is already created. success! if err := r.adapter.create(ctx, r.backend); err != nil {
return exec.ErrTaskPrepared if isContainerCreateNameConflict(err) {
} if _, err := r.adapter.inspect(ctx); err != nil {
if !strings.Contains(err.Error(), "No such image") { // todo: better error detection
return err
}
if err := r.adapter.pullImage(ctx); err != nil {
return err return err
} }
continue // retry to create the container // container is already created. success!
return exec.ErrTaskPrepared
} }
break return err
} }
return nil return nil
@ -135,7 +136,7 @@ func (r *controller) Start(ctx context.Context) error {
} }
if err := r.adapter.start(ctx); err != nil { if err := r.adapter.start(ctx); err != nil {
return err return errors.Wrap(err, "starting container failed")
} }
return nil return nil