From 763ccf823fffbe2de444b0728e6af7ad3864fe50 Mon Sep 17 00:00:00 2001
From: Jarrod Johnson <jjohnson2@lenovo.com>
Date: Thu, 19 Mar 2015 14:55:40 -0400
Subject: [PATCH] Improve error reporting by server

General errors were uncaught.  Provide a way
to relate unexpected situations more gracefully
to a client.
---
 confluent_server/confluent/messages.py                     | 7 +++----
 .../confluent/plugins/hardwaremanagement/ipmi.py           | 6 ++----
 2 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/confluent_server/confluent/messages.py b/confluent_server/confluent/messages.py
index 726a1427..b330ef04 100644
--- a/confluent_server/confluent/messages.py
+++ b/confluent_server/confluent/messages.py
@@ -144,10 +144,9 @@ class ConfluentMessage(object):
 
 
 class ConfluentNodeError(object):
-    def __init__(self, node):
+    def __init__(self, node, errorstr):
         self.node = node
-        self.error = None
-        raise NotImplementedError  # this is an abstract base class
+        self.error = errorstr
 
     def raw(self):
         return {self.node: {'error': self.error}}
@@ -158,7 +157,7 @@ class ConfluentNodeError(object):
     def strip_node(self, node):
         #NOTE(jbjohnso): For single node errors, raise exception to
         #trigger what a developer of that medium would expect
-        raise NotImplementedError
+        raise Exception(self.error)
 
 
 class ConfluentTargetTimeout(ConfluentNodeError):
diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py
index 751187d7..e09274ac 100644
--- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py
+++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py
@@ -222,11 +222,10 @@ def perform_request(operator, node, element,
             if excmsg == 'Session no longer connected':
                 results.put(msg.ConfluentTargetTimeout(node))
             else:
-                raise
+                results.put(msg.ConfluentNodeError(node, excmsg))
         finally:
             results.put('Done')
 
-
 persistent_ipmicmds = {}
 
 
@@ -427,8 +426,7 @@ class IpmiHandler(object):
                                            state=power['powerstate']))
         elif 'update' == self.op:
             powerstate = self.inputdata.powerstate(self.node)
-            # TODO: call with wait argument
-            self.ipmicmd.set_power(powerstate)
+            self.ipmicmd.set_power(powerstate, wait=30)
             power = self.ipmicmd.get_power()
             self.output.put(msg.PowerState(node=self.node,
                                            state=power['powerstate']))