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
 	}