From 7ad1af4a4f513c5f2fa8ebac0a6147fea05e3873 Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Tue, 9 Jun 2009 16:00:28 +0200
Subject: [PATCH] Convert instance_info rpc to new style result

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
---
 lib/backend.py |  2 +-
 lib/cmdlib.py  | 35 +++++++++++++++++++++++++----------
 2 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/lib/backend.py b/lib/backend.py
index 1f571fd9a..a54a6ced3 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -632,7 +632,7 @@ def GetInstanceInfo(instance, hname):
     output['state'] = iinfo[4]
     output['time'] = iinfo[5]
 
-  return output
+  return True, output
 
 
 def GetInstanceMigratable(instance):
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 9de2a138b..ebe9a0d23 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -2912,8 +2912,11 @@ class LUStartupInstance(LogicalUnit):
     remote_info = self.rpc.call_instance_info(instance.primary_node,
                                               instance.name,
                                               instance.hypervisor)
-    remote_info.Raise()
-    if not remote_info.data:
+    msg = remote_info.RemoteFailMsg()
+    if msg:
+      raise errors.OpPrereqError("Error checking node %s: %s" %
+                                 (instance.primary_node, msg))
+    if not remote_info.payload: # not running already
       _CheckNodeFreeMemory(self, instance.primary_node,
                            "starting instance %s" % instance.name,
                            bep[constants.BE_MEMORY], instance.hypervisor)
@@ -3114,8 +3117,11 @@ class LUReinstallInstance(LogicalUnit):
     remote_info = self.rpc.call_instance_info(instance.primary_node,
                                               instance.name,
                                               instance.hypervisor)
-    remote_info.Raise()
-    if remote_info.data:
+    msg = remote_info.RemoteFailMsg()
+    if msg:
+      raise errors.OpPrereqError("Error checking node %s: %s" %
+                                 (instance.primary_node, msg))
+    if remote_info.payload:
       raise errors.OpPrereqError("Instance '%s' is running on the node %s" %
                                  (self.op.instance_name,
                                   instance.primary_node))
@@ -3198,8 +3204,11 @@ class LURenameInstance(LogicalUnit):
     remote_info = self.rpc.call_instance_info(instance.primary_node,
                                               instance.name,
                                               instance.hypervisor)
-    remote_info.Raise()
-    if remote_info.data:
+    msg = remote_info.RemoteFailMsg()
+    if msg:
+      raise errors.OpPrereqError("Error checking node %s: %s" %
+                                 (instance.primary_node, msg))
+    if remote_info.payload:
       raise errors.OpPrereqError("Instance '%s' is running on the node %s" %
                                  (self.op.instance_name,
                                   instance.primary_node))
@@ -5807,8 +5816,11 @@ class LUQueryInstanceData(NoHooksLU):
         remote_info = self.rpc.call_instance_info(instance.primary_node,
                                                   instance.name,
                                                   instance.hypervisor)
-        remote_info.Raise()
-        remote_info = remote_info.data
+        msg = remote_info.RemoteFailMsg()
+        if msg:
+          raise errors.OpExecError("Error checking node %s: %s" %
+                                   (instance.primary_node, msg))
+        remote_info = remote_info.payload
         if remote_info and "state" in remote_info:
           remote_state = "up"
         else:
@@ -6099,9 +6111,12 @@ class LUSetInstanceParams(LogicalUnit):
       if nodeinfo[pnode].failed or not isinstance(nodeinfo[pnode].data, dict):
         # Assume the primary node is unreachable and go ahead
         self.warn.append("Can't get info from primary node %s" % pnode)
+      elif instance_info.RemoteFailMsg():
+        self.warn.append("Can't get instance runtime information: %s" %
+                        instance_info.RemoteFailMsg())
       else:
-        if not instance_info.failed and instance_info.data:
-          current_mem = int(instance_info.data['memory'])
+        if instance_info.payload:
+          current_mem = int(instance_info.payload['memory'])
         else:
           # Assume instance not running
           # (there is a slight race condition here, but it's not very probable,
-- 
GitLab