Skip to content

Commit 0a4673a

Browse files
Remove task serialization and use host resource manager for task resources (aws#3723)
1 parent 40590fe commit 0a4673a

23 files changed

+280
-404
lines changed

agent/acs/handler/acs_handler_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -1418,7 +1418,6 @@ func validateAddedTask(expectedTask apitask.Task, addedTask apitask.Task) error
14181418
Family: addedTask.Family,
14191419
Version: addedTask.Version,
14201420
DesiredStatusUnsafe: addedTask.GetDesiredStatus(),
1421-
StartSequenceNumber: addedTask.StartSequenceNumber,
14221421
}
14231422

14241423
if !reflect.DeepEqual(expectedTask, taskToCompareFromAdded) {

agent/api/ecsclient/client.go

+4
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,10 @@ func (client *APIECSClient) GetHostResources() (map[string]*ecs.Resource, error)
315315
}
316316
resourceMap := make(map[string]*ecs.Resource)
317317
for _, resource := range resources {
318+
if *resource.Name == "PORTS" {
319+
// Except for RCI, TCP Ports are named as PORTS_TCP in agent for Host Resources purpose
320+
resource.Name = utils.Strptr("PORTS_TCP")
321+
}
318322
resourceMap[*resource.Name] = resource
319323
}
320324
return resourceMap, nil

agent/api/task/task.go

