* feat(s3/lifecycle): delete streaming algorithm path (Phase 5b)
Phase 5a (PR #9465) retired the algorithm flag and made daily_replay
the only execution path. The streaming-side code (scheduler.Scheduler,
scheduler.BucketBootstrapper, dispatcher.Pipeline, dispatcher.Dispatcher,
dispatcher.FilerPersister, and their tests) has had no in-tree caller
since then. This PR deletes it.
Net change: ~4800 lines removed, ~130 added (the scheduler/configload
tests' helper file the deleted bootstrap_test.go used to host).
Removed:
- weed/s3api/s3lifecycle/scheduler/{bootstrap,bootstrap_test,
scheduler,scheduler_test,pipeline_fanout_test,
refresh_default,refresh_s3tests}.go
- weed/s3api/s3lifecycle/dispatcher/{dispatcher,dispatcher_test,
dispatcher_helpers_test,edge_cases_test,multi_shard_test,
pipeline,pipeline_test,pipeline_helpers_test,toproto_test,
dispatch_ticks_default,dispatch_ticks_s3tests}.go
- weed/s3api/s3lifecycle/dispatcher/filer_persister_test.go
(FilerPersister deleted; FilerStore tests don't need their own
file)
- weed/shell/command_s3_lifecycle_run_shard{,_test}.go
(debug-only shell command that only ever wrapped the streaming
pipeline; the production worker now exercises the same path
every daily run)
Trimmed:
- dispatcher/filer_persister.go down to FilerStore +
NewFilerStoreClient — the small interface daily_replay's cursor
persister (dailyrun.FilerCursorPersister) plugs into.
Kept (still consumed by daily_replay):
- scheduler/configload.{go,_test.go} (LoadCompileInputs,
AllActivePriorStates)
- dispatcher/sibling_lister.{go,_test.go} (NewFilerSiblingLister,
FilerSiblingLister)
- dispatcher/filer_persister.go (FilerStore, NewFilerStoreClient)
scheduler/testhelpers_test.go restores fakeFilerClient, fakeListStream,
dirEntry, fileEntry — helpers the configload tests used to share with
the deleted bootstrap_test.go.
Updates the handler-package doc strings and one reader-package
comment that still named the streaming pipeline.
* fix(s3/lifecycle): hold lock through tree read in test filer client
gemini caught an inconsistency in scheduler/testhelpers_test.go:
LookupDirectoryEntry reads c.tree under c.mu, but ListEntries was
releasing the lock before reading c.tree. The map is effectively
static during tests so there's no actual race today, but matching
the convention keeps the helper safe if a future test mutates the
tree mid-run.
* test(s3/lifecycle): cover reader cursor + Run validation contracts
Layer 2 tests pinning four reader-package contracts the dispatcher
pipeline depends on: MinTsNs anchors at frozen positions, Snapshot
returns a deep copy in both directions, Restore replaces (not merges),
and Run validates ShardID/Events/BucketsPath before subscribing.
* test(s3/lifecycle): tighten cursor composition assertions
Snapshot deep-copy: also assert cursor doesn't see keys added to the
returned map. Restore replace: freeze before second Restore and assert
IsFrozen returns false after, pinning the contract that Restore wipes
frozen state alongside the value map. Run validation: bound the call
with a 5s context timeout so a regression that lets Run reach the nil
client surfaces as a failure instead of a hang.