From ddbdd424536fede7f9eae54faef0473c616bf02a Mon Sep 17 00:00:00 2001
From: Travis Ralston <travpc@gmail.com>
Date: Tue, 1 Aug 2023 17:17:48 -0600
Subject: [PATCH] Fix unfinished task scheduling

---
 cmd/media_repo/main.go |  7 -------
 tasks/all.go           |  2 ++
 tasks/exec.go          |  4 ++++
 tasks/schedule.go      | 18 ++++++++++++++++++
 4 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/cmd/media_repo/main.go b/cmd/media_repo/main.go
index 88c1509f..4f4f58c8 100644
--- a/cmd/media_repo/main.go
+++ b/cmd/media_repo/main.go
@@ -73,13 +73,6 @@ func main() {
 	logrus.Info("Starting up...")
 	runtime.RunStartupSequence()
 
-	logrus.Info("Checking background tasks...")
-	err = scanAndStartUnfinishedTasks()
-	if err != nil {
-		sentry.CaptureException(err)
-		logrus.Fatal(err)
-	}
-
 	logrus.Info("Starting recurring tasks...")
 	tasks.StartAll()
 
diff --git a/tasks/all.go b/tasks/all.go
index 713ef16b..a4eb7e01 100644
--- a/tasks/all.go
+++ b/tasks/all.go
@@ -10,6 +10,8 @@ func StartAll() {
 	scheduleHourly(RecurringTaskPurgeRemoteMedia, task_runner.PurgeRemoteMedia)
 	scheduleHourly(RecurringTaskPurgeThumbnails, task_runner.PurgeThumbnails)
 	scheduleHourly(RecurringTaskPurgePreviews, task_runner.PurgePreviews)
+
+	scheduleUnfinished()
 }
 
 func StopAll() {
diff --git a/tasks/exec.go b/tasks/exec.go
index dc9d3ca8..a8eab10c 100644
--- a/tasks/exec.go
+++ b/tasks/exec.go
@@ -56,6 +56,10 @@ func tryBeginTask(id int, recur bool) {
 }
 
 func beginTask(task *database.DbTask) {
+	if task.EndTs > 0 {
+		return // just skip it
+	}
+	// TODO: Worker group: https://github.com/turt2live/matrix-media-repo/issues/425
 	runnerCtx := rcontext.Initial().LogWithFields(logrus.Fields{"task_id": task.TaskId})
 	if task.Name == string(TaskDatastoreMigrate) {
 		go task_runner.DatastoreMigrate(runnerCtx, task)
diff --git a/tasks/schedule.go b/tasks/schedule.go
index c1f394b2..9821a7cb 100644
--- a/tasks/schedule.go
+++ b/tasks/schedule.go
@@ -5,6 +5,7 @@ import (
 	"sync"
 	"time"
 
+	"github.com/getsentry/sentry-go"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common/rcontext"
 	"github.com/turt2live/matrix-media-repo/database"
@@ -97,6 +98,23 @@ func stopRecurring() {
 	}
 }
 
+func scheduleUnfinished() {
+	if ids.GetMachineId() != 0 {
+		return // don't schedule here
+	}
+	ctx := rcontext.Initial().LogWithFields(logrus.Fields{"startup": true})
+	taskDb := database.GetInstance().Tasks.Prepare(ctx)
+	tasks, err := taskDb.GetAll(false)
+	if err != nil {
+		sentry.CaptureException(err)
+		ctx.Log.Fatal("Error getting unfinished tasks: ", err)
+		return
+	}
+	for _, task := range tasks {
+		beginTask(task)
+	}
+}
+
 func RunDatastoreMigration(ctx rcontext.RequestContext, sourceDsId string, targetDsId string, beforeTs int64) (*database.DbTask, error) {
 	return scheduleTask(ctx, TaskDatastoreMigrate, task_runner.DatastoreMigrateParams{
 		SourceDsId: sourceDsId,
-- 
GitLab