diff options
author | 2023-11-04 20:21:20 +0000 | |
---|---|---|
committer | 2023-11-04 20:21:20 +0000 | |
commit | 41435a6c4ee0a5b52528890edf3fbf5a9dc0a6c8 (patch) | |
tree | 987b5d7787b24f6f6e340bbcf7fd1b052fe40dfc /internal/cleaner | |
parent | [docs/bugfix] fix link to swagger yaml (#2333) (diff) | |
download | gotosocial-41435a6c4ee0a5b52528890edf3fbf5a9dc0a6c8.tar.xz |
[feature] support canceling scheduled tasks, some federation API performance improvements (#2329)
Diffstat (limited to 'internal/cleaner')
-rw-r--r-- | internal/cleaner/cleaner.go | 31 | ||||
-rw-r--r-- | internal/cleaner/cleaner_test.go | 4 |
2 files changed, 18 insertions, 17 deletions
diff --git a/internal/cleaner/cleaner.go b/internal/cleaner/cleaner.go index 1139a85bb..a1209ae08 100644 --- a/internal/cleaner/cleaner.go +++ b/internal/cleaner/cleaner.go @@ -22,8 +22,6 @@ import ( "errors" "time" - "codeberg.org/gruf/go-runners" - "codeberg.org/gruf/go-sched" "codeberg.org/gruf/go-store/v2/storage" "github.com/superseriousbusiness/gotosocial/internal/config" "github.com/superseriousbusiness/gotosocial/internal/gtscontext" @@ -150,26 +148,27 @@ func (c *Cleaner) ScheduleJobs() error { firstCleanupAt = firstCleanupAt.Add(cleanupEvery) } - // Get ctx associated with scheduler run state. - done := c.state.Workers.Scheduler.Done() - doneCtx := runners.CancelCtx(done) - - // TODO: we'll need to do some thinking to make these - // jobs restartable if we want to implement reloads in - // the future that make call to Workers.Stop() -> Workers.Start(). + fn := func(ctx context.Context, start time.Time) { + log.Info(ctx, "starting media clean") + c.Media().All(ctx, config.GetMediaRemoteCacheDays()) + c.Emoji().All(ctx, config.GetMediaRemoteCacheDays()) + log.Infof(ctx, "finished media clean after %s", time.Since(start)) + } log.Infof(nil, "scheduling media clean to run every %s, starting from %s; next clean will run at %s", cleanupEvery, cleanupFromStr, firstCleanupAt, ) - // Schedule the cleaning tasks to execute according to given schedule. - c.state.Workers.Scheduler.Schedule(sched.NewJob(func(start time.Time) { - log.Info(nil, "starting media clean") - c.Media().All(doneCtx, config.GetMediaRemoteCacheDays()) - c.Emoji().All(doneCtx, config.GetMediaRemoteCacheDays()) - log.Infof(nil, "finished media clean after %s", time.Since(start)) - }).EveryAt(firstCleanupAt, cleanupEvery)) + // Schedule the cleaning to execute according to schedule. + if !c.state.Workers.Scheduler.AddRecurring( + "@mediacleanup", + firstCleanupAt, + cleanupEvery, + fn, + ) { + panic("failed to schedule @mediacleanup") + } return nil } diff --git a/internal/cleaner/cleaner_test.go b/internal/cleaner/cleaner_test.go index d23dac504..4524e9609 100644 --- a/internal/cleaner/cleaner_test.go +++ b/internal/cleaner/cleaner_test.go @@ -48,7 +48,7 @@ func (suite *CleanerTestSuite) SetupTest() { suite.state.Caches.Init() // Ensure scheduler started (even if unused). - suite.state.Workers.Scheduler.Start(nil) + suite.state.Workers.Scheduler.Start() // Initialize test database. _ = testrig.NewTestDB(&suite.state) @@ -58,6 +58,7 @@ func (suite *CleanerTestSuite) SetupTest() { suite.state.Storage = testrig.NewInMemoryStorage() // Initialize test cleaner instance. + testrig.StartWorkers(&suite.state) suite.cleaner = cleaner.New(&suite.state) // Allocate new test model emojis. @@ -66,6 +67,7 @@ func (suite *CleanerTestSuite) SetupTest() { func (suite *CleanerTestSuite) TearDownTest() { testrig.StandardDBTeardown(suite.state.DB) + testrig.StopWorkers(&suite.state) } // mapvals extracts a slice of values from the values contained within the map. |