Skip to content

Commit

Permalink
acs: return an empty task when task is not recognized
Browse files Browse the repository at this point in the history
  • Loading branch information
haikuoliu committed Aug 13, 2018
1 parent 6341d45 commit 3f82094
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 4 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# Changelog

## 1.21.0-dev
* Bug - Bug - Fixed a bug where unrecognized task cannot be stopped [#1467](https://github.com/aws/amazon-ecs-agent/pull/1467)

## 1.20.1
* Bug - Fixed a bug where the agent couldn't be upgraded if there are tasks that
use volumes in the task definition on the instance
Expand Down
3 changes: 1 addition & 2 deletions agent/acs/handler/acs_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,13 @@
package handler

import (
"context"
"io"
"net/url"
"strconv"
"strings"
"time"

"context"

acsclient "github.com/aws/amazon-ecs-agent/agent/acs/client"
"github.com/aws/amazon-ecs-agent/agent/acs/model/ecsacs"
"github.com/aws/amazon-ecs-agent/agent/acs/update_handler"
Expand Down
4 changes: 4 additions & 0 deletions agent/acs/handler/payload_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,10 @@ func (payloadHandler *payloadRequestHandler) handleUnrecognizedTask(task *ecsacs
TaskARN: *task.Arn,
Status: apitaskstatus.TaskStopped,
Reason: UnrecognizedTaskError{err}.Error(),
// The real task cannot be extracted from payload message, so we send an empty task.
// This is necessary because the task handler will not send an event whose
// Task is nil.
Task: &apitask.Task{},
}

payloadHandler.taskHandler.AddStateChangeEvent(taskEvent, payloadHandler.ecsClient)
Expand Down
32 changes: 30 additions & 2 deletions agent/acs/handler/payload_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@
package handler

import (
"context"
"errors"
"fmt"
"reflect"
"sync"
"testing"

"context"

"github.com/aws/amazon-ecs-agent/agent/acs/model/ecsacs"
"github.com/aws/amazon-ecs-agent/agent/api"
"github.com/aws/amazon-ecs-agent/agent/api/mocks"
Expand Down Expand Up @@ -754,3 +755,30 @@ func TestPayloadHandlerAddedASMAuthData(t *testing.T) {
assert.Equal(t, aws.StringValue(expected.AsmAuthData.Region), actual.ASMAuthData.Region)
assert.Equal(t, aws.StringValue(expected.AsmAuthData.CredentialsParameter), actual.ASMAuthData.CredentialsParameter)
}

func TestHandleUnrecognizedTask(t *testing.T) {
tester := setup(t)
defer tester.ctrl.Finish()

arn := "arn"
ecsacsTask := &ecsacs.Task{Arn: &arn}
payloadMessage := &ecsacs.PayloadMessage{
Tasks: []*ecsacs.Task{ecsacsTask},
MessageId: aws.String(payloadMessageId),
}

mockECSACSClient := mock_api.NewMockECSClient(tester.ctrl)
taskHandler := eventhandler.NewTaskHandler(tester.ctx, tester.payloadHandler.saver, nil, mockECSACSClient)
tester.payloadHandler.taskHandler = taskHandler

wait := &sync.WaitGroup{}
wait.Add(1)

mockECSACSClient.EXPECT().SubmitTaskStateChange(gomock.Any()).Do(func(change api.TaskStateChange) {
assert.NotNil(t, change.Task)
wait.Done()
})

tester.payloadHandler.handleUnrecognizedTask(ecsacsTask, errors.New("test error"), payloadMessage)
wait.Wait()
}

0 comments on commit 3f82094

Please sign in to comment.