)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2ff189440680cd8c74607c2dc0bba33f38c2619e","unresolved":false,"context_lines":[{"line_number":4917,"context_line":""},{"line_number":4918,"context_line":"    @object_compat"},{"line_number":4919,"context_line":"    @wrap_exception()"},{"line_number":4920,"context_line":"    @reverts_task_state"},{"line_number":4921,"context_line":"    @wrap_instance_fault"},{"line_number":4922,"context_line":"    def detach_interface(self, context, instance, port_id):"},{"line_number":4923,"context_line":"        \"\"\"Detach an network adapter from an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_18c8ac74","line":4920,"updated":"2015-03-17 21:32:18.000000000","message":"If you\u0027re in a situation where you can query things after the fact, i.e. not the gate, the exception should be stored as an instance fault in the db.","commit_id":"3244063a5cabd76a4651df8c0d8ff496ffc465d4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0652d1bbca8405ab405307796647db1c150cdf9e","unresolved":false,"context_lines":[{"line_number":4917,"context_line":""},{"line_number":4918,"context_line":"    @object_compat"},{"line_number":4919,"context_line":"    @wrap_exception()"},{"line_number":4920,"context_line":"    @reverts_task_state"},{"line_number":4921,"context_line":"    @wrap_instance_fault"},{"line_number":4922,"context_line":"    def detach_interface(self, context, instance, port_id):"},{"line_number":4923,"context_line":"        \"\"\"Detach an network adapter from an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_ba2bdd80","line":4920,"in_reply_to":"9a80dd14_18c8ac74","updated":"2015-03-18 21:24:49.000000000","message":"Yeah, I thought about that. Tempest doesn\u0027t do any kind of instance-fault post-error queries as far as I know, not that it couldn\u0027t be added.  Adding logging doesn\u0027t seem like a big deal though either, especially since this doesn\u0027t set your instance to error state or anything.  Note that we also log when deallocate_port_for_instance in attach_interface fails.","commit_id":"3244063a5cabd76a4651df8c0d8ff496ffc465d4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"801429034360274b25f301ae84455ba0cb9af95c","unresolved":false,"context_lines":[{"line_number":4917,"context_line":""},{"line_number":4918,"context_line":"    @object_compat"},{"line_number":4919,"context_line":"    @wrap_exception()"},{"line_number":4920,"context_line":"    @reverts_task_state"},{"line_number":4921,"context_line":"    @wrap_instance_fault"},{"line_number":4922,"context_line":"    def detach_interface(self, context, instance, port_id):"},{"line_number":4923,"context_line":"        \"\"\"Detach an network adapter from an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_0df81149","line":4920,"in_reply_to":"9a80dd14_ba2bdd80","updated":"2015-03-19 14:53:08.000000000","message":"Yeah.  Not against the logging here, just mentioning this while Jenkins ran.","commit_id":"3244063a5cabd76a4651df8c0d8ff496ffc465d4"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"801429034360274b25f301ae84455ba0cb9af95c","unresolved":false,"context_lines":[{"line_number":9237,"context_line":"            self.assertEqual(error, ex)"},{"line_number":9238,"context_line":"        mock_deallocate.assert_called_once_with("},{"line_number":9239,"context_line":"            self.context, instance, port_id)"},{"line_number":9240,"context_line":"        self.assertEqual(1, warn_mock.call_count)"},{"line_number":9241,"context_line":""},{"line_number":9242,"context_line":"    def test_attach_volume(self):"},{"line_number":9243,"context_line":"        fake_bdm \u003d fake_block_device.FakeDbBlockDeviceDict("}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_88c6af9a","line":9240,"updated":"2015-03-19 14:53:08.000000000","message":"Testing logging always seems so fragile, but this is better than nothing.  Any other approach I can think of seems like overkill and mostly just as fragile.","commit_id":"3244063a5cabd76a4651df8c0d8ff496ffc465d4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa98aa52509eb43158aebf4295a928670f449be3","unresolved":false,"context_lines":[{"line_number":9237,"context_line":"            self.assertEqual(error, ex)"},{"line_number":9238,"context_line":"        mock_deallocate.assert_called_once_with("},{"line_number":9239,"context_line":"            self.context, instance, port_id)"},{"line_number":9240,"context_line":"        self.assertEqual(1, warn_mock.call_count)"},{"line_number":9241,"context_line":""},{"line_number":9242,"context_line":"    def test_attach_volume(self):"},{"line_number":9243,"context_line":"        fake_bdm \u003d fake_block_device.FakeDbBlockDeviceDict("}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_90833102","line":9240,"in_reply_to":"9a80dd14_88c6af9a","updated":"2015-03-19 16:15:28.000000000","message":"Yeah, agreed.  This is actually why I had to mock this out:\n\nmock.patch.object(self.compute, \u0027_instance_update\u0027)) as (\n\nBecause that comes from @reverts_task_state where _instance_update raises an InstanceNotFound and it was logging a warning - that tripped me up.","commit_id":"3244063a5cabd76a4651df8c0d8ff496ffc465d4"}]}
