Revision b6e31c23

b/lib/cmdlib/cluster.py
2127 2127
                    "couldn't retrieve status for disk/%s on %s: %s",
2128 2128
                    idx, self.cfg.GetNodeName(nname), bdev_status)
2129 2129

  
2130
      if instance.disks_active and success and \
2131
         (bdev_status.is_degraded or
2132
          bdev_status.ldisk_status != constants.LDS_OKAY):
2133
        msg = "disk/%s on %s" % (idx, self.cfg.GetNodeName(nname))
2134
        if bdev_status.is_degraded:
2135
          msg += " is degraded"
2136
        if bdev_status.ldisk_status != constants.LDS_OKAY:
2137
          msg += "; state is '%s'" % \
2130
      if instance.disks_active and success and bdev_status.is_degraded:
2131
        msg = "disk/%s on %s is degraded" % (idx, self.cfg.GetNodeName(nname))
2132

  
2133
        code = self.ETYPE_ERROR
2134
        accepted_lds = [constants.LDS_OKAY, constants.LDS_SYNC]
2135

  
2136
        if bdev_status.ldisk_status in accepted_lds:
2137
          code = self.ETYPE_WARNING
2138

  
2139
        msg += "; local disk state is '%s'" % \
2138 2140
                 constants.LDS_NAMES[bdev_status.ldisk_status]
2139 2141

  
2140
        self._Error(constants.CV_EINSTANCEFAULTYDISK, instance.name, msg)
2142
        self._Error(constants.CV_EINSTANCEFAULTYDISK, instance.name, msg,
2143
                    code=code)
2141 2144

  
2142 2145
    self._ErrorIf(pnode_img.rpc_fail and not pnode_img.offline,
2143 2146
                  constants.CV_ENODERPC, self.cfg.GetNodeName(pnode_uuid),
b/lib/storage/drbd.py
653 653
      ldisk_status = constants.LDS_OKAY
654 654
    elif stats.is_diskless:
655 655
      ldisk_status = constants.LDS_FAULTY
656
    elif stats.is_in_resync:
657
      ldisk_status = constants.LDS_SYNC
656 658
    else:
657 659
      ldisk_status = constants.LDS_UNKNOWN
658 660

  
b/src/Ganeti/Constants.hs
773 773
ldsUnknown :: Int
774 774
ldsUnknown = Types.localDiskStatusToRaw DiskStatusUnknown
775 775

  
776
ldsSync :: Int
777
ldsSync = Types.localDiskStatusToRaw DiskStatusSync
778

  
776 779
ldsNames :: Map Int String
777 780
ldsNames =
778 781
  Map.fromList [ (Types.localDiskStatusToRaw ds,
b/src/Ganeti/Types.hs
813 813
-- Python code depends on:
814 814
--   DiskStatusOk < DiskStatusUnknown < DiskStatusFaulty
815 815
$(THH.declareILADT "LocalDiskStatus"
816
  [ ("DiskStatusFaulty",  3)
817
  , ("DiskStatusOk",      1)
818
  , ("DiskStatusUnknown", 2)
816
  [ ("DiskStatusOk",      1)
817
  , ("DiskStatusSync",    2)
818
  , ("DiskStatusUnknown", 3)
819
  , ("DiskStatusFaulty",  4)
819 820
  ])
820 821

  
821 822
localDiskStatusName :: LocalDiskStatus -> String
822 823
localDiskStatusName DiskStatusFaulty = "faulty"
823 824
localDiskStatusName DiskStatusOk = "ok"
825
localDiskStatusName DiskStatusSync = "syncing"
824 826
localDiskStatusName DiskStatusUnknown = "unknown"
825 827

  
826 828
-- | Replace disks type.
b/test/py/cmdlib/cluster_unittest.py
1492 1492

  
1493 1493
  @withLockedLU
1494 1494
  def testNotOkayDiskStatus(self, lu):
1495
    self.diskstatus[self.master_uuid][0][1].is_degraded = True
1495 1496
    self.diskstatus[self.master_uuid][0][1].ldisk_status = constants.LDS_FAULTY
1496 1497
    lu._VerifyInstance(self.running_inst, self.node_imgs, self.diskstatus)
1497 1498
    self.mcpu.assertLogContainsRegex("instance .* state is 'faulty'")

Also available in: Unified diff