From 91f8afcc3a1ed2cca54fd92e14402080307b872a Mon Sep 17 00:00:00 2001 From: Cynthia Date: Wed, 10 Jun 2026 09:43:50 +0800 Subject: [PATCH 1/3] fix: skip blue-green release cleanup while waiting for manual execution Signed-off-by: Cynthia --- .../jobcontroller/job_blue_green_release_v2.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job_blue_green_release_v2.go b/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job_blue_green_release_v2.go index 692f383084..02c0372499 100644 --- a/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job_blue_green_release_v2.go +++ b/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job_blue_green_release_v2.go @@ -67,6 +67,16 @@ func NewBlueGreenReleaseV2JobCtl(job *commonmodels.JobTask, workflowCtx *commonm } func (c *BlueGreenReleaseV2JobCtl) Clean(ctx context.Context) { + if c.job.Status == "" { + task, err := mongodb.NewworkflowTaskv4Coll().Find(c.workflowCtx.WorkflowName, c.workflowCtx.TaskID) + if err == nil && task.Status == config.StatusPause { + return + } + if err != nil { + c.logger.Warnf("find workflow task error: %v", err) + } + } + env, err := mongodb.NewProductColl().Find(&mongodb.ProductFindOptions{ Name: c.workflowCtx.ProjectName, EnvName: c.jobTaskSpec.Env, From 36fe2fce01db424e92e634f73818d9b24578de74 Mon Sep 17 00:00:00 2001 From: Cynthia Date: Wed, 10 Jun 2026 10:35:12 +0800 Subject: [PATCH 2/3] fix: skip blue-green release cleanup while waiting for manual execution Signed-off-by: Cynthia --- .../service/workflowcontroller/jobcontroller/job.go | 4 ++++ .../jobcontroller/job_blue_green_release_v2.go | 10 ---------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job.go b/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job.go index 50acd3e5a9..da20a1d0ff 100644 --- a/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job.go +++ b/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job.go @@ -306,6 +306,10 @@ func RunJobs(ctx context.Context, jobs []*commonmodels.JobTask, workflowCtx *com func CleanWorkflowJobs(ctx context.Context, workflowTask *commonmodels.WorkflowTask, workflowCtx *commonmodels.WorkflowTaskCtx, logger *zap.SugaredLogger, ack func()) { for _, stage := range workflowTask.Stages { for _, job := range stage.Jobs { + if workflowTask.Status == config.StatusPause && job.JobType == string(config.JobK8sBlueGreenRelease) && job.Status == "" { + continue + } + jobCtl := initJobCtl(job, workflowCtx, logger, ack) jobCtl.Clean(ctx) } diff --git a/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job_blue_green_release_v2.go b/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job_blue_green_release_v2.go index 02c0372499..692f383084 100644 --- a/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job_blue_green_release_v2.go +++ b/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job_blue_green_release_v2.go @@ -67,16 +67,6 @@ func NewBlueGreenReleaseV2JobCtl(job *commonmodels.JobTask, workflowCtx *commonm } func (c *BlueGreenReleaseV2JobCtl) Clean(ctx context.Context) { - if c.job.Status == "" { - task, err := mongodb.NewworkflowTaskv4Coll().Find(c.workflowCtx.WorkflowName, c.workflowCtx.TaskID) - if err == nil && task.Status == config.StatusPause { - return - } - if err != nil { - c.logger.Warnf("find workflow task error: %v", err) - } - } - env, err := mongodb.NewProductColl().Find(&mongodb.ProductFindOptions{ Name: c.workflowCtx.ProjectName, EnvName: c.jobTaskSpec.Env, From 9a29836505b43f92823b474a362301575d4a9661 Mon Sep 17 00:00:00 2001 From: Cynthia Date: Wed, 10 Jun 2026 14:12:58 +0800 Subject: [PATCH 3/3] fix: skip blue-green release cleanup while waiting for manual execution Signed-off-by: Cynthia --- .../workflowcontroller/jobcontroller/job.go | 13 ++++++++++++ .../service/workflowcontroller/workflow.go | 21 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job.go b/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job.go index da20a1d0ff..ef9299e3bf 100644 --- a/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job.go +++ b/pkg/microservice/aslan/core/common/service/workflowcontroller/jobcontroller/job.go @@ -316,6 +316,19 @@ func CleanWorkflowJobs(ctx context.Context, workflowTask *commonmodels.WorkflowT } } +func CleanPendingBlueGreenReleaseJobs(ctx context.Context, workflowTask *commonmodels.WorkflowTask, workflowCtx *commonmodels.WorkflowTaskCtx, logger *zap.SugaredLogger, ack func()) { + for _, stage := range workflowTask.Stages { + for _, job := range stage.Jobs { + if job.JobType != string(config.JobK8sBlueGreenRelease) || job.Status != "" { + continue + } + + jobCtl := initJobCtl(job, workflowCtx, logger, ack) + jobCtl.Clean(ctx) + } + } +} + // Pool is a worker group that runs a number of tasks at a // configured concurrency. type Pool struct { diff --git a/pkg/microservice/aslan/core/common/service/workflowcontroller/workflow.go b/pkg/microservice/aslan/core/common/service/workflowcontroller/workflow.go index 39efb5dea0..015a62b8be 100644 --- a/pkg/microservice/aslan/core/common/service/workflowcontroller/workflow.go +++ b/pkg/microservice/aslan/core/common/service/workflowcontroller/workflow.go @@ -121,6 +121,7 @@ func CancelWorkflowTask(userName, workflowName string, taskID int64, logger *zap return fmt.Errorf("task: %s:%d is passed, cannot cancel", workflowName, taskID) } + wasPaused := t.Status == config.StatusPause t.Status = config.StatusCancelled t.TaskRevoker = userName @@ -139,6 +140,26 @@ func CancelWorkflowTask(userName, workflowName string, taskID int64, logger *zap log.Warnf("Failed to update github check status for custom workflow %s, taskID: %d the error is: %s", t.WorkflowName, t.TaskID, err) } + if wasPaused { + logger.Infof("clean cancelled paused workflow task resources: %s:%d", t.WorkflowName, t.TaskID) + workflowCtx := &commonmodels.WorkflowTaskCtx{ + WorkflowName: t.WorkflowName, + WorkflowDisplayName: t.WorkflowDisplayName, + ProjectName: t.ProjectName, + ProjectDisplayName: t.ProjectDisplayName, + IsDebug: t.IsDebug, + Remark: t.Remark, + TaskID: t.TaskID, + RetryNum: t.RetryNum, + Workspace: "/workspace", + DistDir: fmt.Sprintf("%s/%s/dist/%d", config.S3StoragePath(), t.WorkflowName, t.TaskID), + DockerMountDir: fmt.Sprintf("/tmp/%s/docker/%d", uuid.NewString(), time.Now().Unix()), + ConfigMapMountDir: fmt.Sprintf("/tmp/%s/cm/%d", uuid.NewString(), time.Now().Unix()), + StartTime: time.Now(), + } + jobcontroller.CleanPendingBlueGreenReleaseJobs(context.Background(), t, workflowCtx, logger, func() {}) + } + err = cache.NewRedisCache(config2.RedisCommonCacheTokenDB()).Publish(fmt.Sprintf("workflowctl-cancel-%s-%d", workflowName, taskID), "cancel") if err != nil { return fmt.Errorf("failed to cancel task: %s:%d, err: %s", workflowName, taskID, err)