This is an automated email from the ASF dual-hosted git repository.
lynwee pushed a commit to branch release-v1.0
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/release-v1.0 by this push:
new a1933f375 fix(project): project cannot be deleted when its pipelines
are not finished (#8082)
a1933f375 is described below
commit a1933f375c03b80f8a1158e135b9828163ad78b1
Author: Lynwee <[email protected]>
AuthorDate: Fri Sep 20 11:52:43 2024 +0800
fix(project): project cannot be deleted when its pipelines are not finished
(#8082)
---
backend/core/models/task.go | 5 ++++-
backend/server/services/blueprint.go | 7 +++++++
backend/server/services/project.go | 34 ++++++++++++++++++++++++++++++++++
3 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/backend/core/models/task.go b/backend/core/models/task.go
index 661ba091a..34be9eff7 100644
--- a/backend/core/models/task.go
+++ b/backend/core/models/task.go
@@ -34,7 +34,10 @@ const (
TASK_PARTIAL = "TASK_PARTIAL"
)
-var PendingTaskStatus = []string{TASK_CREATED, TASK_RERUN, TASK_RUNNING}
+var (
+ PendingTaskStatus = []string{TASK_CREATED, TASK_RERUN, TASK_RUNNING}
+ FinishedTaskStatus = []string{TASK_PARTIAL, TASK_CANCELLED,
TASK_FAILED, TASK_COMPLETED}
+)
type TaskProgressDetail struct {
TotalSubTasks int `json:"totalSubTasks"`
diff --git a/backend/server/services/blueprint.go
b/backend/server/services/blueprint.go
index d400abae2..037149d0b 100644
--- a/backend/server/services/blueprint.go
+++ b/backend/server/services/blueprint.go
@@ -238,6 +238,13 @@ func DeleteBlueprint(id uint64) errors.Error {
if err != nil {
return err
}
+ pipelinesAreUnfinished, err :=
thereAreUnfinishedPipelinesUnderBlueprint(bp.ID)
+ if err != nil {
+ return err
+ }
+ if pipelinesAreUnfinished {
+ return errors.Default.New("There are unfinished pipelines under
current blueprint. It can not be deleted now.")
+ }
err = bpManager.DeleteBlueprint(bp.ID)
if err != nil {
return errors.Default.Wrap(err, "Failed to delete the
blueprint")
diff --git a/backend/server/services/project.go
b/backend/server/services/project.go
index 8e9528d38..8ef169781 100644
--- a/backend/server/services/project.go
+++ b/backend/server/services/project.go
@@ -19,6 +19,7 @@ package services
import (
"fmt"
+ "golang.org/x/exp/slices"
"golang.org/x/sync/errgroup"
"strings"
"time"
@@ -321,6 +322,31 @@ func PatchProject(name string, body
map[string]interface{}) (*models.ApiOutputPr
return makeProjectOutput(project, false)
}
+func thereAreUnfinishedPipelinesUnderProject(projectName string) (bool,
errors.Error) {
+ blueprint, err := GetBlueprintByProjectName(projectName)
+ if err != nil {
+ return false, err
+ }
+ return thereAreUnfinishedPipelinesUnderBlueprint(blueprint.ID)
+}
+
+func thereAreUnfinishedPipelinesUnderBlueprint(blueprintID uint64) (bool,
errors.Error) {
+ // get the first page
+ dbPipelines, count, err := GetDbPipelines(&PipelineQuery{BlueprintId:
blueprintID})
+ if err != nil {
+ return false, err
+ }
+ if count <= 0 {
+ return false, nil
+ }
+ for _, pipeline := range dbPipelines {
+ if !slices.Contains(models.FinishedTaskStatus, pipeline.Status)
{
+ return true, nil
+ }
+ }
+ return false, nil
+}
+
// DeleteProject FIXME ...
func DeleteProject(name string) errors.Error {
// verify input
@@ -332,6 +358,14 @@ func DeleteProject(name string) errors.Error {
if err != nil {
return err
}
+ // make sure there is no running pipelines in current projects
+ pipelinesAreUnfinished, err :=
thereAreUnfinishedPipelinesUnderProject(name)
+ if err != nil {
+ return err
+ }
+ if pipelinesAreUnfinished {
+ return errors.Default.New("There are unfinished pipelines under
current project. It can not be deleted now.")
+ }
err = deleteProjectBlueprint(name)
if err != nil {
return err