)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4160061252d9f2d08df58e48eab17d7dcbf4127f","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Co-Authored-By: Gábor Antal \u003cantal@inf.u-szeged.hu\u003e"},{"line_number":12,"context_line":"Change-Id: Ie58365b9fea9e6d061cbcf1b59e61e276e3ff775"},{"line_number":13,"context_line":"Implements: bp versioned-notification-transformation-ocata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"fa31d9ce_04bf5caa","line":13,"updated":"2017-02-15 11:45:33.000000000","message":"if you have to respin the patch then please change this to versioned-notification-transformation-pike","commit_id":"8aa684542796559af0b8e42489e84c755bd832fe"}],"doc/notification_samples/instance-reboot-end.json":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"35e3484fabc4c766b6cc0f17b39b9df280b8e380","unresolved":false,"context_lines":[{"line_number":62,"context_line":"   },"},{"line_number":63,"context_line":"   \"priority\":\"INFO\","},{"line_number":64,"context_line":"   \"publisher_id\":\"nova-compute:aio\","},{"line_number":65,"context_line":"   \"message_id\":\"c3ee9b66-783b-431a-8437-5dd03dc6e76c\","},{"line_number":66,"context_line":"}"}],"source_content_type":"application/json","patch_set":1,"id":"1a95cdbc_b138d63e","line":65,"range":{"start_line":65,"start_character":54,"end_line":65,"end_character":55},"updated":"2016-10-07 06:16:57.000000000","message":"It should be removed.","commit_id":"0ac056773ea3cf4b2571b9f41ff25fefaffacbce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a292a397462f8257145b197d7447aad5b986520","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"event_type\":\"instance.reboot.end\","},{"line_number":3,"context_line":"    \"payload\":{"},{"line_number":4,"context_line":"        \"nova_object.data\":{"}],"source_content_type":"application/json","patch_set":17,"id":"9a30ddce_a381bf4c","line":1,"updated":"2017-03-07 23:19:10.000000000","message":"Why is the formatting on a lot of this is squashed, like \"architecture\":\"x86_64\", where there is no space around the colon? Compare to:\n\nhttps://review.openstack.org/#/c/384922/27/doc/notification_samples/instance-rebuild-end.json","commit_id":"f99435ec217c2f47557048d4fe07929424451876"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b1b23fcfff319873cd5d108946bcfe764b9cf82b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"event_type\":\"instance.reboot.end\","},{"line_number":3,"context_line":"    \"payload\":{"},{"line_number":4,"context_line":"        \"nova_object.data\":{"}],"source_content_type":"application/json","patch_set":17,"id":"9a30ddce_c9f4da88","line":1,"in_reply_to":"9a30ddce_a381bf4c","updated":"2017-03-09 08:54:37.000000000","message":"I think it is unintentional (i.e. human error). We could try to add a style check for json formatting in the pep8 tox target to prevent this in the future.","commit_id":"f99435ec217c2f47557048d4fe07929424451876"}],"doc/notification_samples/instance-reboot-start.json":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"35e3484fabc4c766b6cc0f17b39b9df280b8e380","unresolved":false,"context_lines":[{"line_number":62,"context_line":"   },"},{"line_number":63,"context_line":"   \"priority\":\"INFO\","},{"line_number":64,"context_line":"   \"publisher_id\":\"nova-compute:aio\","},{"line_number":65,"context_line":"   \"message_id\":\"9312ca12-9d2b-47e3-a4cd-d4ebcd11b664\","},{"line_number":66,"context_line":"}"}],"source_content_type":"application/json","patch_set":1,"id":"1a95cdbc_f13ede26","line":65,"range":{"start_line":65,"start_character":54,"end_line":65,"end_character":55},"updated":"2016-10-07 06:16:57.000000000","message":"It should be removed.","commit_id":"0ac056773ea3cf4b2571b9f41ff25fefaffacbce"}],"nova/compute/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f0036b09c1d9c9f853a33352e502acd2eea9898","unresolved":false,"context_lines":[{"line_number":2966,"context_line":"                                instance\u003dinstance)"},{"line_number":2967,"context_line":"                    compute_utils.add_instance_fault_from_exc(context,"},{"line_number":2968,"context_line":"                            instance, error, exc_info)"},{"line_number":2969,"context_line":"                    self._notify_about_instance_usage(context, instance,"},{"line_number":2970,"context_line":"                            \u0027reboot.error\u0027, fault\u003derror)"},{"line_number":2971,"context_line":"                    ctxt.reraise \u003d False"},{"line_number":2972,"context_line":"                else:"},{"line_number":2973,"context_line":"                    LOG.error(_LE(\u0027Cannot reboot instance: %s\u0027), error,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_31a0bbf4","line":2970,"range":{"start_line":2969,"start_character":0,"end_line":2970,"end_character":56},"updated":"2016-10-27 15:19:11.000000000","message":"Could you handle the reboot.error case in this or a subsequent patch please?","commit_id":"454e7cf650d7f4816db985a17891f8295a57bd99"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"750deb46a1247c3bd6e7fa423b7466b18f5b2492","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    def _test_reboot_server(self, server):"},{"line_number":563,"context_line":"        post \u003d {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027}}"},{"line_number":564,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":565,"context_line":"        self._wait_for_notification(\u0027instance.reboot.start\u0027)"},{"line_number":566,"context_line":"        self._wait_for_notification(\u0027instance.reboot.end\u0027)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_a9024e3c","line":565,"range":{"start_line":565,"start_character":0,"end_line":565,"end_character":60},"updated":"2016-12-21 01:47:44.000000000","message":"It is not necessary.\nSee \u0027_test_snapshot_server\u0027 method (line 520).","commit_id":"0254e24c802b089731e520fd653262ce9c351a3d"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"0e0c05334028277ca4be2cd1ea6b48d94f8e22e0","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    def _test_reboot_server(self, server):"},{"line_number":563,"context_line":"        post \u003d {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027}}"},{"line_number":564,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":565,"context_line":"        self._wait_for_notification(\u0027instance.reboot.start\u0027)"},{"line_number":566,"context_line":"        self._wait_for_notification(\u0027instance.reboot.end\u0027)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_3f4b905a","line":565,"range":{"start_line":565,"start_character":0,"end_line":565,"end_character":60},"in_reply_to":"1a6eadb0_a9024e3c","updated":"2017-01-06 10:35:59.000000000","message":"It\u0027s clear it is not necessary, but it can be really ambiguous if you remove this. For example, if there is a problem which prevents sending instance.reboot.start AND instance.reboot.end, then your mentioned way will fail test and logs will show that instance.reboot.end notification is missing. You try to search the reason you don\u0027t get reboot.end notification however you should try to search why the reboot.start notification is missing. And it can take a lot of time to realize that the not only reboot.end is missing here.","commit_id":"0254e24c802b089731e520fd653262ce9c351a3d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a292a397462f8257145b197d7447aad5b986520","unresolved":false,"context_lines":[{"line_number":573,"context_line":"    def _test_reboot_server(self, server):"},{"line_number":574,"context_line":"        post \u003d {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027}}"},{"line_number":575,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":576,"context_line":"        self._wait_for_notification(\u0027instance.reboot.start\u0027)"},{"line_number":577,"context_line":"        self._wait_for_notification(\u0027instance.reboot.end\u0027)"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a30ddce_23bcef04","line":576,"updated":"2017-03-07 23:19:10.000000000","message":"nit: Seems like we could just wait for the instance.reboot.end notification.","commit_id":"f99435ec217c2f47557048d4fe07929424451876"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"35e3484fabc4c766b6cc0f17b39b9df280b8e380","unresolved":false,"context_lines":[{"line_number":2067,"context_line":"                                   clean_shutdown\u003dTrue)"},{"line_number":2068,"context_line":"        self.compute.terminate_instance(self.context, instance, [], [])"},{"line_number":2069,"context_line":""},{"line_number":2070,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_instance_action\u0027)"},{"line_number":2071,"context_line":"    def test_start(self, mock_notify):"},{"line_number":2072,"context_line":"        # Ensure instance can be started."},{"line_number":2073,"context_line":"        instance \u003d self._create_fake_instance_obj()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_d1dd62e1","line":2070,"range":{"start_line":2070,"start_character":0,"end_line":2070,"end_character":66},"updated":"2016-10-07 06:16:57.000000000","message":"Here","commit_id":"0ac056773ea3cf4b2571b9f41ff25fefaffacbce"},{"author":{"_account_id":14511,"name":"Maciej Szankin","email":"maciej+review@szankin.pl","username":"mszankin"},"change_message_id":"f27b3d7c1430ed1f492b8ca48df0620ad1a9e2cc","unresolved":false,"context_lines":[{"line_number":2067,"context_line":"                                   clean_shutdown\u003dTrue)"},{"line_number":2068,"context_line":"        self.compute.terminate_instance(self.context, instance, [], [])"},{"line_number":2069,"context_line":""},{"line_number":2070,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_instance_action\u0027)"},{"line_number":2071,"context_line":"    def test_start(self, mock_notify):"},{"line_number":2072,"context_line":"        # Ensure instance can be started."},{"line_number":2073,"context_line":"        instance \u003d self._create_fake_instance_obj()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_efad0d85","line":2070,"range":{"start_line":2070,"start_character":0,"end_line":2070,"end_character":66},"in_reply_to":"1a95cdbc_d1dd62e1","updated":"2016-10-07 12:10:48.000000000","message":"Done","commit_id":"0ac056773ea3cf4b2571b9f41ff25fefaffacbce"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"35e3484fabc4c766b6cc0f17b39b9df280b8e380","unresolved":false,"context_lines":[{"line_number":2934,"context_line":"        mock_get_power.assert_has_calls(ps_call_list)"},{"line_number":2935,"context_line":"        mock_get_orig.assert_has_calls(db_call_list)"},{"line_number":2936,"context_line":""},{"line_number":2937,"context_line":"        mock_notify.assert_has_calls(["},{"line_number":2938,"context_line":"            mock.call(context, instance, \u0027fake-mini\u0027,"},{"line_number":2939,"context_line":"                      action\u003d\u0027reboot\u0027, phase\u003d\u0027start\u0027),"},{"line_number":2940,"context_line":"            mock.call(context, instance, \u0027fake-mini\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_919d9a0c","line":2937,"range":{"start_line":2937,"start_character":8,"end_line":2937,"end_character":19},"updated":"2016-10-07 06:16:57.000000000","message":"\u0027nova.compute.utils.notify_about_instance_action\u0027 should be mocked like line 2070.","commit_id":"0ac056773ea3cf4b2571b9f41ff25fefaffacbce"},{"author":{"_account_id":14511,"name":"Maciej Szankin","email":"maciej+review@szankin.pl","username":"mszankin"},"change_message_id":"f27b3d7c1430ed1f492b8ca48df0620ad1a9e2cc","unresolved":false,"context_lines":[{"line_number":2934,"context_line":"        mock_get_power.assert_has_calls(ps_call_list)"},{"line_number":2935,"context_line":"        mock_get_orig.assert_has_calls(db_call_list)"},{"line_number":2936,"context_line":""},{"line_number":2937,"context_line":"        mock_notify.assert_has_calls(["},{"line_number":2938,"context_line":"            mock.call(context, instance, \u0027fake-mini\u0027,"},{"line_number":2939,"context_line":"                      action\u003d\u0027reboot\u0027, phase\u003d\u0027start\u0027),"},{"line_number":2940,"context_line":"            mock.call(context, instance, \u0027fake-mini\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_8fa80979","line":2937,"range":{"start_line":2937,"start_character":8,"end_line":2937,"end_character":19},"in_reply_to":"1a95cdbc_919d9a0c","updated":"2016-10-07 12:10:48.000000000","message":"Done","commit_id":"0ac056773ea3cf4b2571b9f41ff25fefaffacbce"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f0036b09c1d9c9f853a33352e502acd2eea9898","unresolved":false,"context_lines":[{"line_number":2760,"context_line":"    @mock.patch.object(compute_manager.ComputeManager, \u0027_get_power_state\u0027)"},{"line_number":2761,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_instance_action\u0027)"},{"line_number":2762,"context_line":"    @mock.patch("},{"line_number":2763,"context_line":"        \u0027nova.compute.manager.ComputeManager._notify_about_instance_usage\u0027)"},{"line_number":2764,"context_line":"    def _test_reboot(self,mock_notify_unversioned, mock_notify_action,"},{"line_number":2765,"context_line":"                     soft, mock_get_power,"},{"line_number":2766,"context_line":"                     mock_get_orig, mock_update, mock_notify_usage,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_711153ac","line":2763,"updated":"2016-10-27 15:19:11.000000000","message":"This is already mocked at line 2756-2757","commit_id":"454e7cf650d7f4816db985a17891f8295a57bd99"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f0036b09c1d9c9f853a33352e502acd2eea9898","unresolved":false,"context_lines":[{"line_number":2944,"context_line":"                      phase\u003d\u0027start\u0027),"},{"line_number":2945,"context_line":"            mock.call(context, instance, \u0027fake-mini\u0027, action\u003d\u0027reboot\u0027,"},{"line_number":2946,"context_line":"                      phase\u003d\u0027end\u0027)])"},{"line_number":2947,"context_line":""},{"line_number":2948,"context_line":"    def test_reboot_soft(self):"},{"line_number":2949,"context_line":"        self._test_reboot(True)"},{"line_number":2950,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_d1777f00","line":2947,"updated":"2016-10-27 15:19:11.000000000","message":"There are more places in the above test code where the legacy notification calls are asserted (e.g.2919, 2921) you should assert the versioned notification calls there as well.","commit_id":"454e7cf650d7f4816db985a17891f8295a57bd99"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"750deb46a1247c3bd6e7fa423b7466b18f5b2492","unresolved":false,"context_lines":[{"line_number":2936,"context_line":"            if fail_running:"},{"line_number":2937,"context_line":"                notify_call_list.append(mock.call(econtext, instance,"},{"line_number":2938,"context_line":"                                                  \u0027reboot.error\u0027, fault\u003dfault))"},{"line_number":2939,"context_line":"                notify_action_call_list.append("},{"line_number":2940,"context_line":"                    mock.call(econtext, instance, \u0027reboot.error\u0027, fault\u003dfault))"},{"line_number":2941,"context_line":"            notify_call_list.append(mock.call(econtext, instance,"},{"line_number":2942,"context_line":"                                              \u0027reboot.end\u0027))"},{"line_number":2943,"context_line":"            notify_action_call_list.append("}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_a96dee33","line":2940,"range":{"start_line":2939,"start_character":0,"end_line":2940,"end_character":79},"updated":"2016-12-21 01:47:44.000000000","message":"There is no code to emit \u0027reboot.error\u0027.","commit_id":"0254e24c802b089731e520fd653262ce9c351a3d"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"0e0c05334028277ca4be2cd1ea6b48d94f8e22e0","unresolved":false,"context_lines":[{"line_number":2936,"context_line":"            if fail_running:"},{"line_number":2937,"context_line":"                notify_call_list.append(mock.call(econtext, instance,"},{"line_number":2938,"context_line":"                                                  \u0027reboot.error\u0027, fault\u003dfault))"},{"line_number":2939,"context_line":"                notify_action_call_list.append("},{"line_number":2940,"context_line":"                    mock.call(econtext, instance, \u0027reboot.error\u0027, fault\u003dfault))"},{"line_number":2941,"context_line":"            notify_call_list.append(mock.call(econtext, instance,"},{"line_number":2942,"context_line":"                                              \u0027reboot.end\u0027))"},{"line_number":2943,"context_line":"            notify_action_call_list.append("}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_1f95ec85","line":2940,"range":{"start_line":2939,"start_character":0,"end_line":2940,"end_character":79},"in_reply_to":"1a6eadb0_a96dee33","updated":"2017-01-06 10:35:59.000000000","message":"In a subsequent patch, reboot.error is also transformed and tested, this code is needed there. It might look weird, but I think it should be here, as notify_action_list is created here, and filled here, so that would also look weird if this list filling was spliced into 2 separate patches.","commit_id":"0254e24c802b089731e520fd653262ce9c351a3d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"049e680940ba16b0750ca13fa69cdbd63c6c6a42","unresolved":false,"context_lines":[{"line_number":2950,"context_line":"            if fail_running:"},{"line_number":2951,"context_line":"                notify_call_list.append(mock.call(econtext, instance,"},{"line_number":2952,"context_line":"                                                  \u0027reboot.error\u0027, fault\u003dfault))"},{"line_number":2953,"context_line":"                notify_action_call_list.append("},{"line_number":2954,"context_line":"                    mock.call(econtext, instance, \u0027reboot.error\u0027, fault\u003dfault))"},{"line_number":2955,"context_line":"            notify_call_list.append(mock.call(econtext, instance,"},{"line_number":2956,"context_line":"                                              \u0027reboot.end\u0027))"},{"line_number":2957,"context_line":"            notify_action_call_list.append("}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_395ea5e9","line":2954,"range":{"start_line":2953,"start_character":0,"end_line":2954,"end_character":79},"updated":"2017-01-11 10:20:13.000000000","message":"How can this be passing if the emitting of the reboot.error notification is only added in the subsequent patch?","commit_id":"db765c4ab26241a0bd98c19c56383ff62dec6aab"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"0e2b17d7eccf5f8889cacb5fa867387756c13ed3","unresolved":false,"context_lines":[{"line_number":2950,"context_line":"            if fail_running:"},{"line_number":2951,"context_line":"                notify_call_list.append(mock.call(econtext, instance,"},{"line_number":2952,"context_line":"                                                  \u0027reboot.error\u0027, fault\u003dfault))"},{"line_number":2953,"context_line":"                notify_action_call_list.append("},{"line_number":2954,"context_line":"                    mock.call(econtext, instance, \u0027reboot.error\u0027, fault\u003dfault))"},{"line_number":2955,"context_line":"            notify_call_list.append(mock.call(econtext, instance,"},{"line_number":2956,"context_line":"                                              \u0027reboot.end\u0027))"},{"line_number":2957,"context_line":"            notify_action_call_list.append("}],"source_content_type":"text/x-python","patch_set":11,"id":"7a3c09a3_0cd8c11c","line":2954,"range":{"start_line":2953,"start_character":0,"end_line":2954,"end_character":79},"in_reply_to":"ba5201f7_395ea5e9","updated":"2017-01-16 15:41:40.000000000","message":"Hi Gibi, \nI think I made a mistake on L2978. \n\n    mock_notify_action.assert_has_calls(mock_notify_action)\n\nThat line should be:\n\n    mock_notify_action.assert_has_calls(notify_action_call_list)\n\nSo I think thats why tests are passing. I\u0027m currently working on this, then I will update this patch along with the reboot.error case.","commit_id":"db765c4ab26241a0bd98c19c56383ff62dec6aab"}]}
