)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ace1ac4701b2373eafd99f7a69724ecefff0481c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Gábor Antal \u003cantal@inf.u-szeged.hu\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-05-10 11:48:33 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Transform instance.live_migration_rollback notification"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ic6cd58095cf5313325a7302a746467f57d0e0371"},{"line_number":10,"context_line":"Implements: bp versioned-notification-transformation-pike"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3f044301_62a98722","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":6},"updated":"2017-05-10 15:33:27.000000000","message":"You can drop the WIP as it looks quite complete now","commit_id":"34b4bb3fc342dd23d46ed985c15cc91b97dc0663"}],"nova/test.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"30c394465bf894636755c475ce8aa0170b9b5a75","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                                     host\u003dsvc.service.host,"},{"line_number":351,"context_line":"                                     cell_mapping\u003dcell)"},{"line_number":352,"context_line":"            hm.create()"},{"line_number":353,"context_line":"            print(\u0027Sajtbolvan \u0027 + str(self.host_mappings))"},{"line_number":354,"context_line":"            self.host_mappings[hm.host] \u003d hm"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        return svc.service"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_e514114e","line":353,"range":{"start_line":353,"start_character":11,"end_line":353,"end_character":58},"updated":"2017-01-31 12:02:01.000000000","message":"It should be removed.","commit_id":"7c0eeeb49fbcde8734ee7dd155947bd6820e89b5"},{"author":{"_account_id":21239,"name":"Alex Szarka","email":"szarka@inf.u-szeged.hu","username":"xavvior"},"change_message_id":"2e279aa8a0c8101abb5d635072c9a2f1637fc7d2","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                                     host\u003dsvc.service.host,"},{"line_number":351,"context_line":"                                     cell_mapping\u003dcell)"},{"line_number":352,"context_line":"            hm.create()"},{"line_number":353,"context_line":"            print(\u0027Sajtbolvan \u0027 + str(self.host_mappings))"},{"line_number":354,"context_line":"            self.host_mappings[hm.host] \u003d hm"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        return svc.service"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa31d9ce_480d708f","line":353,"range":{"start_line":353,"start_character":11,"end_line":353,"end_character":58},"in_reply_to":"3a461143_e514114e","updated":"2017-02-12 13:44:31.000000000","message":"Its funny :D But you right, should remove this. :)","commit_id":"7c0eeeb49fbcde8734ee7dd155947bd6820e89b5"}],"nova/tests/functional/notification_sample_tests/notification_sample_base.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"30c394465bf894636755c475ce8aa0170b9b5a75","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_serialization import jsonutils"},{"line_number":20,"context_line":"from oslo_utils import fixture as utils_fixture"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from nova.api.openstack import api_version_request"},{"line_number":23,"context_line":"from nova import test"},{"line_number":24,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":25,"context_line":"from nova.tests.functional.api import client as api_client"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_2040c733","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":50},"updated":"2017-01-31 12:02:01.000000000","message":"It is unnecessary.","commit_id":"7c0eeeb49fbcde8734ee7dd155947bd6820e89b5"},{"author":{"_account_id":21239,"name":"Alex Szarka","email":"szarka@inf.u-szeged.hu","username":"xavvior"},"change_message_id":"2e279aa8a0c8101abb5d635072c9a2f1637fc7d2","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_serialization import jsonutils"},{"line_number":20,"context_line":"from oslo_utils import fixture as utils_fixture"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from nova.api.openstack import api_version_request"},{"line_number":23,"context_line":"from nova import test"},{"line_number":24,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":25,"context_line":"from nova.tests.functional.api import client as api_client"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa31d9ce_681074a9","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":50},"in_reply_to":"3a461143_2040c733","updated":"2017-02-12 13:44:31.000000000","message":"+1","commit_id":"7c0eeeb49fbcde8734ee7dd155947bd6820e89b5"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"add454a3fb6efb95d2668dccd470ada48f46047a","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        }"},{"line_number":577,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.end\u0027)"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":582,"context_line":"        self._verify_notification("}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_66ed058e","line":579,"updated":"2016-11-30 15:46:47.000000000","message":"I don\u0027t know why the live migrate action ends up failing and triggering rollback in this test. Most probably something is not set up in the test env correctly to handle the migration (maybe we only have a single compute host in the test)\n\nI think it would be easier to start with \"live_migration.pre.start\" that signals the start of the live migration action. But if you want to implement the rollback test then I suggest to try to make some explicit arrangement in the test that causes the live migration to roll back. This way you can make sure that the test is not failing with different reasons. (btw it doesn\u0027t fail for me locally)","commit_id":"fc23f8e398ef8a2af70d7d4c0ae44f6e65595d0f"},{"author":{"_account_id":21239,"name":"Alex Szarka","email":"szarka@inf.u-szeged.hu","username":"xavvior"},"change_message_id":"75450dfbfb247c808063eb85279933724f59d79d","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.start\u0027)"},{"line_number":583,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.end\u0027)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        print(\u0027cica\u0027 + str(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":588,"context_line":"        self._verify_notification("}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_b73abc96","line":585,"range":{"start_line":585,"start_character":8,"end_line":585,"end_character":66},"updated":"2017-01-15 20:01:56.000000000","message":"This use only debug mode in local, true? If yes, change to WIP the patch :)","commit_id":"0d3a41011e43dc9ce06266c8560d4ed44925ce29"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5a2656ad27de520f8b27abb171c9a6c4c687c060","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.cinder \u003d fixtures.CinderFixture(self)"},{"line_number":33,"context_line":"        self.useFixture(self.cinder)"},{"line_number":34,"context_line":"        self.compute2 \u003d self.start_service(\u0027compute\u0027, host\u003d\u0027host2\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        time.sleep(10)"},{"line_number":37,"context_line":"        print(\u0027Yeah, setup is finished\u0027)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_322c05ab","line":35,"updated":"2017-01-20 16:16:00.000000000","message":"This can cause the the instance booted at L40 is booted in host2 which will cause an exception that you cannot migrate a instance to itself. If you don\u0027t want to over complicate the test code then I suggest to start up host2 after the instance is booted.","commit_id":"176dc5315f3fc30c436eff2b92026d823e3d1d5c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5a2656ad27de520f8b27abb171c9a6c4c687c060","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            }"},{"line_number":67,"context_line":"        }"},{"line_number":68,"context_line":"        print(str(post))"},{"line_number":69,"context_line":"        self.admin_api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":70,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.start\u0027)"},{"line_number":71,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.end\u0027)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_b5e1bf00","line":69,"updated":"2017-01-20 16:16:00.000000000","message":"Currently migration fails with a message that host \u0027fake-mini\u0027 is not found. The problem comes from the code that checks some prerequisites on the destination host [1]. In [1] the code refers to CONF.host which in case of a normal nova-compute service equals to the hostname the service is running on. However in the functional test environment the CONF.host defaults to \u0027fake-mini\u0027 [2] and your second host is called \u0027host2\u0027.\n\nYou could try to solve somehow that CONF.host returns \u0027host2\u0027 in your second nova-compute service.\n\nAfter I replaced CONF.host with self.host in [1] to test the above theory the live migration fails at a later point with \"MigrationError: Migration error: \u0027NoneType\u0027 object has no attribute \u0027to_legacy_dict\u0027\" [3]-\u003e[4].\n\nSo most probably there are still things in the test environment that need to be set up properly to be able to trigger the live migration.\n\n[1] https://github.com/openstack/nova/blob/master/nova/compute/manager.py#L5218 \n[2] https://github.com/openstack/nova/blob/master/nova/tests/unit/conf_fixture.py#L42\n[3] https://github.com/openstack/nova/blob/master/nova/compute/manager.py#L5225 \n[4] https://github.com/openstack/nova/blob/master/nova/compute/manager.py#L5263","commit_id":"176dc5315f3fc30c436eff2b92026d823e3d1d5c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"72a48a86e52ed42e8bfa026debe8eaece75b2004","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            }"},{"line_number":67,"context_line":"        }"},{"line_number":68,"context_line":"        print(str(post))"},{"line_number":69,"context_line":"        self.admin_api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":70,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.start\u0027)"},{"line_number":71,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.end\u0027)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_664b925a","line":69,"in_reply_to":"5a3905b3_b5e1bf00","updated":"2017-01-25 14:55:45.000000000","message":"I tried and it seems [5] solves the CONF.host problem I mentioned above. I suggest to base the live-migration tests top of that and continue investigating the next issue: \"MigrationError: Migration error: \u0027NoneType\u0027 object has no attribute \u0027to_legacy_dict\u0027\"\n\n[5] https://review.openstack.org/#/c/424110","commit_id":"176dc5315f3fc30c436eff2b92026d823e3d1d5c"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"30c394465bf894636755c475ce8aa0170b9b5a75","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                \u0027force\u0027: True,"},{"line_number":63,"context_line":"            }"},{"line_number":64,"context_line":"        }"},{"line_number":65,"context_line":"        print(str(post))"},{"line_number":66,"context_line":"        self.admin_api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":67,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.start\u0027)"},{"line_number":68,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.end\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_6553c139","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":24},"updated":"2017-01-31 12:02:01.000000000","message":"It should be removed.","commit_id":"7c0eeeb49fbcde8734ee7dd155947bd6820e89b5"},{"author":{"_account_id":21239,"name":"Alex Szarka","email":"szarka@inf.u-szeged.hu","username":"xavvior"},"change_message_id":"2e279aa8a0c8101abb5d635072c9a2f1637fc7d2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                \u0027force\u0027: True,"},{"line_number":63,"context_line":"            }"},{"line_number":64,"context_line":"        }"},{"line_number":65,"context_line":"        print(str(post))"},{"line_number":66,"context_line":"        self.admin_api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":67,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.start\u0027)"},{"line_number":68,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.end\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa31d9ce_a8226cff","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":24},"in_reply_to":"3a461143_6553c139","updated":"2017-02-12 13:44:31.000000000","message":"+1","commit_id":"7c0eeeb49fbcde8734ee7dd155947bd6820e89b5"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"30c394465bf894636755c475ce8aa0170b9b5a75","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.start\u0027)"},{"line_number":68,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.end\u0027)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        print(\u0027cica\u0027 + str(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":73,"context_line":"        self._verify_notification("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_05291d9e","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":66},"updated":"2017-01-31 12:02:01.000000000","message":"ditto","commit_id":"7c0eeeb49fbcde8734ee7dd155947bd6820e89b5"},{"author":{"_account_id":21239,"name":"Alex Szarka","email":"szarka@inf.u-szeged.hu","username":"xavvior"},"change_message_id":"2e279aa8a0c8101abb5d635072c9a2f1637fc7d2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.start\u0027)"},{"line_number":68,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_rollback.end\u0027)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        print(\u0027cica\u0027 + str(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":73,"context_line":"        self._verify_notification("}],"source_content_type":"text/x-python","patch_set":7,"id":"fa31d9ce_c82160fd","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":66},"in_reply_to":"3a461143_05291d9e","updated":"2017-02-12 13:44:31.000000000","message":"+1","commit_id":"7c0eeeb49fbcde8734ee7dd155947bd6820e89b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ace1ac4701b2373eafd99f7a69724ecefff0481c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.useFixture(fixtures.ConfPatcher(host\u003d\u0027host2\u0027))"},{"line_number":43,"context_line":"        self.compute2 \u003d self.start_service(\u0027compute\u0027, host\u003d\u0027host2\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        self.api.microversion \u003d \\"},{"line_number":46,"context_line":"            api_version_request.max_api_version().get_string()"},{"line_number":47,"context_line":"        self.admin_api.microversion \u003d \\"},{"line_number":48,"context_line":"            api_version_request.max_api_version().get_string()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        actions \u003d ["},{"line_number":51,"context_line":"            self._test_live_migration_rollback,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f044301_c23dfbdd","line":48,"range":{"start_line":45,"start_character":0,"end_line":48,"end_character":62},"updated":"2017-05-10 15:33:27.000000000","message":"I think it is not needed any more as https://review.openstack.org/#/c/443686/ already merged and sets the api version to maximum","commit_id":"34b4bb3fc342dd23d46ed985c15cc91b97dc0663"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ace1ac4701b2373eafd99f7a69724ecefff0481c","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        for action in actions:"},{"line_number":55,"context_line":"            fake_notifier.reset()"},{"line_number":56,"context_line":"            action(server)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @mock.patch(\u0027nova.compute.rpcapi.ComputeAPI.pre_live_migration\u0027,"},{"line_number":59,"context_line":"                side_effect\u003dexception.LiveMigrationWithOldNovaNotSupported())"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f044301_c2161b56","line":56,"updated":"2017-05-10 15:33:27.000000000","message":"do we want to ensure that the instance is in active state after every step?","commit_id":"34b4bb3fc342dd23d46ed985c15cc91b97dc0663"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5d0fbdcbcd8660698ebc031c7aca616a928aea67","unresolved":false,"context_lines":[{"line_number":6387,"context_line":"                          action\u003d\u0027live_migration_rollback\u0027, phase\u003d\u0027start\u0027),"},{"line_number":6388,"context_line":"                mock.call(c, instance, self.compute.host,"},{"line_number":6389,"context_line":"                          action\u003d\u0027live_migration_rollback\u0027, phase\u003d\u0027end\u0027)])"},{"line_number":6390,"context_line":"            mock_nw_api.setup_networks_on_host.assert_called_once_with("},{"line_number":6391,"context_line":"                c, instance, self.compute.host)"},{"line_number":6392,"context_line":"            mock_nw_api.setup_networks_on_host.assert_called_once_with("},{"line_number":6393,"context_line":"                c, instance, self.compute.host)"},{"line_number":6394,"context_line":"        _test()"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_dc178b45","line":6391,"range":{"start_line":6390,"start_character":0,"end_line":6391,"end_character":47},"updated":"2017-06-07 08:00:06.000000000","message":"These lines are duplicate of line 6392 and 6393.\nThey should be removed.","commit_id":"e1971c0b5486c9c69faf121a4d26bccabcfc7c4f"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ace1ac4701b2373eafd99f7a69724ecefff0481c","unresolved":false,"context_lines":[{"line_number":5148,"context_line":"                  mock_notify_about_instance_action):"},{"line_number":5149,"context_line":"            mock_bdm.return_value \u003d []"},{"line_number":5150,"context_line":"            mock_lmcf.return_value \u003d False, False"},{"line_number":5151,"context_line":"            mock_MM \u003d mock.MagicMock()"},{"line_number":5152,"context_line":"            compute._rollback_live_migration(self.context,"},{"line_number":5153,"context_line":"                                             mock_MM,"},{"line_number":5154,"context_line":"                                             \u0027foo\u0027, {})"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f044301_388deed2","line":5151,"updated":"2017-05-10 15:33:27.000000000","message":"this an instance at least based on the parameter list of _rollback_live_migration() so lets call it something meaningfull like mock_instance","commit_id":"34b4bb3fc342dd23d46ed985c15cc91b97dc0663"}]}
