Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion backend/core/models/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"`
Expand Down
7 changes: 7 additions & 0 deletions backend/server/services/blueprint.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
34 changes: 34 additions & 0 deletions backend/server/services/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ package services
import (
"fmt"
"github.com/apache/incubator-devlake/helpers/pluginhelper/services"
"golang.org/x/exp/slices"
"golang.org/x/sync/errgroup"
"strings"
"time"
Expand Down Expand Up @@ -322,6 +323,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
Expand All @@ -333,6 +359,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
Expand Down