You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by li...@apache.org on 2023/01/10 15:59:01 UTC
[incubator-devlake] branch main updated: fix: unable to cancel pipeline with skip-on-fail (#4182)
This is an automated email from the ASF dual-hosted git repository.
likyh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/main by this push:
new dd391d0cb fix: unable to cancel pipeline with skip-on-fail (#4182)
dd391d0cb is described below
commit dd391d0cbe51cefaa0ad4d5c84bcc28f95c8047b
Author: Klesh Wong <zh...@merico.dev>
AuthorDate: Tue Jan 10 23:58:57 2023 +0800
fix: unable to cancel pipeline with skip-on-fail (#4182)
---
services/pipeline_runner.go | 7 ++++---
test/services/pipeline_runner_e2e_test.go | 14 +++++++-------
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/services/pipeline_runner.go b/services/pipeline_runner.go
index a84bc816e..60e8d7fa1 100644
--- a/services/pipeline_runner.go
+++ b/services/pipeline_runner.go
@@ -113,6 +113,7 @@ func runPipeline(pipelineId uint64) errors.Error {
} else {
err = pipelineRun.runPipelineStandalone()
}
+ isCancelled := errors.Is(err, context.Canceled)
if err != nil {
err = errors.Default.Wrap(err, fmt.Sprintf("Error running pipeline %d.", pipelineId))
}
@@ -130,7 +131,7 @@ func runPipeline(pipelineId uint64) errors.Error {
dbPipeline.Message = err.Error()
dbPipeline.ErrorName = err.Messages().Format()
}
- dbPipeline.Status, err = ComputePipelineStatus(dbPipeline)
+ dbPipeline.Status, err = ComputePipelineStatus(dbPipeline, isCancelled)
if err != nil {
globalPipelineLog.Error(err, "compute pipeline status failed")
return err
@@ -148,7 +149,7 @@ func runPipeline(pipelineId uint64) errors.Error {
// 1. TASK_COMPLETED: all tasks were executed sucessfully
// 2. TASK_FAILED: SkipOnFail=false with failed task(s)
// 3. TASK_PARTIAL: SkipOnFail=true with failed task(s)
-func ComputePipelineStatus(pipeline *models.DbPipeline) (string, errors.Error) {
+func ComputePipelineStatus(pipeline *models.DbPipeline, isCancelled bool) (string, errors.Error) {
tasks, err := GetLatestTasksOfPipeline(pipeline)
if err != nil {
return "", err
@@ -168,7 +169,7 @@ func ComputePipelineStatus(pipeline *models.DbPipeline) (string, errors.Error) {
}
}
- if running > 0 || (pipeline.SkipOnFail && pending > 0) {
+ if running > 0 || (!isCancelled && pipeline.SkipOnFail && pending > 0) {
return "", errors.Default.New("unexpected status, did you call computePipelineStatus at a wrong timing?")
}
diff --git a/test/services/pipeline_runner_e2e_test.go b/test/services/pipeline_runner_e2e_test.go
index eff85467a..46640f792 100644
--- a/test/services/pipeline_runner_e2e_test.go
+++ b/test/services/pipeline_runner_e2e_test.go
@@ -70,7 +70,7 @@ func TestComputePipelineStatus(t *testing.T) {
assert.NotZero(t, task_row2_col1.ID)
// pipeline.status == "failed" if SkipOnFailed=false and any tasks failed
- status, err := services.ComputePipelineStatus(pipeline)
+ status, err := services.ComputePipelineStatus(pipeline, false)
if !assert.Nil(t, err) {
println(err.Messages().Format())
}
@@ -83,7 +83,7 @@ func TestComputePipelineStatus(t *testing.T) {
task_row2_col1.Status = models.TASK_COMPLETED
err = db.Update(task_row2_col1)
assert.Nil(t, err)
- status, err = services.ComputePipelineStatus(pipeline)
+ status, err = services.ComputePipelineStatus(pipeline, false)
if !assert.Nil(t, err) {
println(err.Messages().Format())
}
@@ -92,7 +92,7 @@ func TestComputePipelineStatus(t *testing.T) {
pipeline.SkipOnFail = true
err = db.Update(pipeline)
assert.Nil(t, err)
- status, err = services.ComputePipelineStatus(pipeline)
+ status, err = services.ComputePipelineStatus(pipeline, false)
assert.Nil(t, err)
assert.Equal(t, models.TASK_COMPLETED, status)
@@ -100,7 +100,7 @@ func TestComputePipelineStatus(t *testing.T) {
task_row1_col1.Status = models.TASK_FAILED
err = db.Update(task_row1_col1)
assert.Nil(t, err)
- status, err = services.ComputePipelineStatus(pipeline)
+ status, err = services.ComputePipelineStatus(pipeline, false)
assert.Nil(t, err)
assert.Equal(t, models.TASK_PARTIAL, status)
@@ -114,7 +114,7 @@ func TestComputePipelineStatus(t *testing.T) {
task_row2_col1.Status = models.TASK_FAILED
err = db.Update(task_row2_col1)
assert.Nil(t, err)
- status, err = services.ComputePipelineStatus(pipeline)
+ status, err = services.ComputePipelineStatus(pipeline, false)
assert.Nil(t, err)
assert.Equal(t, models.TASK_FAILED, status)
@@ -152,7 +152,7 @@ func TestComputePipelineStatus(t *testing.T) {
assert.Nil(t, err)
assert.NotZero(t, task_row2_col1.ID)
- status, err = services.ComputePipelineStatus(pipeline)
+ status, err = services.ComputePipelineStatus(pipeline, false)
assert.Nil(t, err)
assert.Equal(t, models.TASK_COMPLETED, status)
@@ -160,7 +160,7 @@ func TestComputePipelineStatus(t *testing.T) {
task_row1_col1_rerun.Status = models.TASK_CANCELLED
err = db.Update(task_row1_col1_rerun)
assert.Nil(t, err)
- status, err = services.ComputePipelineStatus(pipeline)
+ status, err = services.ComputePipelineStatus(pipeline, false)
assert.Nil(t, err)
assert.Equal(t, models.TASK_PARTIAL, status)
}