Fixes 'sys.exit() doesn't do what you think it does'

Two problems here:
1. is_online() was testing the wrong thing so was always True

2. sys.exit() actually throws exceptions on threads which are not the thread
that made the call.  If you have a catchall except statement this will also
catch the exit signal.  So the application never exits.

In the pool manager's case the signal handler is running on a separate thread.
The signal handler thread executes sys.exit() and if the main thread is in
a block with a catchall except it hangs.  Fixed this by narrowing the
exception list caught.

Fixes bug #1078738

Change-Id: I9f561b9d3794d1f6fab84c116f69e7fe97464e85
This commit is contained in:
Andrew Hutchings
2012-11-15 13:46:19 +00:00
parent cc7f07dc3b
commit 81a21565d9
2 changed files with 6 additions and 5 deletions

View File

@@ -50,7 +50,7 @@ class HPRestDriver(MgmDriver):
return usage['free']
def is_online(self):
return self.is_online
return self.online
def get_node_list(self, limit, marker):
return self._get('{url}/devices'.format(url=self.url))
@@ -80,7 +80,7 @@ class HPRestDriver(MgmDriver):
def _get(self, url):
try:
r = requests.get(url, verify=False)
except:
except requests.exceptions.RequestException:
self.logger.error('Exception communicating to server: {exc}'
.format(exc=sys.exc_info()[0]))
return False, None
@@ -94,7 +94,7 @@ class HPRestDriver(MgmDriver):
def _post(self, url, node_data):
try:
r = requests.post(url, data=json.dumps(node_data), verify=False)
except:
except requests.exceptions.RequestException:
self.logger.error('Exception communicating to server: {exc}'
.format(exc=sys.exc_info()[0]))
return False, None

View File

@@ -18,6 +18,7 @@ import sys
import urllib
from novaclient import client
from novaclient import exceptions
class NotFound(Exception):
@@ -52,7 +53,7 @@ class Node(object):
node_id = uuid.uuid1()
try:
body = self._create(node_id)
except:
except exceptions.ClientException:
return False, 'Error creating node {nid} exception {exc}'.format(
nid=node_id, exc=sys.exc_info()[0]
)
@@ -80,7 +81,7 @@ class Node(object):
""" delete a node """
try:
resp = self._delete(node_id)
except:
except exceptions.ClientException:
return False, 'Error deleting node {nid} exception {exc}'.format(
nid=node_id, exc=sys.exc_info()[0]
)