In case of DRBD, hooks run on both primary (source) and secondary (target) nodes. To get the same behavior for DTS_EXT_MIRROR, where we do not have secondary node, we should explicitly add target node to hooks nodes during instance migration/failover.
CheckPrereq() of TLMigrateInstance runs before BuildHooksManager(), thus target_node calculated by Iallocator is available under self._migrater.target_node. Use this value instead of self.op.target_node which can be None. Update NEWS and related doc entries. Signed-off-by: Dimitris Aragiorgis <[email protected]> --- NEWS | 2 ++ doc/hooks.rst | 8 ++++---- lib/cmdlib/instance_migration.py | 10 +++++++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/NEWS b/NEWS index 26c2616..c383d48 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,8 @@ Incompatible/important changes checks whether there are instances still using those templates. - 'gnt-node list-storage' now also reports storage information about file-based storage types. +- In case of non drbd instances, export *_SECONDARY environment variables + as empty strings (and not "None") during 'instance-migrate' related hooks. New features ~~~~~~~~~~~~ diff --git a/doc/hooks.rst b/doc/hooks.rst index 3a2846a..fc37e73 100644 --- a/doc/hooks.rst +++ b/doc/hooks.rst @@ -379,8 +379,8 @@ and secondary before failover. :directory: instance-failover :env. vars: IGNORE_CONSISTENCY, SHUTDOWN_TIMEOUT, OLD_PRIMARY, OLD_SECONDARY, NEW_PRIMARY, NEW_SECONDARY -:pre-execution: master node, secondary node -:post-execution: master node, primary and secondary nodes +:pre-execution: master node, secondary (target) node +:post-execution: master node, primary (source) and secondary (target) nodes OP_INSTANCE_MIGRATE ++++++++++++++++++++ @@ -391,8 +391,8 @@ and secondary before migration. :directory: instance-migrate :env. vars: MIGRATE_LIVE, MIGRATE_CLEANUP, OLD_PRIMARY, OLD_SECONDARY, NEW_PRIMARY, NEW_SECONDARY -:pre-execution: master node, primary and secondary nodes -:post-execution: master node, primary and secondary nodes +:pre-execution: master node, primary (source) and secondary (target) nodes +:post-execution: master node, primary (source) and secondary (target) nodes OP_INSTANCE_REMOVE diff --git a/lib/cmdlib/instance_migration.py b/lib/cmdlib/instance_migration.py index 32eaf25..fc4cb5a 100644 --- a/lib/cmdlib/instance_migration.py +++ b/lib/cmdlib/instance_migration.py @@ -136,11 +136,12 @@ class LUInstanceFailover(LogicalUnit): """ instance = self._migrater.instance source_node_uuid = instance.primary_node + target_node_uuid = self._migrater.target_node_uuid env = { "IGNORE_CONSISTENCY": self.op.ignore_consistency, "SHUTDOWN_TIMEOUT": self.op.shutdown_timeout, "OLD_PRIMARY": self.cfg.GetNodeName(source_node_uuid), - "NEW_PRIMARY": self.op.target_node, + "NEW_PRIMARY": self.cfg.GetNodeName(target_node_uuid), "FAILOVER_CLEANUP": self.op.cleanup, } @@ -160,6 +161,7 @@ class LUInstanceFailover(LogicalUnit): """ instance = self._migrater.instance nl = [self.cfg.GetMasterNode()] + list(instance.secondary_nodes) + nl.append(self._migrater.target_node_uuid) return (nl, nl + [instance.primary_node]) @@ -198,12 +200,13 @@ class LUInstanceMigrate(LogicalUnit): """ instance = self._migrater.instance source_node_uuid = instance.primary_node + target_node_uuid = self._migrater.target_node_uuid env = BuildInstanceHookEnvByObject(self, instance) env.update({ "MIGRATE_LIVE": self._migrater.live, "MIGRATE_CLEANUP": self.op.cleanup, "OLD_PRIMARY": self.cfg.GetNodeName(source_node_uuid), - "NEW_PRIMARY": self.op.target_node, + "NEW_PRIMARY": self.cfg.GetNodeName(target_node_uuid), "ALLOW_RUNTIME_CHANGES": self.op.allow_runtime_changes, }) @@ -211,7 +214,7 @@ class LUInstanceMigrate(LogicalUnit): env["OLD_SECONDARY"] = self.cfg.GetNodeName(instance.secondary_nodes[0]) env["NEW_SECONDARY"] = self.cfg.GetNodeName(source_node_uuid) else: - env["OLD_SECONDARY"] = env["NEW_SECONDARY"] = None + env["OLD_SECONDARY"] = env["NEW_SECONDARY"] = "" return env @@ -222,6 +225,7 @@ class LUInstanceMigrate(LogicalUnit): instance = self._migrater.instance snode_uuids = list(instance.secondary_nodes) nl = [self.cfg.GetMasterNode(), instance.primary_node] + snode_uuids + nl.append(self._migrater.target_node_uuid) return (nl, nl) -- 1.7.10.4
