Revision f208978a lib/bdev.py

b/lib/bdev.py
238 238
                                  sync_percent=None,
239 239
                                  estimated_time=None,
240 240
                                  is_degraded=False,
241
                                  ldisk_degraded=False)
241
                                  ldisk_status=constants.LDS_OKAY)
242 242

  
243 243
  def CombinedSyncStatus(self):
244 244
    """Calculate the mirror status recursively for our children.
......
255 255
    min_percent = status.sync_percent
256 256
    max_time = status.estimated_time
257 257
    is_degraded = status.is_degraded
258
    ldisk_degraded = status.ldisk_degraded
258
    ldisk_status = status.ldisk_status
259 259

  
260 260
    if self._children:
261 261
      for child in self._children:
......
272 272
          max_time = max(max_time, child_status.estimated_time)
273 273

  
274 274
        is_degraded = is_degraded or child_status.is_degraded
275
        ldisk_degraded = ldisk_degraded or child_status.ldisk_degraded
275

  
276
        if ldisk_status is None:
277
          ldisk_status = child_status.ldisk_status
278
        elif child_status.ldisk_status is not None:
279
          ldisk_status = max(ldisk_status, child_status.ldisk_status)
276 280

  
277 281
    return objects.BlockDevStatus(dev_path=self.dev_path,
278 282
                                  major=self.major,
......
280 284
                                  sync_percent=min_percent,
281 285
                                  estimated_time=max_time,
282 286
                                  is_degraded=is_degraded,
283
                                  ldisk_degraded=ldisk_degraded)
287
                                  ldisk_status=ldisk_status)
284 288

  
285 289

  
286 290
  def SetInfo(self, text):
......
532 536
    @rtype: objects.BlockDevStatus
533 537

  
534 538
    """
539
    if self._degraded:
540
      ldisk_status = constants.LDS_FAULTY
541
    else:
542
      ldisk_status = constants.LDS_OKAY
543

  
535 544
    return objects.BlockDevStatus(dev_path=self.dev_path,
536 545
                                  major=self.major,
537 546
                                  minor=self.minor,
538 547
                                  sync_percent=None,
539 548
                                  estimated_time=None,
540 549
                                  is_degraded=self._degraded,
541
                                  ldisk_degraded=self._degraded)
550
                                  ldisk_status=ldisk_status)
542 551

  
543 552
  def Open(self, force=False):
544 553
    """Make the device ready for I/O.
......
1335 1344
      _ThrowError("drbd%d: can't Attach() in GetSyncStatus", self._aminor)
1336 1345

  
1337 1346
    stats = self.GetProcStatus()
1338
    ldisk_degraded = not stats.is_disk_uptodate
1339
    is_degraded = not stats.is_connected
1347
    is_degraded = not stats.is_connected or not stats.is_disk_uptodate
1348

  
1349
    if stats.is_disk_uptodate:
1350
      ldisk_status = constants.LDS_OKAY
1351
    elif stats.is_diskless:
1352
      ldisk_status = constants.LDS_FAULTY
1353
    else:
1354
      ldisk_status = constants.LDS_UNKNOWN
1340 1355

  
1341 1356
    return objects.BlockDevStatus(dev_path=self.dev_path,
1342 1357
                                  major=self.major,
1343 1358
                                  minor=self.minor,
1344 1359
                                  sync_percent=stats.sync_percent,
1345 1360
                                  estimated_time=stats.est_time,
1346
                                  is_degraded=(is_degraded or ldisk_degraded),
1347
                                  ldisk_degraded=ldisk_degraded)
1361
                                  is_degraded=is_degraded,
1362
                                  ldisk_status=ldisk_status)
1348 1363

  
1349 1364
  def Open(self, force=False):
1350 1365
    """Make the local state primary.

Also available in: Unified diff