Transform instance.live_migration_post notification

The instance.live_migration_post.start and
instance.live_migration_post.end notifications have been transformed to
the versioned notification framework.

Co-Authored-By: Alex Szarka <szarka@inf.u-szeged.hu>
Co-Authored-By: Takashi Natsume <natsume.takashi@lab.ntt.co.jp>
Change-Id: If9993d5edab5a2f141387a8eb294a9645667ee6b
Implements: bp versioned-notification-transformation-rocky
This commit is contained in:
Béla Vancsics 2017-07-10 11:38:52 +02:00 committed by Takashi NATSUME
parent 187f80a32c
commit 379cf65d82
7 changed files with 68 additions and 11 deletions

View File

@ -0,0 +1,12 @@
{
"event_type": "instance.live_migration_post.end",
"payload": {
"$ref": "common_payloads/InstanceActionPayload.json#",
"nova_object.data": {
"action_initiator_user": "admin",
"task_state": "migrating"
}
},
"priority": "INFO",
"publisher_id": "nova-compute:compute"
}

View File

@ -0,0 +1,12 @@
{
"event_type": "instance.live_migration_post.start",
"payload": {
"$ref": "common_payloads/InstanceActionPayload.json#",
"nova_object.data": {
"action_initiator_user": "admin",
"task_state": "migrating"
}
},
"priority": "INFO",
"publisher_id": "nova-compute:compute"
}

View File

@ -6402,6 +6402,10 @@ class ComputeManager(manager.Manager):
self._notify_about_instance_usage(ctxt, instance,
"live_migration._post.start",
network_info=network_info)
compute_utils.notify_about_instance_action(
ctxt, instance, self.host,
action=fields.NotificationAction.LIVE_MIGRATION_POST,
phase=fields.NotificationPhase.START)
# Releasing security group ingress rule.
LOG.debug('Calling driver.unfilter_instance from _post_live_migration',
instance=instance)
@ -6464,6 +6468,10 @@ class ComputeManager(manager.Manager):
self._notify_about_instance_usage(ctxt, instance,
"live_migration._post.end",
network_info=network_info)
compute_utils.notify_about_instance_action(
ctxt, instance, self.host,
action=fields.NotificationAction.LIVE_MIGRATION_POST,
phase=fields.NotificationPhase.END)
if post_at_dest_success:
LOG.info('Migrating instance to %s finished successfully.',
dest, instance=instance)

View File

@ -536,8 +536,8 @@ class InstanceStateUpdatePayload(base.NotificationPayloadBase):
@base.notification_sample('instance-live_migration_pre-end.json')
@base.notification_sample('instance-live_migration_abort-start.json')
@base.notification_sample('instance-live_migration_abort-end.json')
# @base.notification_sample('instance-live_migration_post-start.json')
# @base.notification_sample('instance-live_migration_post-end.json')
@base.notification_sample('instance-live_migration_post-start.json')
@base.notification_sample('instance-live_migration_post-end.json')
@base.notification_sample('instance-live_migration_post_dest-start.json')
@base.notification_sample('instance-live_migration_post_dest-end.json')
@base.notification_sample('instance-live_migration_rollback-start.json')

View File

@ -55,7 +55,7 @@ class TestInstanceNotificationSampleWithMultipleCompute(
actions = [
self._test_live_migration_rollback,
self._test_live_migration_abort,
self._test_live_migration_pre_and_post_dest,
self._test_live_migration_success,
self._test_evacuate_server
]
@ -93,7 +93,7 @@ class TestInstanceNotificationSampleWithMultipleCompute(
'uuid': server['id']},
actual=fake_notifier.VERSIONED_NOTIFICATIONS[1])
def _test_live_migration_pre_and_post_dest(self, server):
def _test_live_migration_success(self, server):
post = {
'os-migrateLive': {
'host': 'host2',
@ -119,20 +119,32 @@ class TestInstanceNotificationSampleWithMultipleCompute(
migrations = self.admin_api.get_active_migrations(server['id'])
self.assertEqual(1, len(migrations))
self._wait_for_notification('instance.live_migration_post_dest.end')
self.assertEqual(4, len(fake_notifier.VERSIONED_NOTIFICATIONS))
self._wait_for_notification('instance.live_migration_post.end')
self.assertEqual(6, len(fake_notifier.VERSIONED_NOTIFICATIONS))
self._verify_notification(
'instance-live_migration_post_dest-start',
'instance-live_migration_post-start',
replacements={
'reservation_id': server['reservation_id'],
'uuid': server['id']},
actual=fake_notifier.VERSIONED_NOTIFICATIONS[2])
self._verify_notification(
'instance-live_migration_post_dest-end',
'instance-live_migration_post_dest-start',
replacements={
'reservation_id': server['reservation_id'],
'uuid': server['id']},
actual=fake_notifier.VERSIONED_NOTIFICATIONS[3])
self._verify_notification(
'instance-live_migration_post_dest-end',
replacements={
'reservation_id': server['reservation_id'],
'uuid': server['id']},
actual=fake_notifier.VERSIONED_NOTIFICATIONS[4])
self._verify_notification(
'instance-live_migration_post-end',
replacements={
'reservation_id': server['reservation_id'],
'uuid': server['id']},
actual=fake_notifier.VERSIONED_NOTIFICATIONS[5])
def _test_live_migration_abort(self, server):
post = {

View File

@ -6430,7 +6430,8 @@ class ComputeTestCase(BaseTestCase,
mock_post.assert_called_once_with(c, instance, False, dest)
mock_clear.assert_called_once_with(mock.ANY)
def test_post_live_migration_working_correctly(self):
@mock.patch('nova.compute.utils.notify_about_instance_action')
def test_post_live_migration_working_correctly(self, mock_notify):
# Confirm post_live_migration() works as expected correctly.
dest = 'desthost'
srchost = self.compute.host
@ -6477,7 +6478,12 @@ class ComputeTestCase(BaseTestCase,
):
self.compute._post_live_migration(c, instance, dest,
migrate_data=migrate_data)
mock_notify.assert_has_calls([
mock.call(c, instance, 'fake-mini',
action='live_migration_post', phase='start'),
mock.call(c, instance, 'fake-mini',
action='live_migration_post', phase='end')])
self.assertEqual(2, mock_notify.call_count)
post_live_migration.assert_has_calls([
mock.call(c, instance, {'swap': None, 'ephemerals': [],
'root_device_name': None,

View File

@ -7496,6 +7496,7 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase):
migrate_data.old_vol_attachment_ids = {volume_id: orig_attachment_id}
image_bdm.attachment_id = uuids.attachment3
@mock.patch('nova.compute.utils.notify_about_instance_action')
@mock.patch('nova.objects.ConsoleAuthToken.'
'clean_console_auths_for_instance')
@mock.patch.object(migrate_data.migration, 'save',
@ -7516,7 +7517,7 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase):
def _test(mock_get_bdms, mock_net_api, mock_notify, mock_driver,
mock_rpc, mock_get_bdm_info, mock_attach_delete,
mock_update_resource, mock_bdm_save, mock_rt, mock_ga,
mock_clean):
mock_clean, mock_notify_action):
mock_rt.return_value = mock.Mock()
mock_get_bdms.return_value = [vol_bdm, image_bdm]
@ -7526,6 +7527,12 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase):
mock_attach_delete.assert_called_once_with(
self.context, orig_attachment_id)
mock_clean.assert_called_once_with(self.context, instance.uuid)
mock_notify_action.assert_has_calls([
mock.call(self.context, instance, 'fake-mini',
action='live_migration_post', phase='start'),
mock.call(self.context, instance, 'fake-mini',
action='live_migration_post', phase='end')])
self.assertEqual(2, mock_notify_action.call_count)
_test()