Merge "Fix node deletion logic"
This commit is contained in:
commit
5f1b32c33e
|
@ -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.
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue