Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions manager/orchestrator/restart.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
)

const defaultOldTaskTimeout = time.Minute
const defaultRestartDelay = 5 * time.Second

type restartedInstance struct {
timestamp time.Time
Expand Down Expand Up @@ -81,12 +82,16 @@ func (r *RestartSupervisor) Restart(ctx context.Context, tx store.Tx, service *a

n := store.GetNode(tx, t.NodeID)

restartTask.DesiredState = api.TaskStateReady
restartTask.DesiredState = api.TaskStateAccepted

var restartDelay time.Duration
// Restart delay does not applied to drained nodes
if service.Spec.Restart != nil && service.Spec.Restart.Delay != 0 && (n == nil || n.Spec.Availability != api.NodeAvailabilityDrain) {
restartDelay = service.Spec.Restart.Delay
if n == nil || n.Spec.Availability != api.NodeAvailabilityDrain {
if service.Spec.Restart != nil && service.Spec.Restart.Delay != 0 {
restartDelay = service.Spec.Restart.Delay
} else {
restartDelay = defaultRestartDelay
}
}

waitStop := true
Expand Down
20 changes: 10 additions & 10 deletions manager/orchestrator/restart_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ func TestOrchestratorRestartOnAny(t *testing.T) {
},
Restart: &api.RestartPolicy{
Condition: api.RestartOnAny,
Delay: 1,
},
},
}
Expand Down Expand Up @@ -137,6 +138,7 @@ func TestOrchestratorRestartOnFailure(t *testing.T) {
},
Restart: &api.RestartPolicy{
Condition: api.RestartOnFailure,
Delay: 1,
},
},
}
Expand Down Expand Up @@ -173,7 +175,7 @@ func TestOrchestratorRestartOnFailure(t *testing.T) {

observedTask3 := watchTaskCreate(t, watch)
assert.Equal(t, observedTask3.Status.State, api.TaskStateNew)
assert.Equal(t, observedTask3.DesiredState, api.TaskStateReady)
assert.Equal(t, observedTask3.DesiredState, api.TaskStateAccepted)
assert.Equal(t, observedTask3.ServiceAnnotations.Name, "name1")

expectCommit(t, watch)
Expand Down Expand Up @@ -361,7 +363,7 @@ func TestOrchestratorRestartDelay(t *testing.T) {
observedTask3 := watchTaskCreate(t, watch)
expectCommit(t, watch)
assert.Equal(t, observedTask3.Status.State, api.TaskStateNew)
assert.Equal(t, observedTask3.DesiredState, api.TaskStateReady)
assert.Equal(t, observedTask3.DesiredState, api.TaskStateAccepted)
assert.Equal(t, observedTask3.ServiceAnnotations.Name, "name1")

observedTask4 := watchTaskUpdate(t, watch)
Expand All @@ -370,7 +372,7 @@ func TestOrchestratorRestartDelay(t *testing.T) {
// At least 100 ms should have elapsed. Only check the lower bound,
// because the system may be slow and it could have taken longer.
if after.Sub(before) < 100*time.Millisecond {
t.Fatal("restart delay should have elapsed")
t.Fatalf("restart delay should have elapsed. Got: %v", after.Sub(before))
}

assert.Equal(t, observedTask4.Status.State, api.TaskStateNew)
Expand Down Expand Up @@ -446,7 +448,7 @@ func TestOrchestratorRestartMaxAttempts(t *testing.T) {
observedTask3 := watchTaskCreate(t, watch)
expectCommit(t, watch)
assert.Equal(t, observedTask3.Status.State, api.TaskStateNew)
assert.Equal(t, observedTask3.DesiredState, api.TaskStateReady)
assert.Equal(t, observedTask3.DesiredState, api.TaskStateAccepted)
assert.Equal(t, observedTask3.ServiceAnnotations.Name, "name1")

observedTask4 := watchTaskUpdate(t, watch)
Expand Down Expand Up @@ -479,8 +481,7 @@ func TestOrchestratorRestartMaxAttempts(t *testing.T) {
observedTask5 := watchTaskCreate(t, watch)
expectCommit(t, watch)
assert.Equal(t, observedTask5.Status.State, api.TaskStateNew)
assert.Equal(t, observedTask5.DesiredState, api.TaskStateReady)
assert.Equal(t, observedTask5.ServiceAnnotations.Name, "name1")
assert.Equal(t, observedTask5.DesiredState, api.TaskStateAccepted)

observedTask6 := watchTaskUpdate(t, watch) // task gets started after a delay
expectCommit(t, watch)
Expand Down Expand Up @@ -578,7 +579,7 @@ func TestOrchestratorRestartWindow(t *testing.T) {
observedTask3 := watchTaskCreate(t, watch)
expectCommit(t, watch)
assert.Equal(t, observedTask3.Status.State, api.TaskStateNew)
assert.Equal(t, observedTask3.DesiredState, api.TaskStateReady)
assert.Equal(t, observedTask3.DesiredState, api.TaskStateAccepted)
assert.Equal(t, observedTask3.ServiceAnnotations.Name, "name1")

observedTask4 := watchTaskUpdate(t, watch)
Expand Down Expand Up @@ -611,7 +612,7 @@ func TestOrchestratorRestartWindow(t *testing.T) {
observedTask5 := watchTaskCreate(t, watch)
expectCommit(t, watch)
assert.Equal(t, observedTask5.Status.State, api.TaskStateNew)
assert.Equal(t, observedTask5.DesiredState, api.TaskStateReady)
assert.Equal(t, observedTask5.DesiredState, api.TaskStateAccepted)
assert.Equal(t, observedTask5.ServiceAnnotations.Name, "name1")

observedTask6 := watchTaskUpdate(t, watch) // task gets started after a delay
Expand Down Expand Up @@ -659,8 +660,7 @@ func TestOrchestratorRestartWindow(t *testing.T) {
observedTask7 := watchTaskCreate(t, watch)
expectCommit(t, watch)
assert.Equal(t, observedTask7.Status.State, api.TaskStateNew)
assert.Equal(t, observedTask7.DesiredState, api.TaskStateReady)
assert.Equal(t, observedTask7.ServiceAnnotations.Name, "name1")
assert.Equal(t, observedTask7.DesiredState, api.TaskStateAccepted)

observedTask8 := watchTaskUpdate(t, watch)
after = time.Now()
Expand Down