diff --git a/integration-cli/daemon_swarm.go b/integration-cli/daemon_swarm.go index 3d9357295c..1be4fc9bb7 100644 --- a/integration-cli/daemon_swarm.go +++ b/integration-cli/daemon_swarm.go @@ -354,3 +354,17 @@ func (d *SwarmDaemon) checkLeader(c *check.C) (interface{}, check.CommentInterfa } return fmt.Errorf("no leader"), check.Commentf("could not find leader") } + +func (d *SwarmDaemon) cmdRetryOutOfSequence(args ...string) (string, error) { + for i := 0; ; i++ { + out, err := d.Cmd(args...) + if err != nil { + if strings.Contains(err.Error(), "update out of sequence") { + if i < 10 { + continue + } + } + } + return out, err + } +} diff --git a/integration-cli/docker_cli_swarm_test.go b/integration-cli/docker_cli_swarm_test.go index f454baee7c..bf9cfb72b4 100644 --- a/integration-cli/docker_cli_swarm_test.go +++ b/integration-cli/docker_cli_swarm_test.go @@ -207,13 +207,13 @@ func (s *DockerSwarmSuite) TestSwarmPublishAdd(c *check.C) { out, err = d.Cmd("service", "update", "--publish-add", "80:80", name) c.Assert(err, checker.IsNil) - out, err = d.Cmd("service", "update", "--publish-add", "80:80", name) + out, err = d.cmdRetryOutOfSequence("service", "update", "--publish-add", "80:80", name) c.Assert(err, checker.IsNil) - out, err = d.Cmd("service", "update", "--publish-add", "80:80", "--publish-add", "80:20", name) + out, err = d.cmdRetryOutOfSequence("service", "update", "--publish-add", "80:80", "--publish-add", "80:20", name) c.Assert(err, checker.NotNil) - out, err = d.Cmd("service", "update", "--publish-add", "80:20", name) + out, err = d.cmdRetryOutOfSequence("service", "update", "--publish-add", "80:20", name) c.Assert(err, checker.IsNil) out, err = d.Cmd("service", "inspect", "--format", "{{ .Spec.EndpointSpec.Ports }}", name)