summaryrefslogtreecommitdiff
path: root/internal/cleaner
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2023-11-04 20:21:20 +0000
committerLibravatar GitHub <noreply@github.com>2023-11-04 20:21:20 +0000
commit41435a6c4ee0a5b52528890edf3fbf5a9dc0a6c8 (patch)
tree987b5d7787b24f6f6e340bbcf7fd1b052fe40dfc /internal/cleaner
parent[docs/bugfix] fix link to swagger yaml (#2333) (diff)
downloadgotosocial-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.go31
-rw-r--r--internal/cleaner/cleaner_test.go4
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.