sync_percent=None,
estimated_time=None,
is_degraded=False,
- ldisk_degraded=False)
+ ldisk_status=constants.LDS_OKAY)
def CombinedSyncStatus(self):
"""Calculate the mirror status recursively for our children.
min_percent = status.sync_percent
max_time = status.estimated_time
is_degraded = status.is_degraded
- ldisk_degraded = status.ldisk_degraded
+ ldisk_status = status.ldisk_status
if self._children:
for child in self._children:
max_time = max(max_time, child_status.estimated_time)
is_degraded = is_degraded or child_status.is_degraded
- ldisk_degraded = ldisk_degraded or child_status.ldisk_degraded
+
+ if ldisk_status is None:
+ ldisk_status = child_status.ldisk_status
+ elif child_status.ldisk_status is not None:
+ ldisk_status = max(ldisk_status, child_status.ldisk_status)
return objects.BlockDevStatus(dev_path=self.dev_path,
major=self.major,
sync_percent=min_percent,
estimated_time=max_time,
is_degraded=is_degraded,
- ldisk_degraded=ldisk_degraded)
+ ldisk_status=ldisk_status)
def SetInfo(self, text):
@rtype: objects.BlockDevStatus
"""
+ if self._degraded:
+ ldisk_status = constants.LDS_FAULTY
+ else:
+ ldisk_status = constants.LDS_OKAY
+
return objects.BlockDevStatus(dev_path=self.dev_path,
major=self.major,
minor=self.minor,
sync_percent=None,
estimated_time=None,
is_degraded=self._degraded,
- ldisk_degraded=self._degraded)
+ ldisk_status=ldisk_status)
def Open(self, force=False):
"""Make the device ready for I/O.
_ThrowError("drbd%d: can't Attach() in GetSyncStatus", self._aminor)
stats = self.GetProcStatus()
- ldisk_degraded = not stats.is_disk_uptodate
- is_degraded = not stats.is_connected
+ is_degraded = not stats.is_connected or not stats.is_disk_uptodate
+
+ if stats.is_disk_uptodate:
+ ldisk_status = constants.LDS_OKAY
+ elif stats.is_diskless:
+ ldisk_status = constants.LDS_FAULTY
+ else:
+ ldisk_status = constants.LDS_UNKNOWN
return objects.BlockDevStatus(dev_path=self.dev_path,
major=self.major,
minor=self.minor,
sync_percent=stats.sync_percent,
estimated_time=stats.est_time,
- is_degraded=(is_degraded or ldisk_degraded),
- ldisk_degraded=ldisk_degraded)
+ is_degraded=is_degraded,
+ ldisk_status=ldisk_status)
def Open(self, force=False):
"""Make the local state primary.
result = False
else:
if ldisk:
- result = result and not rstats.payload.ldisk_degraded
+ result = result and rstats.payload.ldisk_status == constants.LDS_OKAY
else:
result = result and not rstats.payload.is_degraded
return (status.dev_path, status.major, status.minor,
status.sync_percent, status.estimated_time,
- status.is_degraded, status.ldisk_degraded)
+ status.is_degraded, status.ldisk_status)
def _ComputeDiskStatus(self, instance, snode, dev):
"""Compute block device status.
if not status:
return "not active"
txt = ""
- (path, major, minor, syncp, estt, degr, ldisk) = status
+ (path, major, minor, syncp, estt, degr, ldisk_status) = status
if major is None:
major_string = "N/A"
else:
degr_text = "*DEGRADED*"
else:
degr_text = "ok"
- if ldisk:
+ if ldisk_status == constants.LDS_FAULTY:
ldisk_text = " *MISSING DISK*"
+ elif ldisk_status == constants.LDS_UNKNOWN:
+ ldisk_text = " *UNCERTAIN STATE*"
else:
ldisk_text = ""
txt += (" %s, status %s%s" % (sync_text, degr_text, ldisk_text))
elif dtype == constants.LD_LV:
- if ldisk:
+ if ldisk_status == constants.LDS_FAULTY:
ldisk_text = " *FAILED* (failed drive?)"
else:
ldisk_text = ""