Merge "Improve NodeLocked exception message"

This commit is contained in:
Jenkins 2014-02-10 21:21:42 +00:00 committed by Gerrit Code Review
commit b7a243b63f
3 changed files with 18 additions and 4 deletions

View File

@ -183,7 +183,7 @@ class NodeNotFound(NotFound):
class NodeLocked(InvalidState): class NodeLocked(InvalidState):
message = _("Node %(node)s is locked by another process.") message = _("Node %(node)s is locked by host %(host)s.")
class NodeAssociated(InvalidState): class NodeAssociated(InvalidState):

View File

@ -146,7 +146,8 @@ def _check_port_change_forbidden(port, session):
query = query.filter_by(id=node_id) query = query.filter_by(id=node_id)
node_ref = query.one() node_ref = query.one()
if node_ref['reservation'] is not None: if node_ref['reservation'] is not None:
raise exception.NodeLocked(node=node_id) raise exception.NodeLocked(node=node_id,
host=node_ref['reservation'])
def _paginate_query(model, limit=None, marker=None, sort_key=None, def _paginate_query(model, limit=None, marker=None, sort_key=None,
@ -165,7 +166,8 @@ def _check_node_already_locked(query, query_by):
no_reserv = None no_reserv = None
locked_ref = query.filter(models.Node.reservation != no_reserv).first() locked_ref = query.filter(models.Node.reservation != no_reserv).first()
if locked_ref: if locked_ref:
raise exception.NodeLocked(node=locked_ref[query_by]) raise exception.NodeLocked(node=locked_ref[query_by],
host=locked_ref['reservation'])
def _handle_node_lock_not_found(nodes, query, query_by): def _handle_node_lock_not_found(nodes, query, query_by):
@ -339,7 +341,8 @@ class Connection(api.Connection):
except NoResultFound: except NoResultFound:
raise exception.NodeNotFound(node=node_id) raise exception.NodeNotFound(node=node_id)
if node_ref['reservation'] is not None: if node_ref['reservation'] is not None:
raise exception.NodeLocked(node=node_id) raise exception.NodeLocked(node=node_id,
host=node_ref['reservation'])
if node_ref['instance_uuid'] is not None: if node_ref['instance_uuid'] is not None:
raise exception.NodeAssociated(node=node_id, raise exception.NodeAssociated(node=node_id,
instance=node_ref['instance_uuid']) instance=node_ref['instance_uuid'])

View File

@ -385,6 +385,17 @@ class DbNodeTestCase(base.DbTestCase):
self.assertRaises(exception.InvalidIdentity, self.assertRaises(exception.InvalidIdentity,
self.dbapi.reserve_nodes, 'reserv1', []) self.dbapi.reserve_nodes, 'reserv1', [])
def test_reservation_in_exception_message(self):
n = self._create_test_node()
uuid = n['uuid']
r = 'fake-reservation'
self.dbapi.reserve_nodes(r, [uuid])
try:
self.dbapi.reserve_nodes('another', [uuid])
except exception.NodeLocked as e:
self.assertIn(r, str(e))
def test_release_overlaping_ranges_fails(self): def test_release_overlaping_ranges_fails(self):
uuids = self._create_many_test_nodes() uuids = self._create_many_test_nodes()