R-518 option A: one stop per backup tier (09 §3 decision 156)
Each quiesce window now backs up ONLY the first due tier that starts and resumes the apps at its snapshotted; the upload finishes with the apps running. Any other due tier stays due and a later cycle (the next poll) takes it in its own short window - never straight after the first. This reverses R-82's 'ONE quiesce window for both due tiers'. A manual press (TriggerNow) backs up the primary (local) tier only, picked by the agent's Primary flag; the off-site tier follows at the next scheduled night run. If no available tier is flagged primary, the first available tier is backed up rather than nothing. Unchanged: marker written before any stop, one unquiesce per window, the max-quiesce bound, BUSY/start-error handling (the next tier is still tried in the same window when a tier does not start), breaker and contention. Tests: TestBothTiersDue_ExactlyOneQuiesceWindow -> TestBothTiersDue_FirstCycleRunsOnlyFirstTier; TestNonLastTierSnapshot_ DoesNotResumeApp -> TestFirstTierSnapshot_ResumesAppWhileUploadContinues (red on old code); new TestManualPress_RunsOnlyLocalTier (red on old code), TestLeftoverTier_RunsInNextCycleInItsOwnWindow, TestManualRunTiers_NoPrimaryAvailable_BacksUpFirstAvailable; TestNotify_BothFailingTiersAreReported now runs two cycles. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -145,8 +145,12 @@ func TestNotify_BothFailingTiersAreReported(t *testing.T) {
|
||||
rec := &recNotifier{}
|
||||
l.SetTierNotifier(rec)
|
||||
|
||||
if err := l.runOnce(context.Background()); err != nil {
|
||||
t.Fatal(err)
|
||||
// `09` §3 decision 156: one tier per window, so the second tier is reached by the NEXT cycle —
|
||||
// where the failed first tier is now in backoff and must not stand in its way.
|
||||
for cycle := 1; cycle <= 2; cycle++ {
|
||||
if err := l.runOnce(context.Background()); err != nil {
|
||||
t.Fatalf("cycle %d: %v", cycle, err)
|
||||
}
|
||||
}
|
||||
gotLocal, gotPBS := rec.count("failed", "local"), rec.count("failed", "felhom-pbs")
|
||||
if gotLocal != 1 || gotPBS != 1 {
|
||||
|
||||
Reference in New Issue
Block a user