fix: wire NodeProvider into CLI checkpoint cleanup path

The -cleanup-checkpoints CLI flag called CleanupCheckpoints without
initializing the MemoryStore singleton or setting its NodeProvider,
so it silently fell back to legacy clean-everything behavior and
could delete checkpoints for hosts with running jobs. Inject the job
repository as NodeProvider the same way runServer does, so the CLI
path also skips used hosts. Also update SetNodeProvider's doc comment,
which only mentioned Free but is now also consulted by FromCheckpoint
and CleanupCheckpoints.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Aditya Ujeniya
2026-07-08 14:31:26 +02:00
parent 33a1bd3529
commit ea2bfbb6aa
2 changed files with 10 additions and 3 deletions
+5
View File
@@ -589,6 +589,11 @@ func run() error {
cleanupDir = metricstore.Keys.Cleanup.RootDir
}
// Wire the job repository as NodeProvider so cleanup skips hosts
// with running jobs (same injection as runServer).
metricstore.InitMetrics(metricstore.BuildMetricList())
metricstore.GetMemoryStore().SetNodeProvider(repository.GetJobRepository())
cclog.Infof("Cleaning up checkpoints older than %s...", from.Format(time.RFC3339))
n, err := metricstore.CleanupCheckpoints(
metricstore.Keys.Checkpoints.RootDir, cleanupDir, from.Unix(), deleteMode)
+5 -3
View File
@@ -251,9 +251,11 @@ func (ms *MemoryStore) GetMetricFrequency(metricName string) (int64, error) {
}
// SetNodeProvider sets the NodeProvider implementation for the MemoryStore.
// This must be called during initialization to provide job state information
// for selective buffer retention during Free operations.
// If not set, the Free function will fall back to freeing all buffers.
// The provider supplies the set of nodes in use by running jobs, which is
// consulted by Free (selective buffer retention), FromCheckpoint (full-history
// loading for used hosts), and CleanupCheckpoints (skipping used hosts).
// It must be set before Init(): the checkpoint load inside Init reads it.
// If not set, all three fall back to their provider-less behavior.
func (ms *MemoryStore) SetNodeProvider(provider NodeProvider) {
ms.nodeProvider = provider
}