+11-29
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import (
3333
"github.com/aws/amazon-ecs-agent/agent/config"
3434
"github.com/aws/amazon-ecs-agent/agent/dockerclient"
3535
"github.com/aws/amazon-ecs-agent/agent/dockerclient/dockerapi"
36-
"github.com/aws/amazon-ecs-agent/agent/ecs_client/model/ecs"
3736
"github.com/aws/amazon-ecs-agent/agent/taskresource"
3837
"github.com/aws/amazon-ecs-agent/agent/taskresource/asmauth"
3938
"github.com/aws/amazon-ecs-agent/agent/taskresource/asmsecret"
@@ -49,6 +48,7 @@ import (
4948
apieni "github.com/aws/amazon-ecs-agent/ecs-agent/api/eni"
5049
apierrors "github.com/aws/amazon-ecs-agent/ecs-agent/api/errors"
5150
"github.com/aws/amazon-ecs-agent/ecs-agent/credentials"
51+
"github.com/aws/amazon-ecs-agent/ecs-agent/ecs_client/model/ecs"
5252
"github.com/aws/amazon-ecs-agent/ecs-agent/logger"
5353
"github.com/aws/amazon-ecs-agent/ecs-agent/logger/field"
5454
"github.com/aws/amazon-ecs-agent/ecs-agent/utils/arn"
@@ -235,9 +235,6 @@ type Task struct {
235235
// is handled properly so that the state storage continues to work.
236236
SentStatusUnsafe apitaskstatus.TaskStatus `json:"SentStatus"`
237237

238-
StartSequenceNumber int64
239-
StopSequenceNumber int64
240-
241238
// ExecutionCredentialsID is the ID of credentials that are used by agent to
242239
// perform some action at the task level, such as pulling image from ECR
243240
ExecutionCredentialsID string `json:"executionCredentialsID"`
@@ -313,11 +310,6 @@ func TaskFromACS(acsTask *ecsacs.Task, envelope *ecsacs.PayloadMessage) (*Task,
313310
if err := json.Unmarshal(data, task); err != nil {
314311
return nil, err
315312
}
316-
if task.GetDesiredStatus() == apitaskstatus.TaskRunning && envelope.SeqNum != nil {
317-
task.StartSequenceNumber = *envelope.SeqNum
318-
} else if task.GetDesiredStatus() == apitaskstatus.TaskStopped && envelope.SeqNum != nil {
319-
task.StopSequenceNumber = *envelope.SeqNum
320-
}
321313

322314
// Overrides the container command if it's set
323315
for _, container := range task.Containers {
@@ -2826,22 +2818,6 @@ func (task *Task) GetAppMesh() *apiappmesh.AppMesh {
28262818
return task.AppMesh
28272819
}
28282820

2829-
// GetStopSequenceNumber returns the stop sequence number of a task
2830-
func (task *Task) GetStopSequenceNumber() int64 {
2831-
task.lock.RLock()
2832-
defer task.lock.RUnlock()
2833-
2834-
return task.StopSequenceNumber
2835-
}
2836-
2837-
// SetStopSequenceNumber sets the stop seqence number of a task
2838-
func (task *Task) SetStopSequenceNumber(seqnum int64) {
2839-
task.lock.Lock()
2840-
defer task.lock.Unlock()
2841-
2842-
task.StopSequenceNumber = seqnum
2843-
}
2844-
28452821
// SetPullStartedAt sets the task pullstartedat timestamp and returns whether
28462822
// this field was updated or not
28472823
func (task *Task) SetPullStartedAt(timestamp time.Time) bool {
@@ -3545,10 +3521,6 @@ func (task *Task) IsServiceConnectConnectionDraining() bool {
35453521
//
35463522
// * GPU
35473523
// - Return num of gpus requested (len of GPUIDs field)
3548-
//
3549-
// TODO remove this once ToHostResources is used
3550-
//
3551-
//lint:file-ignore U1000 Ignore all unused code
35523524
func (task *Task) ToHostResources() map[string]*ecs.Resource {
35533525
resources := make(map[string]*ecs.Resource)
35543526
// CPU
@@ -3662,3 +3634,13 @@ func (task *Task) ToHostResources() map[string]*ecs.Resource {
36623634
})
36633635
return resources
36643636
}
3637+
3638+
func (task *Task) HasActiveContainers() bool {
3639+
for _, container := range task.Containers {
3640+
containerStatus := container.GetKnownStatus()
3641+
if containerStatus >= apicontainerstatus.ContainerPulled && containerStatus <= apicontainerstatus.ContainerResourcesProvisioned {
3642+
return true
3643+
}
3644+
}
3645+
return false
3646+
}

agent/api/task/task_test.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ import (
4242
"github.com/aws/amazon-ecs-agent/agent/dockerclient"
4343
"github.com/aws/amazon-ecs-agent/agent/dockerclient/dockerapi"
4444
mock_dockerapi "github.com/aws/amazon-ecs-agent/agent/dockerclient/dockerapi/mocks"
45-
"github.com/aws/amazon-ecs-agent/agent/ecs_client/model/ecs"
4645
mock_s3_factory "github.com/aws/amazon-ecs-agent/agent/s3/factory/mocks"
4746
mock_ssm_factory "github.com/aws/amazon-ecs-agent/agent/ssm/factory/mocks"
4847
"github.com/aws/amazon-ecs-agent/agent/taskresource"
@@ -54,6 +53,7 @@ import (
5453
apieni "github.com/aws/amazon-ecs-agent/ecs-agent/api/eni"
5554
"github.com/aws/amazon-ecs-agent/ecs-agent/credentials"
5655
mock_credentials "github.com/aws/amazon-ecs-agent/ecs-agent/credentials/mocks"
56+
"github.com/aws/amazon-ecs-agent/ecs-agent/ecs_client/model/ecs"
5757
"github.com/aws/aws-sdk-go/service/secretsmanager"
5858

5959
"github.com/aws/amazon-ecs-agent/agent/taskresource/asmsecret"
@@ -1861,10 +1861,9 @@ func TestTaskFromACS(t *testing.T) {
18611861
Type: "elastic-inference",
18621862
},
18631863
},
1864-
StartSequenceNumber: 42,
1865-
CPU: 2.0,
1866-
Memory: 512,
1867-
ResourcesMapUnsafe: make(map[string][]taskresource.TaskResource),
1864+
CPU: 2.0,
1865+
Memory: 512,
1866+
ResourcesMapUnsafe: make(map[string][]taskresource.TaskResource),
18681867
}
18691868

18701869
seqNum := int64(42)

agent/api/task/taskvolume_test.go

-4
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,6 @@ func TestMarshalTaskVolumesEFS(t *testing.T) {
119119
"PullStoppedAt": "0001-01-01T00:00:00Z",
120120
"ExecutionStoppedAt": "0001-01-01T00:00:00Z",
121121
"SentStatus": "NONE",
122-
"StartSequenceNumber": 0,
123-
"StopSequenceNumber": 0,
124122
"executionCredentialsID": "",
125123
"ENI": null,
126124
"AppMesh": null,
@@ -168,8 +166,6 @@ func TestUnmarshalTaskVolumesEFS(t *testing.T) {
168166
"PullStoppedAt": "0001-01-01T00:00:00Z",
169167
"ExecutionStoppedAt": "0001-01-01T00:00:00Z",
170168
"SentStatus": "NONE",
171-
"StartSequenceNumber": 0,
172-
"StopSequenceNumber": 0,
173169
"executionCredentialsID": "",
174170
"ENI": null,
175171
"AppMesh": null,

agent/api/task/taskvolume_windows_test.go

-4
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@ func TestMarshalTaskVolumeFSxWindowsFileServer(t *testing.T) {
7777
"PullStoppedAt": "0001-01-01T00:00:00Z",
7878
"ExecutionStoppedAt": "0001-01-01T00:00:00Z",
7979
"SentStatus": "NONE",
80-
"StartSequenceNumber": 0,
81-
"StopSequenceNumber": 0,
8280
"executionCredentialsID": "",
8381
"ENI": null,
8482
"AppMesh": null,
@@ -118,8 +116,6 @@ func TestUnmarshalTaskVolumeFSxWindowsFileServer(t *testing.T) {
118116
"PullStoppedAt": "0001-01-01T00:00:00Z",
119117
"ExecutionStoppedAt": "0001-01-01T00:00:00Z",
120118
"SentStatus": "NONE",
121-
"StartSequenceNumber": 0,
122-
"StopSequenceNumber": 0,
123119
"executionCredentialsID": "",
124120
"ENI": null,
125121
"AppMesh": null,

agent/app/agent_unix_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ func TestDoStartCgroupInitHappyPath(t *testing.T) {
478478
state.EXPECT().AllImageStates().Return(nil),
479479
state.EXPECT().AllENIAttachments().Return(nil),
480480
state.EXPECT().AllTasks().Return(nil),
481+
state.EXPECT().AllTasks().Return(nil),
481482
client.EXPECT().DiscoverPollEndpoint(gomock.Any()).Do(func(x interface{}) {
482483
// Ensures that the test waits until acs session has bee started
483484
discoverEndpointsInvoked.Done()
@@ -646,6 +647,7 @@ func TestDoStartGPUManagerHappyPath(t *testing.T) {
646647
state.EXPECT().AllImageStates().Return(nil),
647648
state.EXPECT().AllENIAttachments().Return(nil),
648649
state.EXPECT().AllTasks().Return(nil),
650+
state.EXPECT().AllTasks().Return(nil),
649651
client.EXPECT().DiscoverPollEndpoint(gomock.Any()).Do(func(x interface{}) {
650652
// Ensures that the test waits until acs session has been started
651653
discoverEndpointsInvoked.Done()

agent/app/data.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ import (
1818
"strings"
1919

2020
"github.com/aws/amazon-ecs-agent/agent/data"
21-
"github.com/aws/amazon-ecs-agent/agent/ecs_client/model/ecs"
2221
"github.com/aws/amazon-ecs-agent/agent/engine"
2322
"github.com/aws/amazon-ecs-agent/agent/engine/dockerstate"
2423
"github.com/aws/amazon-ecs-agent/agent/engine/execcmd"
2524
"github.com/aws/amazon-ecs-agent/agent/engine/serviceconnect"
2625
"github.com/aws/amazon-ecs-agent/ecs-agent/credentials"
26+
"github.com/aws/amazon-ecs-agent/ecs-agent/ecs_client/model/ecs"
2727
"github.com/aws/amazon-ecs-agent/ecs-agent/eventstream"
2828

2929
"github.com/pkg/errors"

agent/engine/common_integ_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -225,14 +225,16 @@ func skipIntegTestIfApplicable(t *testing.T) {
225225
}
226226
}
227227

228+
// Values in host resources from getTestHostResources() should be looked at and CPU/Memory assigned
229+
// accordingly
228230
func createTestContainerWithImageAndName(image string, name string) *apicontainer.Container {
229231
return &apicontainer.Container{
230232
Name: name,
231233
Image: image,
232234
Command: []string{},
233235
Essential: true,
234236
DesiredStatusUnsafe: apicontainerstatus.ContainerRunning,
235-
CPU: 1024,
237+
CPU: 256,
236238
Memory: 128,
237239
}
238240
}

agent/engine/common_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ import (
3232
"github.com/aws/amazon-ecs-agent/agent/dockerclient"
3333
"github.com/aws/amazon-ecs-agent/agent/dockerclient/dockerapi"
3434
mock_dockerapi "github.com/aws/amazon-ecs-agent/agent/dockerclient/dockerapi/mocks"
35-
"github.com/aws/amazon-ecs-agent/agent/ecs_client/model/ecs"
3635
"github.com/aws/amazon-ecs-agent/agent/engine/execcmd"
3736
mock_engine "github.com/aws/amazon-ecs-agent/agent/engine/mocks"
3837
"github.com/aws/amazon-ecs-agent/agent/statechange"
38+
"github.com/aws/amazon-ecs-agent/agent/utils"
3939
"github.com/aws/amazon-ecs-agent/ecs-agent/credentials"
40+
"github.com/aws/amazon-ecs-agent/ecs-agent/ecs_client/model/ecs"
4041
mock_ttime "github.com/aws/amazon-ecs-agent/ecs-agent/utils/ttime/mocks"
41-
"github.com/aws/amazon-ecs-agent/agent/utils"
4242
"github.com/cihub/seelog"
4343
dockercontainer "github.com/docker/docker/api/types/container"
4444
"github.com/golang/mock/gomock"

agent/engine/default.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ import (
1919
"github.com/aws/amazon-ecs-agent/agent/config"
2020
"github.com/aws/amazon-ecs-agent/agent/containermetadata"
2121
"github.com/aws/amazon-ecs-agent/agent/dockerclient/dockerapi"
22-
"github.com/aws/amazon-ecs-agent/agent/ecs_client/model/ecs"
2322
"github.com/aws/amazon-ecs-agent/agent/engine/dockerstate"
2423
"github.com/aws/amazon-ecs-agent/agent/engine/execcmd"
2524
"github.com/aws/amazon-ecs-agent/agent/engine/serviceconnect"
2625
"github.com/aws/amazon-ecs-agent/agent/taskresource"
2726
"github.com/aws/amazon-ecs-agent/ecs-agent/credentials"
27+
"github.com/aws/amazon-ecs-agent/ecs-agent/ecs_client/model/ecs"
2828
"github.com/aws/amazon-ecs-agent/ecs-agent/eventstream"
2929
)
3030

agent/engine/docker_image_manager_integ_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -568,23 +568,23 @@ func createImageCleanupHappyTestTask(taskName string) *apitask.Task {
568568
Image: test1Image1Name,
569569
Essential: false,
570570
DesiredStatusUnsafe: apicontainerstatus.ContainerRunning,
571-
CPU: 512,
571+
CPU: 256,
572572
Memory: 256,
573573
},
574574
{
575575
Name: "test2",
576576
Image: test1Image2Name,
577577
Essential: false,
578578
DesiredStatusUnsafe: apicontainerstatus.ContainerRunning,
579-
CPU: 512,
579+
CPU: 256,
580580
Memory: 256,
581581
},
582582
{
583583
Name: "test3",
584584
Image: test1Image3Name,
585585
Essential: false,
586586
DesiredStatusUnsafe: apicontainerstatus.ContainerRunning,
587-
CPU: 512,
587+
CPU: 256,
588588
Memory: 256,
589589
},
590590
},
@@ -603,23 +603,23 @@ func createImageCleanupThresholdTestTask(taskName string) *apitask.Task {
603603
Image: test2Image1Name,
604604
Essential: false,
605605
DesiredStatusUnsafe: apicontainerstatus.ContainerRunning,
606-
CPU: 512,
606+
CPU: 256,
607607
Memory: 256,
608608
},
609609
{
610610
Name: "test2",
611611
Image: test2Image2Name,
612612
Essential: false,
613613
DesiredStatusUnsafe: apicontainerstatus.ContainerRunning,
614-
CPU: 512,
614+
CPU: 256,
615615
Memory: 256,
616616
},
617617
{
618618
Name: "test3",
619619
Image: test2Image3Name,
620620
Essential: false,
621621
DesiredStatusUnsafe: apicontainerstatus.ContainerRunning,
622-
CPU: 512,
622+
CPU: 256,
623623
Memory: 256,
624624
},
625625
},

0 commit comments

Comments
 (0)