Revision 7ea7bcf6 lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
6332 | 6332 |
self.op.remote_node = None |
6333 | 6333 |
if not hasattr(self.op, "iallocator"): |
6334 | 6334 |
self.op.iallocator = None |
6335 |
if not hasattr(self.op, "early_release"): |
|
6336 |
self.op.early_release = False |
|
6335 | 6337 |
|
6336 | 6338 |
TLReplaceDisks.CheckArguments(self.op.mode, self.op.remote_node, |
6337 | 6339 |
self.op.iallocator) |
... | ... | |
6363 | 6365 |
|
6364 | 6366 |
self.replacer = TLReplaceDisks(self, self.op.instance_name, self.op.mode, |
6365 | 6367 |
self.op.iallocator, self.op.remote_node, |
6366 |
self.op.disks, False) |
|
6368 |
self.op.disks, False, self.op.early_release)
|
|
6367 | 6369 |
|
6368 | 6370 |
self.tasklets = [self.replacer] |
6369 | 6371 |
|
... | ... | |
6410 | 6412 |
self.op.remote_node = None |
6411 | 6413 |
if not hasattr(self.op, "iallocator"): |
6412 | 6414 |
self.op.iallocator = None |
6415 |
if not hasattr(self.op, "early_release"): |
|
6416 |
self.op.early_release = False |
|
6413 | 6417 |
|
6414 | 6418 |
TLReplaceDisks.CheckArguments(constants.REPLACE_DISK_CHG, |
6415 | 6419 |
self.op.remote_node, |
... | ... | |
6456 | 6460 |
|
6457 | 6461 |
replacer = TLReplaceDisks(self, inst.name, constants.REPLACE_DISK_CHG, |
6458 | 6462 |
self.op.iallocator, self.op.remote_node, [], |
6459 |
True) |
|
6463 |
True, self.op.early_release)
|
|
6460 | 6464 |
tasklets.append(replacer) |
6461 | 6465 |
|
6462 | 6466 |
self.tasklets = tasklets |
... | ... | |
6498 | 6502 |
|
6499 | 6503 |
""" |
6500 | 6504 |
def __init__(self, lu, instance_name, mode, iallocator_name, remote_node, |
6501 |
disks, delay_iallocator): |
|
6505 |
disks, delay_iallocator, early_release):
|
|
6502 | 6506 |
"""Initializes this class. |
6503 | 6507 |
|
6504 | 6508 |
""" |
... | ... | |
6511 | 6515 |
self.remote_node = remote_node |
6512 | 6516 |
self.disks = disks |
6513 | 6517 |
self.delay_iallocator = delay_iallocator |
6518 |
self.early_release = early_release |
|
6514 | 6519 |
|
6515 | 6520 |
# Runtime data |
6516 | 6521 |
self.instance = None |
... | ... | |
6853 | 6858 |
self.lu.LogWarning("Can't remove old LV: %s" % msg, |
6854 | 6859 |
hint="remove unused LVs manually") |
6855 | 6860 |
|
6861 |
def _ReleaseNodeLock(self, node_name): |
|
6862 |
"""Releases the lock for a given node.""" |
|
6863 |
self.lu.context.glm.release(locking.LEVEL_NODE, node_name) |
|
6864 |
|
|
6856 | 6865 |
def _ExecDrbd8DiskOnly(self, feedback_fn): |
6857 | 6866 |
"""Replace a disk on the primary or secondary for DRBD 8. |
6858 | 6867 |
|
... | ... | |
6963 | 6972 |
|
6964 | 6973 |
self.cfg.Update(self.instance, feedback_fn) |
6965 | 6974 |
|
6975 |
cstep = 5 |
|
6976 |
if self.early_release: |
|
6977 |
self.lu.LogStep(cstep, steps_total, "Removing old storage") |
|
6978 |
cstep += 1 |
|
6979 |
self._RemoveOldStorage(self.target_node, iv_names) |
|
6980 |
# only release the lock if we're doing secondary replace, since |
|
6981 |
# we use the primary node later |
|
6982 |
if self.target_node != self.instance.primary_node: |
|
6983 |
self._ReleaseNodeLock(self.target_node) |
|
6984 |
|
|
6966 | 6985 |
# Wait for sync |
6967 | 6986 |
# This can fail as the old devices are degraded and _WaitForSync |
6968 | 6987 |
# does a combined result over all disks, so we don't check its return value |
6969 |
self.lu.LogStep(5, steps_total, "Sync devices") |
|
6988 |
self.lu.LogStep(cstep, steps_total, "Sync devices") |
|
6989 |
cstep += 1 |
|
6970 | 6990 |
_WaitForSync(self.lu, self.instance) |
6971 | 6991 |
|
6972 | 6992 |
# Check all devices manually |
6973 | 6993 |
self._CheckDevices(self.instance.primary_node, iv_names) |
6974 | 6994 |
|
6975 | 6995 |
# Step: remove old storage |
6976 |
self.lu.LogStep(6, steps_total, "Removing old storage") |
|
6977 |
self._RemoveOldStorage(self.target_node, iv_names) |
|
6996 |
if not self.early_release: |
|
6997 |
self.lu.LogStep(cstep, steps_total, "Removing old storage") |
|
6998 |
cstep += 1 |
|
6999 |
self._RemoveOldStorage(self.target_node, iv_names) |
|
6978 | 7000 |
|
6979 | 7001 |
def _ExecDrbd8Secondary(self, feedback_fn): |
6980 | 7002 |
"""Replace the secondary node for DRBD 8. |
... | ... | |
7108 | 7130 |
to_node, msg, |
7109 | 7131 |
hint=("please do a gnt-instance info to see the" |
7110 | 7132 |
" status of disks")) |
7133 |
cstep = 5 |
|
7134 |
if self.early_release: |
|
7135 |
self.lu.LogStep(cstep, steps_total, "Removing old storage") |
|
7136 |
cstep += 1 |
|
7137 |
self._RemoveOldStorage(self.target_node, iv_names) |
|
7138 |
self._ReleaseNodeLock([self.target_node, self.new_node]) |
|
7111 | 7139 |
|
7112 | 7140 |
# Wait for sync |
7113 | 7141 |
# This can fail as the old devices are degraded and _WaitForSync |
7114 | 7142 |
# does a combined result over all disks, so we don't check its return value |
7115 |
self.lu.LogStep(5, steps_total, "Sync devices") |
|
7143 |
self.lu.LogStep(cstep, steps_total, "Sync devices") |
|
7144 |
cstep += 1 |
|
7116 | 7145 |
_WaitForSync(self.lu, self.instance) |
7117 | 7146 |
|
7118 | 7147 |
# Check all devices manually |
7119 | 7148 |
self._CheckDevices(self.instance.primary_node, iv_names) |
7120 | 7149 |
|
7121 | 7150 |
# Step: remove old storage |
7122 |
self.lu.LogStep(6, steps_total, "Removing old storage") |
|
7123 |
self._RemoveOldStorage(self.target_node, iv_names) |
|
7151 |
if not self.early_release: |
|
7152 |
self.lu.LogStep(cstep, steps_total, "Removing old storage") |
|
7153 |
self._RemoveOldStorage(self.target_node, iv_names) |
|
7124 | 7154 |
|
7125 | 7155 |
|
7126 | 7156 |
class LURepairNodeStorage(NoHooksLU): |
Also available in: Unified diff