diff --git a/lib/bdev.py b/lib/bdev.py index 13b856625048cf6ea82ddfbb3cb0dca52b2c0384..7904eeab6c24cb42540f58bae99a7c94f86919df 100644 --- a/lib/bdev.py +++ b/lib/bdev.py @@ -230,6 +230,20 @@ class BlockDev(object): result = result and child.SetSyncSpeed(speed) return result + def PauseResumeSync(self, pause): + """Pause/Resume the sync of the mirror. + + In case this is not a mirroring device, this is no-op. + + @param pause: Wheater to pause or resume + + """ + result = True + if self._children: + for child in self._children: + result = result and child.PauseResumeSync(pause) + return result + def GetSyncStatus(self): """Returns the sync status of the device. @@ -1488,6 +1502,30 @@ class DRBD8(BaseDRBD): children_result = super(DRBD8, self).SetSyncSpeed(kbytes) return self._SetMinorSyncSpeed(self.minor, kbytes) and children_result + def PauseResumeSync(self, pause): + """Pauses or resumes the sync of a DRBD device. + + @param pause: Wether to pause or resume + @return: the success of the operation + + """ + if self.minor is None: + logging.info("Not attached during PauseSync") + return False + + children_result = super(DRBD8, self).PauseResumeSync(pause) + + if pause: + cmd = "pause-sync" + else: + cmd = "resume-sync" + + result = utils.RunCmd(["drbdsetup", self.dev_path, cmd]) + if result.failed: + logging.error("Can't %s: %s - %s", cmd, + result.fail_reason, result.output) + return not result.failed and children_result + def GetProcStatus(self): """Return device data from /proc.