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.
@param filter_readonly: whether to skip over readonly VGs
@rtype: list
- @return: list of tuples (free_space, name) with free_space in mebibytes
+ @return: list of tuples (free_space, total_size, name) with free_space in
+ MiB
"""
try:
- info = cls._GetVolumeInfo("vgs", ["vg_name", "vg_free", "vg_attr"])
+ info = cls._GetVolumeInfo("vgs", ["vg_name", "vg_free", "vg_attr",
+ "vg_size"])
except errors.GenericError, err:
logging.error("Can't get VG information: %s", err)
return None
data = []
- for vg_name, vg_free, vg_attr in info:
+ for vg_name, vg_free, vg_attr, vg_size in info:
# (possibly) skip over vgs which are not writable
if filter_readonly and vg_attr[0] == "r":
continue
# (possibly) skip over vgs which are not in the right volume group(s)
if vg_names and vg_name not in vg_names:
continue
- data.append((float(vg_free), vg_name))
+ data.append((float(vg_free), float(vg_size), vg_name))
return data
def Snapshot(self, size):
"""Create a snapshot copy of an lvm block device.
+ @returns: tuple (vg, lv)
+
"""
snap_name = self._lv_name + ".snap"
vg_info = self.GetVGInfo([self._vg_name])
if not vg_info:
_ThrowError("Can't compute VG info for vg %s", self._vg_name)
- free_size, _ = vg_info[0]
+ free_size, _, _ = vg_info[0]
if free_size < size:
_ThrowError("Not enough free space: required %s,"
" available %s", size, free_size)
_ThrowError("command: %s error: %s - %s",
result.cmd, result.fail_reason, result.output)
- return snap_name
+ return (self._vg_name, snap_name)
def SetInfo(self, text):
"""Update metadata with info text.
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.