From 6289beb8f50893df850e0469cadbb40a19c70c3d Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 3 Mar 2026 18:49:37 -0800 Subject: [PATCH] fix: add ClusterContextProvider to shutdown test and handle status fetch errors Address PR review nitpicks: - Add ClusterContextProvider to TestGracefulShutdownDuringIteration so the scheduler loop actually starts (New() requires it). - Wrap schedulerStatusPromise await in try/catch in plugin.templ so a failed status fetch does not break refreshJobsAndActivities rendering. Co-Authored-By: Claude Opus 4.6 --- weed/admin/plugin/plugin_scheduler_test.go | 15 +++++++++------ weed/admin/view/app/plugin.templ | 7 ++++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/weed/admin/plugin/plugin_scheduler_test.go b/weed/admin/plugin/plugin_scheduler_test.go index 8db5c9e3b..118a4cf5d 100644 --- a/weed/admin/plugin/plugin_scheduler_test.go +++ b/weed/admin/plugin/plugin_scheduler_test.go @@ -834,19 +834,22 @@ func TestGracefulShutdownDuringIteration(t *testing.T) { pluginSvc, err := New(Options{ IdleSleepDuration: time.Millisecond, + ClusterContextProvider: func(_ context.Context) (*plugin_pb.ClusterContext, error) { + return &plugin_pb.ClusterContext{}, nil + }, }) if err != nil { t.Fatalf("New: %v", err) } - // Register an enabled job type. + // Register an enabled job type so the scheduler loop has work to consider. err = pluginSvc.SaveJobTypeConfig(&plugin_pb.PersistedJobTypeConfig{ JobType: "vacuum", AdminRuntime: &plugin_pb.AdminRuntimeConfig{ - Enabled: true, - DetectionTimeoutSeconds: 5, - MaxJobsPerDetection: 10, - GlobalExecutionConcurrency: 1, + Enabled: true, + DetectionTimeoutSeconds: 5, + MaxJobsPerDetection: 10, + GlobalExecutionConcurrency: 1, PerWorkerExecutionConcurrency: 1, }, }) @@ -860,7 +863,7 @@ func TestGracefulShutdownDuringIteration(t *testing.T) { }, }) - // Shutdown immediately — the scheduler loop should exit cleanly. + // Shutdown while the scheduler loop is actively iterating. done := make(chan struct{}) go func() { pluginSvc.Shutdown() diff --git a/weed/admin/view/app/plugin.templ b/weed/admin/view/app/plugin.templ index 492e494dc..d5114950d 100644 --- a/weed/admin/view/app/plugin.templ +++ b/weed/admin/view/app/plugin.templ @@ -2852,7 +2852,12 @@ templ Plugin(page string) { var allJobs = await allJobsPromise; var allActivities = await allActivitiesPromise; var schedulerStates = await schedulerPromise; - var schedulerStatus = await schedulerStatusPromise; + var schedulerStatus = null; + try { + schedulerStatus = await schedulerStatusPromise; + } catch (e) { + console.error('Failed to fetch scheduler status:', e); + } state.jobs = Array.isArray(allJobs) ? allJobs : []; state.activities = Array.isArray(allActivities) ? allActivities : [];