fix: rerun pipeline deadlock (#6939) (#6940)
Co-authored-by: Klesh Wong <zhenmian.huang@merico.dev>
diff --git a/backend/server/api/task/task.go b/backend/server/api/task/task.go
index cd5a02f..f43e574 100644
--- a/backend/server/api/task/task.go
+++ b/backend/server/api/task/task.go
@@ -18,12 +18,13 @@
package task
import (
+ "net/http"
+ "strconv"
+
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/core/models"
"github.com/apache/incubator-devlake/server/api/shared"
"github.com/apache/incubator-devlake/server/services"
- "net/http"
- "strconv"
"github.com/gin-gonic/gin"
)
@@ -63,7 +64,7 @@
shared.ApiOutputError(c, errors.BadInput.Wrap(err, "invalid pipeline ID format"))
return
}
- tasks, err := services.GetTasksWithLastStatus(pipelineId, true)
+ tasks, err := services.GetTasksWithLastStatus(pipelineId, true, nil)
if err != nil {
shared.ApiOutputError(c, errors.Default.Wrap(err, "error getting tasks"))
return
diff --git a/backend/server/services/pipeline.go b/backend/server/services/pipeline.go
index 70e0e50..1783c94 100644
--- a/backend/server/services/pipeline.go
+++ b/backend/server/services/pipeline.go
@@ -445,7 +445,7 @@
}
failedTasks = append(failedTasks, task)
} else {
- tasks, err := GetTasksWithLastStatus(pipelineId, false)
+ tasks, err := GetTasksWithLastStatus(pipelineId, false, tx)
if err != nil {
return nil, errors.Default.Wrap(err, "error getting tasks")
}
diff --git a/backend/server/services/task.go b/backend/server/services/task.go
index 9c4922e..885014f 100644
--- a/backend/server/services/task.go
+++ b/backend/server/services/task.go
@@ -110,9 +110,12 @@
// GetTasksWithLastStatus returns task list of the pipeline, only the most recently tasks would be returned
// TODO: adopts GetLatestTasksOfPipeline
-func GetTasksWithLastStatus(pipelineId uint64, shouldSanitize bool) ([]*models.Task, errors.Error) {
+func GetTasksWithLastStatus(pipelineId uint64, shouldSanitize bool, tx dal.Dal) ([]*models.Task, errors.Error) {
+ if tx == nil {
+ tx = db
+ }
var tasks []*models.Task
- err := db.All(&tasks, dal.Where("pipeline_id = ?", pipelineId), dal.Orderby("id DESC"))
+ err := tx.All(&tasks, dal.Where("pipeline_id = ?", pipelineId), dal.Orderby("id DESC"))
if err != nil {
return nil, err
}