Merge "Fix node deletion logic"

This commit is contained in:
Jenkins 2017-02-06 04:33:48 +00:00 committed by Gerrit Code Review
commit 5f1b32c33e
3 changed files with 24 additions and 18 deletions

View File

@ -227,21 +227,18 @@ class Node(object):
return True
def do_delete(self, context):
if not self.physical_id:
no.Node.delete(context, self.id)
return True
self.set_status(context, consts.NS_DELETING, _('Deletion in progress'))
if self.physical_id:
try:
# The following operation always return True unless exception
# is thrown
pb.Profile.delete_object(context, self)
except exc.EResourceDeletion as ex:
self.set_status(context, consts.NS_ERROR, six.text_type(ex))
return False
# TODO(Qiming): check if actions are working on it and can be canceled
self.set_status(context, consts.NS_DELETING, 'Deletion in progress')
try:
# The following operation always return True unless exception
# is thrown
pb.Profile.delete_object(context, self)
no.Node.delete(context, self.id)
return True
except exc.EResourceDeletion as ex:
self.set_status(context, consts.NS_ERROR, six.text_type(ex))
return False
no.Node.delete(context, self.id)
return True
def do_update(self, context, params):
"""Update a node's property.

View File

@ -154,7 +154,7 @@ class Node(base.SenlinObject, base.VersionedObjectDictCompat):
@classmethod
def delete(cls, context, obj_id):
db_api.node_delete(context, obj_id)
return db_api.node_delete(context, obj_id)
def to_dict(self):
return {

View File

@ -280,24 +280,33 @@ class TestNode(base.SenlinTestCase):
node = nodem.Node('node1', PROFILE_ID, CLUSTER_ID, self.context)
node.physical_id = uuidutils.generate_uuid()
node.id = uuidutils.generate_uuid()
mock_db_delete.return_value = True
res = node.do_delete(self.context)
self.assertTrue(res)
mock_delete.assert_called_once_with(self.context, node)
mock_db_delete.assert_called_once_with(mock.ANY, node.id)
mock_db_delete.assert_called_once_with(self.context, node.id)
mock_status.assert_called_once_with(self.context, consts.NS_DELETING,
'Deletion in progress')
@mock.patch.object(node_obj.Node, 'delete')
@mock.patch.object(nodem.Node, 'set_status')
@mock.patch.object(pb.Profile, 'delete_object')
def test_node_delete_not_created(self, mock_delete, mock_db_delete):
def test_node_delete_no_physical_id(self, mock_delete, mock_status,
mock_db_delete):
node = nodem.Node('node1', PROFILE_ID, CLUSTER_ID, self.context)
node.id = uuidutils.generate_uuid()
self.assertIsNone(node.physical_id)
mock_db_delete.return_value = True
res = node.do_delete(self.context)
self.assertTrue(res)
mock_status.assert_called_once_with(self.context, consts.NS_DELETING,
"Deletion in progress")
self.assertFalse(mock_delete.called)
self.assertTrue(mock_db_delete.called)
mock_db_delete.assert_called_once_with(self.context, node.id)
@mock.patch.object(nodem.Node, 'set_status')
@mock.patch.object(pb.Profile, 'delete_object')