)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dbd07b475f52b02c01fe6239f11ce82b955418a2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alex Szarka \u003cxavvior@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-11 14:16:06 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP]Transform error notification extend instance.rebuild"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I8340817977ed7b15bb85d266de4fe9eedb0b0fa0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a629dbe_b457a756","line":7,"updated":"2016-11-11 13:25:08.000000000","message":"Drop the [WIP]. The Workflow -1 already signals that this is work in progress.","commit_id":"c8f3401f88645736a2fbfd19a8063ebb64a6c14b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dbd07b475f52b02c01fe6239f11ce82b955418a2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alex Szarka \u003cxavvior@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-11 14:16:06 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP]Transform error notification extend instance.rebuild"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I8340817977ed7b15bb85d266de4fe9eedb0b0fa0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a629dbe_54cd6b2f","line":7,"range":{"start_line":7,"start_character":5,"end_line":7,"end_character":57},"updated":"2016-11-11 13:25:08.000000000","message":"I think we can simply say:\nTransform instance.rebuild.error notification","commit_id":"c8f3401f88645736a2fbfd19a8063ebb64a6c14b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ca1ce25fde7d848d578d1ed22c678748232fe3e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Co-Authored-By: Gábor Antal \u003cantal@inf.u-szeged.hu\u003e"},{"line_number":10,"context_line":"Change-Id: I8340817977ed7b15bb85d266de4fe9eedb0b0fa0"},{"line_number":11,"context_line":"Implements: bp versioned-notification-transformation-ocata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa31d9ce_44a794bc","line":11,"updated":"2017-02-15 11:43:47.000000000","message":"if you have to respin the patch then please change this to versioned-notification-transformation-pike","commit_id":"b3ecdaa6018c356780cd0af47b9c9aeed964fb85"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"502dafe293a4fc3a4c53102684444fdfe7bcb8fd","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Co-Authored-By: Gábor Antal \u003cantal@inf.u-szeged.hu\u003e"},{"line_number":10,"context_line":"Change-Id: I8340817977ed7b15bb85d266de4fe9eedb0b0fa0"},{"line_number":11,"context_line":"Implements: bp versioned-notification-transformation-ocata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"9a30ddce_610507c1","line":11,"in_reply_to":"fa31d9ce_44a794bc","updated":"2017-03-07 21:11:21.000000000","message":"Let\u0027s fix this now please.","commit_id":"b3ecdaa6018c356780cd0af47b9c9aeed964fb85"}],"doc/notification_samples/instance-rebuild-error.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7d429aeed57d286558ed47062328669cc479c5a7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"            \"created_at\":\"2012-10-29T13:42:11Z\",\r"},{"line_number":8,"context_line":"            \"deleted_at\":null,\r"},{"line_number":9,"context_line":"            \"display_name\":\"some-server\",\r"},{"line_number":10,"context_line":"            \"fault\":null,\r"},{"line_number":11,"context_line":"            \"host\":\"compute\",\r"},{"line_number":12,"context_line":"            \"host_name\":\"some-server\",\r"},{"line_number":13,"context_line":"            \"ip_addresses\": [{\r"}],"source_content_type":"application/json","patch_set":12,"id":"7a77a97e_ad5531c7","line":10,"updated":"2016-11-22 12:16:05.000000000","message":"fault shall contains information about the fault happened.","commit_id":"18284cb5040f520f3976f27b950dc95ddb13bbf7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"aab75fa77fb2cab808b1d2bfcc5c96d42e69fd8d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"                \"nova_object.data\": {\r"},{"line_number":12,"context_line":"                    \"exception\": \"ComputeResourcesUnavailable\",\r"},{"line_number":13,"context_line":"                    \"exception_message\": \"Insufficient compute resources: fake-resource.\",\r"},{"line_number":14,"context_line":"                    \"function_name\": \"_mock_call\",\r"},{"line_number":15,"context_line":"                    \"module_name\": \"mock.mock\"\r"},{"line_number":16,"context_line":"                },\r"},{"line_number":17,"context_line":"                \"nova_object.name\": \"ExceptionPayload\",\r"},{"line_number":18,"context_line":"                \"nova_object.namespace\": \"nova\",\r"}],"source_content_type":"application/json","patch_set":14,"id":"5a74a57a_671bb681","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":46},"updated":"2016-11-28 16:09:51.000000000","message":"This can be made nicer with a trick the sample test, see the extra function that was introduced in the create.error test to simulate nicer function names for the sample","commit_id":"8b74d32450ddc703f168c1fe5bd807ed30765cf9"}],"nova/compute/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7d429aeed57d286558ed47062328669cc479c5a7","unresolved":false,"context_lines":[{"line_number":2714,"context_line":"                compute_utils.notify_about_instance_action("},{"line_number":2715,"context_line":"                    context, instance, self.host,"},{"line_number":2716,"context_line":"                    action\u003dfields.NotificationAction.REBUILD,"},{"line_number":2717,"context_line":"                    phase\u003dfields.NotificationPhase.ERROR)"},{"line_number":2718,"context_line":"                raise exception.BuildAbortException("},{"line_number":2719,"context_line":"                    instance_uuid\u003dinstance.uuid, reason\u003de.format_message())"},{"line_number":2720,"context_line":"            except (exception.InstanceNotFound,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_ad90d196","line":2717,"updated":"2016-11-22 12:16:05.000000000","message":"You have to pass the exception to the function to make sure that the fault field of the notification payload is filled properly. Check the instance.create.error patch https://review.openstack.org/#/c/397715/","commit_id":"18284cb5040f520f3976f27b950dc95ddb13bbf7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7d429aeed57d286558ed47062328669cc479c5a7","unresolved":false,"context_lines":[{"line_number":2727,"context_line":"                compute_utils.notify_about_instance_action("},{"line_number":2728,"context_line":"                    context, instance, self.host,"},{"line_number":2729,"context_line":"                    action\u003dfields.NotificationAction.REBUILD,"},{"line_number":2730,"context_line":"                    phase\u003dfields.NotificationPhase.ERROR)"},{"line_number":2731,"context_line":"            except Exception as e:"},{"line_number":2732,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":2733,"context_line":"                self._notify_about_instance_usage(context, instance,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_ede80919","line":2730,"updated":"2016-11-22 12:16:05.000000000","message":"ditto","commit_id":"18284cb5040f520f3976f27b950dc95ddb13bbf7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7d429aeed57d286558ed47062328669cc479c5a7","unresolved":false,"context_lines":[{"line_number":2735,"context_line":"                compute_utils.notify_about_instance_action("},{"line_number":2736,"context_line":"                    context, instance, self.host,"},{"line_number":2737,"context_line":"                    action\u003dfields.NotificationAction.REBUILD,"},{"line_number":2738,"context_line":"                    phase\u003dfields.NotificationPhase.ERROR)"},{"line_number":2739,"context_line":"                raise"},{"line_number":2740,"context_line":"            else:"},{"line_number":2741,"context_line":"                instance.apply_migration_context()"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_2df3e10b","line":2738,"updated":"2016-11-22 12:16:05.000000000","message":"ditto","commit_id":"18284cb5040f520f3976f27b950dc95ddb13bbf7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"502dafe293a4fc3a4c53102684444fdfe7bcb8fd","unresolved":false,"context_lines":[{"line_number":2754,"context_line":"                # migration record for potential cleanup later"},{"line_number":2755,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":2756,"context_line":""},{"line_number":2757,"context_line":"                self._notify_about_instance_usage(context, instance,"},{"line_number":2758,"context_line":"                        \u0027rebuild.error\u0027, fault\u003de)"},{"line_number":2759,"context_line":"                compute_utils.notify_about_instance_action("},{"line_number":2760,"context_line":"                    context, instance, self.host,"},{"line_number":2761,"context_line":"                    action\u003dfields.NotificationAction.REBUILD,"},{"line_number":2762,"context_line":"                    phase\u003dfields.NotificationPhase.ERROR, exception\u003de)"},{"line_number":2763,"context_line":"                raise exception.BuildAbortException("},{"line_number":2764,"context_line":"                    instance_uuid\u003dinstance.uuid, reason\u003de.format_message())"},{"line_number":2765,"context_line":"            except (exception.InstanceNotFound,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a30ddce_21f22fd3","line":2762,"range":{"start_line":2757,"start_character":16,"end_line":2762,"end_character":70},"updated":"2017-03-07 21:11:21.000000000","message":"Rather than repeat these same two method calls 3 times, can we move this into a private method and just call it for each exception case please? I really dislike the duplication involved for all of the notification stuff.","commit_id":"b3ecdaa6018c356780cd0af47b9c9aeed964fb85"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8f075867c838c52aff5f7fb0ae31ee008cad56e1","unresolved":false,"context_lines":[{"line_number":2754,"context_line":"                # migration record for potential cleanup later"},{"line_number":2755,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":2756,"context_line":""},{"line_number":2757,"context_line":"                self._notify_about_instance_usage(context, instance,"},{"line_number":2758,"context_line":"                        \u0027rebuild.error\u0027, fault\u003de)"},{"line_number":2759,"context_line":"                compute_utils.notify_about_instance_action("},{"line_number":2760,"context_line":"                    context, instance, self.host,"},{"line_number":2761,"context_line":"                    action\u003dfields.NotificationAction.REBUILD,"},{"line_number":2762,"context_line":"                    phase\u003dfields.NotificationPhase.ERROR, exception\u003de)"},{"line_number":2763,"context_line":"                raise exception.BuildAbortException("},{"line_number":2764,"context_line":"                    instance_uuid\u003dinstance.uuid, reason\u003de.format_message())"},{"line_number":2765,"context_line":"            except (exception.InstanceNotFound,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a30ddce_c96e9a95","line":2762,"range":{"start_line":2757,"start_character":16,"end_line":2762,"end_character":70},"in_reply_to":"9a30ddce_21f22fd3","updated":"2017-03-09 08:51:18.000000000","message":"Do you mean creating a private method then calling it 3 times? That is OK to me but I don\u0027t see how that will be less complex. Especially that this private method will have a long and obscure signature because it needs to support both the legacy and the new parameter set needed for the notifications.\n\nOther way could be to implement a context manager like I tried in https://review.openstack.org/#/c/437222/5/nova/compute/api.py\n\nDo you like that approach?","commit_id":"b3ecdaa6018c356780cd0af47b9c9aeed964fb85"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec7aca36107e8cf2d10498b31437c6b0b0a9d811","unresolved":false,"context_lines":[{"line_number":2754,"context_line":"                # migration record for potential cleanup later"},{"line_number":2755,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":2756,"context_line":""},{"line_number":2757,"context_line":"                self._notify_about_instance_usage(context, instance,"},{"line_number":2758,"context_line":"                        \u0027rebuild.error\u0027, fault\u003de)"},{"line_number":2759,"context_line":"                compute_utils.notify_about_instance_action("},{"line_number":2760,"context_line":"                    context, instance, self.host,"},{"line_number":2761,"context_line":"                    action\u003dfields.NotificationAction.REBUILD,"},{"line_number":2762,"context_line":"                    phase\u003dfields.NotificationPhase.ERROR, exception\u003de)"},{"line_number":2763,"context_line":"                raise exception.BuildAbortException("},{"line_number":2764,"context_line":"                    instance_uuid\u003dinstance.uuid, reason\u003de.format_message())"},{"line_number":2765,"context_line":"            except (exception.InstanceNotFound,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a30ddce_40bd14b6","line":2762,"range":{"start_line":2757,"start_character":16,"end_line":2762,"end_character":70},"in_reply_to":"9a30ddce_c96e9a95","updated":"2017-03-09 13:20:51.000000000","message":"I think either would work but the context manager is maybe too much for this case. I\u0027d think this is all you need:\n\ndef _notify_instance_rebuild_error(self, context, instance,\n                                   error):\n   ...","commit_id":"b3ecdaa6018c356780cd0af47b9c9aeed964fb85"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":18603,"name":"Béla Vancsics","email":"vancsics@inf.u-szeged.hu","username":"vancsics"},"change_message_id":"61ce4d8e1761013d3f2270f8e59810c387530e95","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":476,"context_line":"        self._wait_for_state_change(self.api, server, \u0027ACTIVE\u0027)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._do_rebuild_instance_with_claim\u0027, side_effect\u003dException())"},{"line_number":479,"context_line":"    def test_rebuild_server_exc(self, mock_rebuild):"},{"line_number":480,"context_line":"        server \u003d self._boot_a_server("},{"line_number":481,"context_line":"            extra_params \u003d {\u0027networks\u0027: [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_b7d342d4","line":478,"range":{"start_line":478,"start_character":4,"end_line":478,"end_character":111},"updated":"2016-11-18 08:08:36.000000000","message":"pep8: E501 line too long (111 \u003e 79 characters)","commit_id":"a016d7d2444ce41d13077ad010be0cc04a684ab3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"aab75fa77fb2cab808b1d2bfcc5c96d42e69fd8d","unresolved":false,"context_lines":[{"line_number":526,"context_line":"            }"},{"line_number":527,"context_line":"        }"},{"line_number":528,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":529,"context_line":"        mock_rebuild.side_effect \u003d exception.ComputeResourcesUnavailable("},{"line_number":530,"context_line":"            reason\u003d\"fake-resource\")"},{"line_number":531,"context_line":"        self._wait_for_state_change(self.api, server, expected_status\u003d\u0027ERROR\u0027)"},{"line_number":532,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":533,"context_line":"        self._verify_notification("}],"source_content_type":"text/x-python","patch_set":14,"id":"5a74a57a_6250040c","line":530,"range":{"start_line":529,"start_character":0,"end_line":530,"end_character":35},"updated":"2016-11-28 16:09:51.000000000","message":"if you wrap the dies effect into a function then the sample will have nicer content. see the similar thing in the create.error test","commit_id":"8b74d32450ddc703f168c1fe5bd807ed30765cf9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"502dafe293a4fc3a4c53102684444fdfe7bcb8fd","unresolved":false,"context_lines":[{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager.\u0027"},{"line_number":540,"context_line":"                \u0027_do_rebuild_instance_with_claim\u0027)"},{"line_number":541,"context_line":"    def test_rebuild_server_exc(self, mock_rebuild):"},{"line_number":542,"context_line":"        def _computeResourcesUnavailable(*args, **kwargs):"},{"line_number":543,"context_line":"            raise exception.ComputeResourcesUnavailable("},{"line_number":544,"context_line":"                reason\u003d\"fake-resource\")"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a30ddce_61dd0714","line":541,"updated":"2017-03-07 21:11:21.000000000","message":"nit: I\u0027d prefer that we didn\u0027t put this method in between other methods that are called from the test_instance_action test since those are run in a sequence. It\u0027s not a huge deal, but it would be nice if this came separately after the methods called from test_instance_action. Also, can we rebase this on top of the instance.rebuild.start/end patch so that this test can be after the rebuild test added in that one so they are together?","commit_id":"b3ecdaa6018c356780cd0af47b9c9aeed964fb85"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"502dafe293a4fc3a4c53102684444fdfe7bcb8fd","unresolved":false,"context_lines":[{"line_number":539,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager.\u0027"},{"line_number":540,"context_line":"                \u0027_do_rebuild_instance_with_claim\u0027)"},{"line_number":541,"context_line":"    def test_rebuild_server_exc(self, mock_rebuild):"},{"line_number":542,"context_line":"        def _computeResourcesUnavailable(*args, **kwargs):"},{"line_number":543,"context_line":"            raise exception.ComputeResourcesUnavailable("},{"line_number":544,"context_line":"                reason\u003d\"fake-resource\")"},{"line_number":545,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a30ddce_21c94f79","line":542,"range":{"start_line":542,"start_character":12,"end_line":542,"end_character":40},"updated":"2017-03-07 21:11:21.000000000","message":"nit: _compute_resources_unavailable\n\nWe don\u0027t generally have camel-case for method names with python in nova.","commit_id":"b3ecdaa6018c356780cd0af47b9c9aeed964fb85"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b07242ccac8d8adc5649f2abf9d2189be72c8a9f","unresolved":false,"context_lines":[{"line_number":547,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager.\u0027"},{"line_number":548,"context_line":"                \u0027_do_rebuild_instance_with_claim\u0027)"},{"line_number":549,"context_line":"    def test_rebuild_server_exc(self, mock_rebuild):"},{"line_number":550,"context_line":"        def _computeResourcesUnavailable(*args, **kwargs):"},{"line_number":551,"context_line":"            raise exception.ComputeResourcesUnavailable("},{"line_number":552,"context_line":"                reason\u003d\"fake-resource\")"},{"line_number":553,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a30ddce_0ef2149a","line":550,"range":{"start_line":550,"start_character":12,"end_line":550,"end_character":40},"updated":"2017-03-12 15:15:56.000000000","message":"This should be lowercase.","commit_id":"7247c3c26d0545f9ff8e887d539cde4da58eff29"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"b0c18d38fd1369e7bc9265b6915653ed9ce9a20a","unresolved":false,"context_lines":[{"line_number":2985,"context_line":"        if (side_effect \u003d\u003d exception.InstanceNotFound):"},{"line_number":2986,"context_line":"            mock_rebuild.side_effect \u003d side_effect(instance_id\u003dinstance.uuid)"},{"line_number":2987,"context_line":"        elif (side_effect \u003d\u003d exception.UnexpectedDeletingTaskStateError):"},{"line_number":2988,"context_line":"            mock_rebuild.side_effect \u003d side_effect("},{"line_number":2989,"context_line":"                instance_uuid\u003dinstance.uuid, expected\u003d\u0027expected\u0027,"},{"line_number":2990,"context_line":"                actual\u003d\u0027actual\u0027)"},{"line_number":2991,"context_line":"        self.compute.rebuild_instance(self.context, instance, None, None, None,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a77a97e_c031eb5b","line":2988,"range":{"start_line":2988,"start_character":25,"end_line":2988,"end_character":50},"updated":"2016-11-17 19:10:27.000000000","message":"nit: I think that can be harder to understand. In my opinion, side_effect parameter should be renamed to exception, or exc. That would be more readable and understandable","commit_id":"b787823b2e6100cc351d39af0e946b78947132aa"},{"author":{"_account_id":18603,"name":"Béla Vancsics","email":"vancsics@inf.u-szeged.hu","username":"vancsics"},"change_message_id":"61ce4d8e1761013d3f2270f8e59810c387530e95","unresolved":false,"context_lines":[{"line_number":2992,"context_line":"                                      None, None, None, None)"},{"line_number":2993,"context_line":"        mock_set.assert_called_once_with(None, \u0027failed\u0027)"},{"line_number":2994,"context_line":"        mock_notify_about_instance_usage.assert_called_once_with("},{"line_number":2995,"context_line":"            mock.ANY, instance,\u0027rebuild.error\u0027, fault\u003dmock_rebuild.side_effect)"},{"line_number":2996,"context_line":"        mock_notify.assert_called_once_with("},{"line_number":2997,"context_line":"            mock.ANY, instance, \u0027fake-mini\u0027, action\u003d\u0027rebuild\u0027, phase\u003d\u0027error\u0027)"},{"line_number":2998,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_37e01296","line":2995,"range":{"start_line":2995,"start_character":12,"end_line":2995,"end_character":79},"updated":"2016-11-18 08:08:36.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"a016d7d2444ce41d13077ad010be0cc04a684ab3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7d429aeed57d286558ed47062328669cc479c5a7","unresolved":false,"context_lines":[{"line_number":2982,"context_line":"        instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":2983,"context_line":""},{"line_number":2984,"context_line":"        # Side effect statements with pre-configured arguments"},{"line_number":2985,"context_line":"        if (exc \u003d\u003d exception.InstanceNotFound):"},{"line_number":2986,"context_line":"            mock_rebuild.side_effect \u003d exc(instance_id\u003dinstance.uuid)"},{"line_number":2987,"context_line":"        elif (exc \u003d\u003d exception.UnexpectedDeletingTaskStateError):"},{"line_number":2988,"context_line":"            mock_rebuild.side_effect \u003d exc("},{"line_number":2989,"context_line":"                instance_uuid\u003dinstance.uuid, expected\u003d\u0027expected\u0027,"},{"line_number":2990,"context_line":"                actual\u003d\u0027actual\u0027)"},{"line_number":2991,"context_line":"        self.compute.rebuild_instance(self.context, instance, None, None, None,"},{"line_number":2992,"context_line":"                                      None, None, None, None)"},{"line_number":2993,"context_line":"        mock_set.assert_called_once_with(None, \u0027failed\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_0d8b851f","line":2990,"range":{"start_line":2985,"start_character":1,"end_line":2990,"end_character":32},"updated":"2016-11-22 12:16:05.000000000","message":"What is the reason behind this refactoring? Why did you move the exception instantiation from the test function to this utility function? I think this extra if-elif construct is unnecessary if the exception is instantiated in test_rebuild_deleting and test_rebuild_notfound.","commit_id":"18284cb5040f520f3976f27b950dc95ddb13bbf7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7d429aeed57d286558ed47062328669cc479c5a7","unresolved":false,"context_lines":[{"line_number":2992,"context_line":"                                      None, None, None, None)"},{"line_number":2993,"context_line":"        mock_set.assert_called_once_with(None, \u0027failed\u0027)"},{"line_number":2994,"context_line":"        mock_notify_about_instance_usage.assert_called_once_with("},{"line_number":2995,"context_line":"            mock.ANY, instance, \u0027rebuild.error\u0027, fault\u003dmock_rebuild.side_effect)"},{"line_number":2996,"context_line":"        mock_notify.assert_called_once_with("},{"line_number":2997,"context_line":"            mock.ANY, instance, \u0027fake-mini\u0027, action\u003d\u0027rebuild\u0027, phase\u003d\u0027error\u0027)"},{"line_number":2998,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_ad6291d6","line":2995,"range":{"start_line":2995,"start_character":79,"end_line":2995,"end_character":80},"updated":"2016-11-22 12:16:05.000000000","message":"This is longer than 79 chars, you have to split the line to make pep8 happy.","commit_id":"18284cb5040f520f3976f27b950dc95ddb13bbf7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"502dafe293a4fc3a4c53102684444fdfe7bcb8fd","unresolved":false,"context_lines":[{"line_number":2973,"context_line":""},{"line_number":2974,"context_line":"        do_test()"},{"line_number":2975,"context_line":""},{"line_number":2976,"context_line":"    @mock.patch.object(manager.ComputeManager, \u0027_set_migration_status\u0027)"},{"line_number":2977,"context_line":"    @mock.patch.object(manager.ComputeManager,"},{"line_number":2978,"context_line":"                       \u0027_do_rebuild_instance_with_claim\u0027)"},{"line_number":2979,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_instance_action\u0027)"},{"line_number":2980,"context_line":"    @mock.patch.object(manager.ComputeManager, \u0027_notify_about_instance_usage\u0027)"},{"line_number":2981,"context_line":"    def _test_rebuild_ex(self, instance, exc, mock_notify_about_instance_usage,"},{"line_number":2982,"context_line":"                         mock_notify, mock_rebuild, mock_set):"},{"line_number":2983,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a30ddce_e13f3723","line":2980,"range":{"start_line":2976,"start_character":4,"end_line":2980,"end_character":78},"updated":"2017-03-07 21:11:21.000000000","message":"I\u0027m not sure why you needed to re-write how the mocks were done in this test, it clutters up the review.","commit_id":"b3ecdaa6018c356780cd0af47b9c9aeed964fb85"},{"author":{"_account_id":18337,"name":"Sujitha","email":"sujitha.neti@intel.com","username":"Sujitha"},"change_message_id":"f0927d5a5992b15827a0ae0024e768c89b55e987","unresolved":false,"context_lines":[{"line_number":2987,"context_line":"                                      None, None, None, None)"},{"line_number":2988,"context_line":"        mock_set.assert_called_once_with(None, \u0027failed\u0027)"},{"line_number":2989,"context_line":"        mock_notify_about_instance_usage.assert_called_once_with("},{"line_number":2990,"context_line":"            mock.ANY, instance, \u0027rebuild.error\u0027, fault\u003dmock_rebuild.side_effect"},{"line_number":2991,"context_line":"        )"},{"line_number":2992,"context_line":"        mock_notify.assert_called_once_with("},{"line_number":2993,"context_line":"            mock.ANY, instance, \u0027fake-mini\u0027, action\u003d\u0027rebuild\u0027, phase\u003d\u0027error\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_f82f0ca5","line":2990,"range":{"start_line":2990,"start_character":55,"end_line":2990,"end_character":79},"updated":"2017-01-09 20:30:10.000000000","message":"nit: You can just write exc here.","commit_id":"b3ecdaa6018c356780cd0af47b9c9aeed964fb85"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"502dafe293a4fc3a4c53102684444fdfe7bcb8fd","unresolved":false,"context_lines":[{"line_number":2987,"context_line":"                                      None, None, None, None)"},{"line_number":2988,"context_line":"        mock_set.assert_called_once_with(None, \u0027failed\u0027)"},{"line_number":2989,"context_line":"        mock_notify_about_instance_usage.assert_called_once_with("},{"line_number":2990,"context_line":"            mock.ANY, instance, \u0027rebuild.error\u0027, fault\u003dmock_rebuild.side_effect"},{"line_number":2991,"context_line":"        )"},{"line_number":2992,"context_line":"        mock_notify.assert_called_once_with("},{"line_number":2993,"context_line":"            mock.ANY, instance, \u0027fake-mini\u0027, action\u003d\u0027rebuild\u0027, phase\u003d\u0027error\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a30ddce_41d9e320","line":2990,"range":{"start_line":2990,"start_character":55,"end_line":2990,"end_character":79},"in_reply_to":"ba5201f7_f82f0ca5","updated":"2017-03-07 21:11:21.000000000","message":"+1","commit_id":"b3ecdaa6018c356780cd0af47b9c9aeed964fb85"}]}
