What's wrong
DataBackup.OnceHandler.GetOperationStatus() in pkg/controllers/v1alpha1/databackup/status_handler.go has an unresolved TODO:
// TODO: inject nodeaffinity like other data operations when using job instead of pod
DataLoad, DataMigrate, and DataProcess all call dataflow.GenerateNodeAffinity(job) after a successful operation to populate status.nodeAffinity. This allows downstream runAfter operations to be scheduled on the same node where the data was cached, improving cache hit rates.
DataBackup uses a Pod instead of a Job, so dataflow.GenerateNodeAffinity(*batchv1.Job) cannot be called directly. As a result, DataBackup.Status.NodeAffinity is never set, breaking the dataflow affinity chain for any operation that depends on a DataBackup via runAfter.
Proposed fix
- Add
GenerateNodeAffinityFromPod(pod *corev1.Pod) to pkg/dataflow/helper.go, applying the same annotation-based logic as the existing GenerateNodeAffinity(job *batchv1.Job)
- Call it in
DataBackup.OnceHandler.GetOperationStatus() after the pod succeeds, same as other handlers do for jobs
I'd like to work on this.
What's wrong
DataBackup.OnceHandler.GetOperationStatus()inpkg/controllers/v1alpha1/databackup/status_handler.gohas an unresolved TODO:// TODO: inject nodeaffinity like other data operations when using job instead of podDataLoad,DataMigrate, andDataProcessall calldataflow.GenerateNodeAffinity(job)after a successful operation to populatestatus.nodeAffinity. This allows downstreamrunAfteroperations to be scheduled on the same node where the data was cached, improving cache hit rates.DataBackupuses a Pod instead of a Job, sodataflow.GenerateNodeAffinity(*batchv1.Job)cannot be called directly. As a result,DataBackup.Status.NodeAffinityis never set, breaking the dataflow affinity chain for any operation that depends on a DataBackup viarunAfter.Proposed fix
GenerateNodeAffinityFromPod(pod *corev1.Pod)topkg/dataflow/helper.go, applying the same annotation-based logic as the existingGenerateNodeAffinity(job *batchv1.Job)DataBackup.OnceHandler.GetOperationStatus()after the pod succeeds, same as other handlers do for jobsI'd like to work on this.