refac: atomic merge, lost-update race, RunPurge cost, duplicated walks

This commit is contained in:
Florian Sylvain committed 2026-10-21 22:47:46 +02:00
1 parent 0fc3511e2b
commit 074944c99a
45 files changed
+2204 -267

No files matched your search

+5 -5
View File
@@ -31,7 +31,7 @@ type schedulerEnv struct {
func newSchedulerEnv(t *testing.T) *schedulerEnv {
t.Helper()
env := newPurgeEnv(t)
merge := useCases.NewMergeMediaUseCase(env.images, env.articles, env.storage, newMockVariantFileRepo(), discardRecorder, plainSites(), plainAuthors(), newMockContentTypeRepo(), newMockEntryRepo())
merge := newTestMergeMedia(env.images, env.articles, env.storage, newMockVariantFileRepo(), discardRecorder, plainSites(), plainAuthors(), newMockContentTypeRepo(), newMockEntryRepo())
now := func() time.Time { return env.clock }
runPurge := useCases.NewRunPurgeUseCase(env.images, env.articles, merge, env.purgeSettings, now, log.New(env.logs, "", 0), discardRecorder, plainSites(), plainAuthors())
return &schedulerEnv{
@@ -64,7 +64,7 @@ func (e *schedulerEnv) seedPlannedGroup() {
func (e *schedulerEnv) tick(t *testing.T, at string) (bool, error) {
t.Helper()
_, ran, err := e.scheduler.Tick(*purgeTime(at))
_, ran, err := e.scheduler.Tick(testCtx, *purgeTime(at))
return ran, err
}
@@ -294,7 +294,7 @@ func TestPurgeSchedulerReportsTheRunResult(t *testing.T) {
env.configureDue()
env.seedPlannedGroup()
result, ran, err := env.scheduler.Tick(*purgeTime(schedulerClock))
result, ran, err := env.scheduler.Tick(testCtx, *purgeTime(schedulerClock))
want := purge.RunResult{GroupsTotal: 1, GroupsPurged: 1, Merged: 1, ArticlesUpdated: 1}
if err != nil || !ran || result != want {
@@ -305,7 +305,7 @@ func TestPurgeSchedulerReportsTheRunResult(t *testing.T) {
t.Run("A Tick that is not due returns an empty result", func(t *testing.T) {
env := newSchedulerEnv(t)
result, ran, err := env.scheduler.Tick(*purgeTime(schedulerClock))
result, ran, err := env.scheduler.Tick(testCtx, *purgeTime(schedulerClock))
if err != nil || ran || result != (purge.RunResult{}) {
t.Errorf("unexpected %+v, %v, %v", result, ran, err)
@@ -466,7 +466,7 @@ func newSchedulerJobFake(results ...schedulerJobResult) *schedulerJobFake {
return &schedulerJobFake{results: results, entered: make(chan time.Time, 16)}
}
func (f *schedulerJobFake) Tick(now time.Time) (purge.RunResult, bool, error) {
func (f *schedulerJobFake) Tick(_ context.Context, now time.Time) (purge.RunResult, bool, error) {
f.mu.Lock()
f.calls = append(f.calls, now)
var result schedulerJobResult