Skip to content

Commit f531ef9

Browse files
author
richardpen
committed
agent/app/agent.go: Reset agent state if the instance id changed
1 parent d71e7cd commit f531ef9

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

agent/app/agent.go

+2
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,8 @@ func (agent *ecsAgent) newTaskEngine(containerChangeEventStream *eventstream.Eve
232232
log.Warnf(instanceIDMismatchErrorFormat,
233233
previousEC2InstanceID, currentEC2InstanceID)
234234

235+
// Reset agent state as a new container instance
236+
state.Reset()
235237
// Reset taskEngine; all the other values are still default
236238
return engine.NewTaskEngine(agent.cfg, agent.dockerClient, credentialsManager,
237239
containerChangeEventStream, imageManager, state), currentEC2InstanceID, nil

agent/app/agent_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ func TestNewTaskEngineRestoreFromCheckpointPreviousEC2InstanceIDLoadedHappyPath(
287287
gomock.Any(), gomock.Any(), gomock.Any()).Return(
288288
statemanager.NewNoopStateManager(), nil),
289289
ec2MetadataClient.EXPECT().InstanceIdentityDocument().Return(iid, nil),
290+
state.EXPECT().Reset(),
290291
)
291292

292293
ctx, cancel := context.WithCancel(context.TODO())

agent/engine/dockerstate/docker_task_engine_state.go

+14
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ type TaskEngineState interface {
5252
AddImageState(imageState *image.ImageState)
5353
// RemoveTask removes a task from the state
5454
RemoveTask(task *api.Task)
55+
// Reset resets all the fileds in the state
56+
Reset()
5557
// RemoveImageState removes an image.ImageState
5658
RemoveImageState(imageState *image.ImageState)
5759
json.Marshaler
@@ -96,6 +98,18 @@ func newDockerTaskEngineState() *DockerTaskEngineState {
9698
}
9799
}
98100

101+
// Reset resets all the states
102+
func (state *DockerTaskEngineState) Reset() {
103+
state.lock.Lock()
104+
defer state.lock.Unlock()
105+
106+
state.tasks = make(map[string]*api.Task)
107+
state.idToTask = make(map[string]string)
108+
state.taskToID = make(map[string]map[string]*api.DockerContainer)
109+
state.idToContainer = make(map[string]*api.DockerContainer)
110+
state.imageStates = make(map[string]*image.ImageState)
111+
}
112+
99113
// AllTasks returns all of the tasks
100114
func (state *DockerTaskEngineState) AllTasks() []*api.Task {
101115
state.lock.RLock()

agent/engine/dockerstate/mocks/dockerstate_mocks.go

+8
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,14 @@ func (_mr *_MockTaskEngineStateRecorder) RemoveTask(arg0 interface{}) *gomock.Ca
146146
return _mr.mock.ctrl.RecordCall(_mr.mock, "RemoveTask", arg0)
147147
}
148148

149+
func (_m *MockTaskEngineState) Reset() {
150+
_m.ctrl.Call(_m, "Reset")
151+
}
152+
153+
func (_mr *_MockTaskEngineStateRecorder) Reset() *gomock.Call {
154+
return _mr.mock.ctrl.RecordCall(_mr.mock, "Reset")
155+
}
156+
149157
func (_m *MockTaskEngineState) TaskByArn(_param0 string) (*api.Task, bool) {
150158
ret := _m.ctrl.Call(_m, "TaskByArn", _param0)
151159
ret0, _ := ret[0].(*api.Task)

0 commit comments

Comments
 (0)