diff --git a/controller/volume_controller.go b/controller/volume_controller.go index 58edeb02a9..3f1f7fcc03 100644 --- a/controller/volume_controller.go +++ b/controller/volume_controller.go @@ -1208,11 +1208,14 @@ func (vc *VolumeController) ReconcileVolumeState(v *longhorn.Volume, es map[stri continue } if v.Spec.DataLocality == longhorn.DataLocalityStrictLocal { - if v.Spec.NodeID == "" { - continue + if v.Status.RestoreRequired { + r.Spec.HardNodeAffinity = v.Status.OwnerID + } else { + if v.Spec.NodeID == "" { + continue + } + r.Spec.HardNodeAffinity = v.Spec.NodeID } - - r.Spec.HardNodeAffinity = v.Spec.NodeID } scheduledReplica, multiError, err := vc.scheduler.ScheduleReplica(r, rs, v) diff --git a/types/types.go b/types/types.go index 9f41e156e5..a15d458e50 100644 --- a/types/types.go +++ b/types/types.go @@ -239,7 +239,7 @@ const ( ) // SettingsRelatedToVolume should match the items in datastore.GetLabelsForVolumesFollowsGlobalSettings -// TODO: May need to add the data locality check +// TODO: May need to add the data locality check var SettingsRelatedToVolume = map[string]string{ string(SettingNameReplicaAutoBalance): LonghornLabelValueIgnored, string(SettingNameSnapshotDataIntegrity): LonghornLabelValueIgnored,