Skip to content

Commit a9f7b63

Browse files
committed
engine: save dockerID in createContainer.
Previously, the dockerID in the dockerContainer struct of a container is only saved in termination handler. This means that if the agent is forcefully stopped (e.g. via SIGKILL instead of SIGTERM), the dockerID is not saved, and as a result loses track of container if it is stopped by SIGKILL. This commit fixes the issue by saving the dockerID after creating the container.
1 parent 5f2a38e commit a9f7b63

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

agent/engine/docker_task_engine.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -1102,9 +1102,11 @@ func (engine *DockerTaskEngine) createContainer(task *apitask.Task, container *a
11021102
if metadata.DockerID != "" {
11031103
seelog.Infof("Task engine [%s]: created docker container for task: %s -> %s",
11041104
task.Arn, container.Name, metadata.DockerID)
1105-
engine.state.AddContainer(&apicontainer.DockerContainer{DockerID: metadata.DockerID,
1105+
dockerContainer := &apicontainer.DockerContainer{DockerID: metadata.DockerID,
11061106
DockerName: dockerContainerName,
1107-
Container: container}, task)
1107+
Container: container}
1108+
engine.state.AddContainer(dockerContainer, task)
1109+
engine.saveDockerContainerData(dockerContainer)
11081110
}
11091111
container.SetLabels(config.Labels)
11101112
seelog.Infof("Task engine [%s]: created docker container for task: %s -> %s, took %s",

agent/engine/docker_task_engine_test.go

+30
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,36 @@ func TestStopWithPendingStops(t *testing.T) {
699699
// gets the pull image lock
700700
}
701701

702+
func TestCreateContainerSaveDockerIDAndName(t *testing.T) {
703+
ctx, cancel := context.WithCancel(context.TODO())
704+
defer cancel()
705+
ctrl, client, _, privateTaskEngine, _, _, _ := mocks(t, ctx, &defaultConfig)
706+
defer ctrl.Finish()
707+
dataClient, cleanup := newTestDataClient(t)
708+
defer cleanup()
709+
710+
taskEngine, _ := privateTaskEngine.(*DockerTaskEngine)
711+
taskEngine.SetDataClient(dataClient)
712+
713+
sleepTask := testdata.LoadTask("sleep5")
714+
sleepTask.Arn = testTaskARN
715+
sleepContainer, _ := sleepTask.ContainerByName("sleep5")
716+
sleepContainer.TaskARNUnsafe = testTaskARN
717+
718+
client.EXPECT().APIVersion().Return(defaultDockerClientAPIVersion, nil).AnyTimes()
719+
client.EXPECT().CreateContainer(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(dockerapi.DockerContainerMetadata{
720+
DockerID: testDockerID,
721+
})
722+
metadata := taskEngine.createContainer(sleepTask, sleepContainer)
723+
require.NoError(t, metadata.Error)
724+
725+
containers, err := dataClient.GetContainers()
726+
require.NoError(t, err)
727+
require.Len(t, containers, 1)
728+
assert.Equal(t, testDockerID, containers[0].DockerID)
729+
assert.Contains(t, containers[0].DockerName, sleepContainer.Name)
730+
}
731+
702732
func TestCreateContainerMetadata(t *testing.T) {
703733
testcases := []struct {
704734
name string

0 commit comments

Comments
 (0)