@@ -396,13 +396,14 @@ def test_update_available_resource_for_node_pci_placement_failed_later(
396
396
{'node': mock.sentinel.node}
397
397
)
398
398
399
+ @mock.patch.object(fake_driver.FakeDriver, 'is_node_deleted')
399
400
@mock.patch.object(manager, 'LOG')
400
401
@mock.patch.object(manager.ComputeManager,
401
402
'_update_available_resource_for_node')
402
403
@mock.patch.object(fake_driver.FakeDriver, 'get_available_nodes')
403
404
@mock.patch.object(manager.ComputeManager, '_get_compute_nodes_in_db')
404
405
def test_update_available_resource(self, get_db_nodes, get_avail_nodes,
405
- update_mock, mock_log):
406
+ update_mock, mock_log, mock_deleted ):
406
407
mock_rt = self._mock_rt()
407
408
rc_mock = self.useFixture(fixtures.fixtures.MockPatchObject(
408
409
self.compute, 'reportclient')).mock
@@ -415,6 +416,7 @@ def test_update_available_resource(self, get_db_nodes, get_avail_nodes,
415
416
416
417
get_db_nodes.return_value = db_nodes
417
418
get_avail_nodes.return_value = avail_nodes
419
+ mock_deleted.return_value = True
418
420
self.compute.update_available_resource(self.context, startup=True)
419
421
get_db_nodes.assert_called_once_with(self.context, avail_nodes,
420
422
use_slave=True, startup=True)
@@ -460,12 +462,13 @@ def test_update_available_resource_not_ready(self, get_db_nodes,
460
462
update_mock.assert_not_called()
461
463
del_rp_mock.assert_not_called()
462
464
465
+ @mock.patch.object(fake_driver.FakeDriver, 'is_node_deleted')
463
466
@mock.patch.object(manager.ComputeManager,
464
467
'_update_available_resource_for_node')
465
468
@mock.patch.object(fake_driver.FakeDriver, 'get_available_nodes')
466
469
@mock.patch.object(manager.ComputeManager, '_get_compute_nodes_in_db')
467
470
def test_update_available_resource_destroy_rebalance(
468
- self, get_db_nodes, get_avail_nodes, update_mock):
471
+ self, get_db_nodes, get_avail_nodes, update_mock, mock_deleted ):
469
472
mock_rt = self._mock_rt()
470
473
rc_mock = self.useFixture(fixtures.fixtures.MockPatchObject(
471
474
self.compute, 'reportclient')).mock
@@ -476,6 +479,7 @@ def test_update_available_resource_destroy_rebalance(
476
479
db_nodes[0].destroy.side_effect = exception.ObjectActionError(
477
480
action='destroy', reason='host changed')
478
481
get_avail_nodes.return_value = set()
482
+ mock_deleted.return_value = True
479
483
self.compute.update_available_resource(self.context)
480
484
get_db_nodes.assert_called_once_with(self.context, set(),
481
485
use_slave=True, startup=False)
@@ -486,6 +490,36 @@ def test_update_available_resource_destroy_rebalance(
486
490
mock_rt.remove_node.assert_called_once_with('node1')
487
491
rc_mock.invalidate_resource_provider.assert_called_once_with(
488
492
db_nodes[0].uuid)
493
+ mock_deleted.assert_called_once_with('node1')
494
+
495
+ @mock.patch.object(fake_driver.FakeDriver, 'is_node_deleted')
496
+ @mock.patch.object(manager.ComputeManager,
497
+ '_update_available_resource_for_node')
498
+ @mock.patch.object(fake_driver.FakeDriver, 'get_available_nodes')
499
+ @mock.patch.object(manager.ComputeManager, '_get_compute_nodes_in_db')
500
+ def test_update_available_resource_no_destroy_rebalance(
501
+ self, get_db_nodes, get_avail_nodes, update_mock, mock_deleted):
502
+ mock_rt = self._mock_rt()
503
+ rc_mock = self.useFixture(fixtures.fixtures.MockPatchObject(
504
+ self.compute, 'reportclient')).mock
505
+ db_nodes = [self._make_compute_node('node1', 1)]
506
+ get_db_nodes.return_value = db_nodes
507
+ # Destroy can fail if nodes were rebalanced between getting the node
508
+ # list and calling destroy.
509
+ db_nodes[0].destroy.side_effect = exception.ObjectActionError(
510
+ action='destroy', reason='host changed')
511
+ get_avail_nodes.return_value = set()
512
+ mock_deleted.return_value = False
513
+ self.compute.update_available_resource(self.context)
514
+ get_db_nodes.assert_called_once_with(self.context, set(),
515
+ use_slave=True, startup=False)
516
+ self.assertEqual(0, update_mock.call_count)
517
+
518
+ db_nodes[0].destroy.assert_not_called()
519
+ self.assertEqual(0, rc_mock.delete_resource_provider.call_count)
520
+ mock_rt.remove_node.assert_not_called()
521
+ rc_mock.invalidate_resource_provider.assert_not_called()
522
+ mock_deleted.assert_called_once_with('node1')
489
523
490
524
@mock.patch('nova.context.get_admin_context')
491
525
def test_pre_start_hook(self, get_admin_context):
0 commit comments