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 related doc entries.

Signed-off-by: Dimitris Aragiorgis <[email protected]>
---
 doc/hooks.rst                    |    8 ++++----
 lib/cmdlib/instance_migration.py |    8 +++++---
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/doc/hooks.rst b/doc/hooks.rst
index c7fa9fb..5b317d2 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 a5cbf4d..b680443 100644
--- a/lib/cmdlib/instance_migration.py
+++ b/lib/cmdlib/instance_migration.py
@@ -134,7 +134,7 @@ class LUInstanceFailover(LogicalUnit):
     """
     instance = self._migrater.instance
     source_node = instance.primary_node
-    target_node = self.op.target_node
+    target_node = self._migrater.target_node
     env = {
       "IGNORE_CONSISTENCY": self.op.ignore_consistency,
       "SHUTDOWN_TIMEOUT": self.op.shutdown_timeout,
@@ -159,6 +159,7 @@ class LUInstanceFailover(LogicalUnit):
     """
     instance = self._migrater.instance
     nl = [self.cfg.GetMasterNode()] + list(instance.secondary_nodes)
+    nl.append(self._migrater.target_node)
     return (nl, nl + [instance.primary_node])
 
 
@@ -197,7 +198,7 @@ class LUInstanceMigrate(LogicalUnit):
     """
     instance = self._migrater.instance
     source_node = instance.primary_node
-    target_node = self.op.target_node
+    target_node = self._migrater.target_node
     env = BuildInstanceHookEnvByObject(self, instance)
     env.update({
       "MIGRATE_LIVE": self._migrater.live,
@@ -211,7 +212,7 @@ class LUInstanceMigrate(LogicalUnit):
       env["OLD_SECONDARY"] = target_node
       env["NEW_SECONDARY"] = source_node
     else:
-      env["OLD_SECONDARY"] = env["NEW_SECONDARY"] = None
+      env["OLD_SECONDARY"] = env["NEW_SECONDARY"] = ""
 
     return env
 
@@ -222,6 +223,7 @@ class LUInstanceMigrate(LogicalUnit):
     instance = self._migrater.instance
     snodes = list(instance.secondary_nodes)
     nl = [self.cfg.GetMasterNode(), instance.primary_node] + snodes
+    nl.append(self._migrater.target_node)
     return (nl, nl)
 
 
-- 
1.7.10.4

Reply via email to