Revision 63c73073 lib/utils/lvm.py

b/lib/utils/lvm.py
22 22

  
23 23
"""
24 24

  
25
from ganeti import constants
26

  
27

  
25 28
def CheckVolumeGroupSize(vglist, vgname, minsize):
26 29
  """Checks if the volume group list is valid.
27 30

  
......
45 48
    return ("volume group '%s' too small (%s MiB required, %d MiB found)" %
46 49
            (vgname, minsize, vgsize))
47 50
  return None
51

  
52

  
53
def LvmExclusiveCheckNodePvs(pvs_info):
54
  """Check consistency of PV sizes in a node for exclusive storage.
55

  
56
  @type pvs_info: list
57
  @param pvs_info: list of L{LvmPvInfo} objects
58
  @rtype: list
59
  @return: A list of error strings described the violation found, or an empty
60
      list if everything is ok
61
  """
62
  errmsgs = []
63
  sizes = [pv.size for pv in pvs_info]
64
  # The sizes of PVs must be the same (tolerance is constants.PART_MARGIN)
65
  small = min(sizes)
66
  big = max(sizes)
67
  if LvmExclusiveTestBadPvSizes(small, big):
68
    m = ("Sizes of PVs are too different: min=%d max=%d" % (small, big))
69
    errmsgs.append(m)
70
  return errmsgs
71

  
72

  
73
def LvmExclusiveTestBadPvSizes(small, big):
74
  """Test if the given PV sizes are permitted with exclusive storage.
75

  
76
  @param small: size of the smallest PV
77
  @param big: size of the biggest PV
78
  @return: True when the given sizes are bad, False otherwise
79
  """
80
  # Test whether no X exists such that:
81
  #   small >= X * (1 - constants.PART_MARGIN)  and
82
  #   big <= X * (1 + constants.PART_MARGIN)
83
  return (small * (1 + constants.PART_MARGIN) <
84
          big * (1 - constants.PART_MARGIN))

Also available in: Unified diff