Delete the failure host from reserved_host
If the failure host is selected as reserved_host, evacuation to the failure host will be executed. This patch added processing to change the 'reserved' column of hosts to False so that the failure host will not be selected as reserved_host. Change-Id: I6e5f1087baf64787d759ed7c5b318d4a14aecb4c Closes-Bug: #1670940
This commit is contained in:
parent
e810b86020
commit
5cc52525db
|
@ -142,6 +142,11 @@ class MasakariManager(manager.Manager):
|
|||
update_data = {
|
||||
'on_maintenance': True,
|
||||
}
|
||||
|
||||
# Set reserved flag to False if this host is reserved
|
||||
if host_obj.reserved:
|
||||
update_data['reserved'] = False
|
||||
|
||||
host_obj.update(update_data)
|
||||
host_obj.save()
|
||||
|
||||
|
|
|
@ -216,13 +216,14 @@ class EngineManagerUnitTestCase(test.NoDBTestCase):
|
|||
|
||||
@mock.patch.object(host_obj.Host, "get_by_uuid")
|
||||
@mock.patch.object(host_obj.Host, "save")
|
||||
@mock.patch.object(host_obj.Host, "update")
|
||||
@mock.patch.object(host_obj.HostList, "get_all")
|
||||
@mock.patch("masakari.engine.drivers.taskflow."
|
||||
"TaskFlowDriver.execute_host_failure")
|
||||
@mock.patch.object(notification_obj.Notification, "save")
|
||||
def test_process_notification_type_compute_host_event_stopped(
|
||||
self, mock_notification_save, mock_host_failure, mock_get_all,
|
||||
mock_host_save, mock_host_obj):
|
||||
mock_host_update, mock_host_save, mock_host_obj):
|
||||
notification = self._get_compute_host_type_notification()
|
||||
mock_host_failure.side_effect = self._fake_notification_workflow()
|
||||
fake_host = fakes.create_fake_host()
|
||||
|
@ -231,6 +232,11 @@ class EngineManagerUnitTestCase(test.NoDBTestCase):
|
|||
mock_host_obj.return_value = fake_host
|
||||
self.engine.process_notification(self.context,
|
||||
notification=notification)
|
||||
|
||||
update_data_by_host_failure = {
|
||||
'on_maintenance': True,
|
||||
}
|
||||
mock_host_update.assert_called_once_with(update_data_by_host_failure)
|
||||
self.assertEqual("finished", notification.status)
|
||||
mock_host_failure.assert_called_once_with(
|
||||
self.context,
|
||||
|
@ -239,11 +245,12 @@ class EngineManagerUnitTestCase(test.NoDBTestCase):
|
|||
|
||||
@mock.patch.object(host_obj.Host, "get_by_uuid")
|
||||
@mock.patch.object(host_obj.Host, "save")
|
||||
@mock.patch.object(host_obj.Host, "update")
|
||||
@mock.patch.object(host_obj.HostList, "get_all")
|
||||
@mock.patch.object(notification_obj.Notification, "save")
|
||||
def test_process_notification_host_failure_without_reserved_hosts(
|
||||
self, mock_notification_save, mock_get_all,
|
||||
mock_host_save, mock_host_obj):
|
||||
mock_host_update, mock_host_save, mock_host_obj):
|
||||
reserved_host_list = []
|
||||
mock_get_all.return_value = reserved_host_list
|
||||
|
||||
|
@ -257,23 +264,27 @@ class EngineManagerUnitTestCase(test.NoDBTestCase):
|
|||
self.engine.process_notification(self.context,
|
||||
notification=notification)
|
||||
|
||||
update_data_by_host_failure = {
|
||||
'on_maintenance': True,
|
||||
}
|
||||
mock_host_update.assert_called_once_with(update_data_by_host_failure)
|
||||
self.assertEqual("error", notification.status)
|
||||
|
||||
@mock.patch.object(host_obj.Host, "get_by_uuid")
|
||||
@mock.patch.object(host_obj.Host, "save")
|
||||
@mock.patch.object(host_obj.Host, "update")
|
||||
@mock.patch.object(host_obj.HostList, "get_all")
|
||||
@mock.patch("masakari.engine.drivers.taskflow."
|
||||
"TaskFlowDriver.execute_host_failure")
|
||||
@mock.patch.object(notification_obj.Notification, "save")
|
||||
def test_process_notification_host_failure_with_reserved_hosts(
|
||||
self, mock_notification_save, mock_host_failure, mock_get_all,
|
||||
mock_host_save, mock_host_obj):
|
||||
reserved_host_list = [fakes.create_fake_host(reserved=True)]
|
||||
mock_get_all.return_value = reserved_host_list
|
||||
|
||||
mock_host_update, mock_host_save, mock_host_obj):
|
||||
fake_host = fakes.create_fake_host()
|
||||
fake_host.failover_segment = fakes.create_fake_failover_segment(
|
||||
recovery_method='reserved_host')
|
||||
reserved_host_list = [fake_host]
|
||||
mock_get_all.return_value = reserved_host_list
|
||||
mock_host_obj.return_value = fake_host
|
||||
|
||||
notification = self._get_compute_host_type_notification()
|
||||
|
@ -282,6 +293,10 @@ class EngineManagerUnitTestCase(test.NoDBTestCase):
|
|||
self.engine.process_notification(self.context,
|
||||
notification=notification)
|
||||
|
||||
update_data_by_host_failure = {
|
||||
'on_maintenance': True,
|
||||
}
|
||||
mock_host_update.assert_called_once_with(update_data_by_host_failure)
|
||||
self.assertEqual("finished", notification.status)
|
||||
mock_host_failure.assert_called_once_with(
|
||||
self.context,
|
||||
|
@ -291,13 +306,49 @@ class EngineManagerUnitTestCase(test.NoDBTestCase):
|
|||
|
||||
@mock.patch.object(host_obj.Host, "get_by_uuid")
|
||||
@mock.patch.object(host_obj.Host, "save")
|
||||
@mock.patch.object(host_obj.Host, "update")
|
||||
@mock.patch.object(host_obj.HostList, "get_all")
|
||||
@mock.patch("masakari.engine.drivers.taskflow."
|
||||
"TaskFlowDriver.execute_host_failure")
|
||||
@mock.patch.object(notification_obj.Notification, "save")
|
||||
def test_process_notification_reserved_host_failure(
|
||||
self, mock_notification_save, mock_host_failure, mock_get_all,
|
||||
mock_host_update, mock_host_save, mock_host_obj):
|
||||
fake_host = fakes.create_fake_host(reserved=True)
|
||||
fake_host.failover_segment = fakes.create_fake_failover_segment(
|
||||
recovery_method='reserved_host')
|
||||
reserved_host_list = [fake_host]
|
||||
mock_get_all.return_value = reserved_host_list
|
||||
mock_host_obj.return_value = fake_host
|
||||
|
||||
notification = self._get_compute_host_type_notification()
|
||||
mock_host_failure.side_effect = self._fake_notification_workflow()
|
||||
|
||||
self.engine.process_notification(self.context,
|
||||
notification=notification)
|
||||
|
||||
update_data_by_host_failure = {
|
||||
'on_maintenance': True,
|
||||
'reserved': False,
|
||||
}
|
||||
mock_host_update.assert_called_once_with(update_data_by_host_failure)
|
||||
self.assertEqual("finished", notification.status)
|
||||
mock_host_failure.assert_called_once_with(
|
||||
self.context,
|
||||
fake_host.name, fake_host.failover_segment.recovery_method,
|
||||
notification.notification_uuid,
|
||||
reserved_host_list=reserved_host_list)
|
||||
|
||||
@mock.patch.object(host_obj.Host, "get_by_uuid")
|
||||
@mock.patch.object(host_obj.Host, "save")
|
||||
@mock.patch.object(host_obj.Host, "update")
|
||||
@mock.patch.object(host_obj.HostList, "get_all")
|
||||
@mock.patch("masakari.engine.drivers.taskflow."
|
||||
"TaskFlowDriver.execute_host_failure")
|
||||
@mock.patch.object(notification_obj.Notification, "save")
|
||||
def test_process_notification_type_compute_host_recovery_exception(
|
||||
self, mock_notification_save, mock_host_failure, mock_get_all,
|
||||
mock_host_save, mock_host_obj):
|
||||
mock_host_update, mock_host_save, mock_host_obj):
|
||||
notification = self._get_compute_host_type_notification()
|
||||
fake_host = fakes.create_fake_host()
|
||||
mock_get_all.return_value = None
|
||||
|
@ -307,6 +358,11 @@ class EngineManagerUnitTestCase(test.NoDBTestCase):
|
|||
exc=exception.HostRecoveryFailureException)
|
||||
self.engine.process_notification(self.context,
|
||||
notification=notification)
|
||||
|
||||
update_data_by_host_failure = {
|
||||
'on_maintenance': True,
|
||||
}
|
||||
mock_host_update.assert_called_once_with(update_data_by_host_failure)
|
||||
self.assertEqual("error", notification.status)
|
||||
|
||||
@mock.patch.object(notification_obj.Notification, "save")
|
||||
|
|
Loading…
Reference in New Issue