Skip to content

Commit 5f7a9fc

Browse files
Inactive task definition after delete all of its taskset (#4592)
* Store taskSet object instead of taskSetArn Signed-off-by: khanhtc1202 <[email protected]> * Remove service object store in stage metastore Signed-off-by: khanhtc1202 <[email protected]> * Inactive task definition after delete its taskset Signed-off-by: khanhtc1202 <[email protected]> * Update pkg/app/piped/executor/ecs/ecs.go Co-authored-by: Kenta Kozuka <[email protected]> Signed-off-by: khanhtc1202 <[email protected]> --------- Signed-off-by: khanhtc1202 <[email protected]> Co-authored-by: Kenta Kozuka <[email protected]>
1 parent d9d30af commit 5f7a9fc

File tree

4 files changed

+34
-48
lines changed

4 files changed

+34
-48
lines changed

pkg/app/piped/executor/ecs/ecs.go

Lines changed: 19 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,8 @@ import (
3333
)
3434

3535
const (
36-
activeServiceKeyName = "active-service-object"
3736
// Canary task set metadata keys.
38-
canaryTaskSetARNKeyName = "canary-taskset-arn"
37+
canaryTaskSetKeyName = "canary-taskset-object"
3938
// Stage metadata keys.
4039
trafficRoutePrimaryMetadataKey = "primary-percentage"
4140
trafficRouteCanaryMetadataKey = "canary-percentage"
@@ -237,7 +236,7 @@ func createPrimaryTaskSet(ctx context.Context, client provider.Client, service t
237236

238237
// Remove old taskSet if existed.
239238
if prevPrimaryTaskSet != nil {
240-
if err = client.DeleteTaskSet(ctx, service, *prevPrimaryTaskSet.TaskSetArn); err != nil {
239+
if err = client.DeleteTaskSet(ctx, *prevPrimaryTaskSet); err != nil {
241240
return err
242241
}
243242
}
@@ -266,17 +265,6 @@ func sync(ctx context.Context, in *executor.Input, platformProviderName string,
266265
return false
267266
}
268267

269-
// Store ACTIVE service to delete its unused TaskSet later.
270-
serviceObjData, err := json.Marshal(service)
271-
if err != nil {
272-
in.LogPersister.Errorf("Unable to store applied service to metadata store: %v", err)
273-
return false
274-
}
275-
if err := in.MetadataStore.Shared().Put(ctx, activeServiceKeyName, string(serviceObjData)); err != nil {
276-
in.LogPersister.Errorf("Unable to store applied service to metadata store: %v", err)
277-
return false
278-
}
279-
280268
in.LogPersister.Infof("Start rolling out ECS task set")
281269
if err := createPrimaryTaskSet(ctx, client, *service, *td, targetGroup); err != nil {
282270
in.LogPersister.Errorf("Failed to rolling out ECS task set for service %s: %v", *serviceDefinition.ServiceName, err)
@@ -314,17 +302,6 @@ func rollout(ctx context.Context, in *executor.Input, platformProviderName strin
314302
return false
315303
}
316304

317-
// Store ACTIVE service to delete its unused TaskSet later.
318-
serviceObjData, err := json.Marshal(service)
319-
if err != nil {
320-
in.LogPersister.Errorf("Unable to store applied service to metadata store: %v", err)
321-
return false
322-
}
323-
if err := in.MetadataStore.Shared().Put(ctx, activeServiceKeyName, string(serviceObjData)); err != nil {
324-
in.LogPersister.Errorf("Unable to store applied service to metadata store: %v", err)
325-
return false
326-
}
327-
328305
// Create a task set in the specified cluster and service.
329306
in.LogPersister.Infof("Start rolling out ECS task set")
330307
if in.StageConfig.Name == model.StageECSPrimaryRollout {
@@ -355,7 +332,12 @@ func rollout(ctx context.Context, in *executor.Input, platformProviderName strin
355332
return false
356333
}
357334
// Store created ACTIVE TaskSet (CANARY variant) to delete later.
358-
if err := in.MetadataStore.Shared().Put(ctx, canaryTaskSetARNKeyName, *taskSet.TaskSetArn); err != nil {
335+
taskSetObjData, err := json.Marshal(taskSet)
336+
if err != nil {
337+
in.LogPersister.Errorf("Unable to store created active taskSet to metadata store: %v", err)
338+
return false
339+
}
340+
if err := in.MetadataStore.Shared().Put(ctx, canaryTaskSetKeyName, string(taskSetObjData)); err != nil {
359341
in.LogPersister.Errorf("Unable to store created active taskSet to metadata store: %v", err)
360342
return false
361343
}
@@ -378,30 +360,26 @@ func clean(ctx context.Context, in *executor.Input, platformProviderName string,
378360
return false
379361
}
380362

381-
// Get service object from metadata store.
382-
serviceObjData, ok := in.MetadataStore.Shared().Get(activeServiceKeyName)
363+
// Get task set object from metadata store.
364+
taskSetObjData, ok := in.MetadataStore.Shared().Get(canaryTaskSetKeyName)
383365
if !ok {
384-
in.LogPersister.Errorf("Unable to restore service to clean: Not found")
366+
in.LogPersister.Error("Unable to restore taskset to clean: Not found")
385367
return false
386368
}
387-
service := &types.Service{}
388-
if err := json.Unmarshal([]byte(serviceObjData), service); err != nil {
389-
in.LogPersister.Errorf("Unable to restore service to clean: %v", err)
369+
taskSet := &types.TaskSet{}
370+
if err := json.Unmarshal([]byte(taskSetObjData), taskSet); err != nil {
371+
in.LogPersister.Errorf("Unable to restore taskset to clean: %v", err)
390372
return false
391373
}
392374

393375
// Delete canary task set if present.
394-
taskSetArn, ok := in.MetadataStore.Shared().Get(canaryTaskSetARNKeyName)
395-
if ok {
396-
in.LogPersister.Infof("Cleaning CANARY task set %s from service %s", taskSetArn, *service.ServiceName)
397-
if err := client.DeleteTaskSet(ctx, *service, taskSetArn); err != nil {
398-
in.LogPersister.Errorf("Failed to clean CANARY task set %s: %v", taskSetArn, err)
399-
return false
400-
}
401-
return true
376+
in.LogPersister.Infof("Cleaning CANARY task set %s from service %s", *taskSet.TaskSetArn, *taskSet.ServiceArn)
377+
if err := client.DeleteTaskSet(ctx, *taskSet); err != nil {
378+
in.LogPersister.Errorf("Failed to clean CANARY task set %s: %v", *taskSet.TaskSetArn, err)
379+
return false
402380
}
403381

404-
in.LogPersister.Info("No task set found in metadata store to clean")
382+
in.LogPersister.Infof("Successfully cleaned CANARY task set %s from service %s", *taskSet.TaskSetArn, *taskSet.ServiceArn)
405383
return true
406384
}
407385

pkg/app/piped/executor/ecs/rollback.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ func rollback(ctx context.Context, in *executor.Input, platformProviderName stri
168168
in.LogPersister.Infof("Start deleting previous ACTIVE taskSets")
169169
for _, ts := range prevTaskSets {
170170
in.LogPersister.Infof("Deleting previous ACTIVE taskSet %s", *ts.TaskSetArn)
171-
if err := client.DeleteTaskSet(ctx, *service, *ts.TaskSetArn); err != nil {
171+
if err := client.DeleteTaskSet(ctx, *ts); err != nil {
172172
in.LogPersister.Errorf("Failed to remove previous ACTIVE taskSet %s: %v", *ts.TaskSetArn, err)
173173
return false
174174
}

pkg/app/piped/platformprovider/ecs/client.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -331,14 +331,22 @@ func (c *client) WaitServiceStable(ctx context.Context, service types.Service) e
331331
return err
332332
}
333333

334-
func (c *client) DeleteTaskSet(ctx context.Context, service types.Service, taskSetArn string) error {
334+
func (c *client) DeleteTaskSet(ctx context.Context, taskSet types.TaskSet) error {
335335
input := &ecs.DeleteTaskSetInput{
336-
Cluster: service.ClusterArn,
337-
Service: service.ServiceArn,
338-
TaskSet: aws.String(taskSetArn),
336+
Cluster: taskSet.ClusterArn,
337+
Service: taskSet.ServiceArn,
338+
TaskSet: taskSet.TaskSetArn,
339339
}
340340
if _, err := c.ecsClient.DeleteTaskSet(ctx, input); err != nil {
341-
return fmt.Errorf("failed to delete ECS task set %s: %w", taskSetArn, err)
341+
return fmt.Errorf("failed to delete ECS task set %s: %w", *taskSet.TaskSetArn, err)
342+
}
343+
344+
// Inactive deleted taskset's task definition.
345+
taskDefInput := &ecs.DeregisterTaskDefinitionInput{
346+
TaskDefinition: taskSet.TaskDefinition,
347+
}
348+
if _, err := c.ecsClient.DeregisterTaskDefinition(ctx, taskDefInput); err != nil {
349+
return fmt.Errorf("failed to inactive ECS task definition %s: %w", *taskSet.TaskDefinition, err)
342350
}
343351
return nil
344352
}

pkg/app/piped/platformprovider/ecs/ecs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ type ECS interface {
5151
GetPrimaryTaskSet(ctx context.Context, service types.Service) (*types.TaskSet, error)
5252
GetServiceTaskSets(ctx context.Context, service types.Service) ([]*types.TaskSet, error)
5353
CreateTaskSet(ctx context.Context, service types.Service, taskDefinition types.TaskDefinition, targetGroup *types.LoadBalancer, scale int) (*types.TaskSet, error)
54-
DeleteTaskSet(ctx context.Context, service types.Service, taskSetArn string) error
54+
DeleteTaskSet(ctx context.Context, taskSet types.TaskSet) error
5555
UpdateServicePrimaryTaskSet(ctx context.Context, service types.Service, taskSet types.TaskSet) (*types.TaskSet, error)
5656
TagResource(ctx context.Context, resourceArn string, tags []types.Tag) error
5757
}

0 commit comments

Comments
 (0)