)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21239,"name":"Alex Szarka","email":"szarka@inf.u-szeged.hu","username":"xavvior"},"change_message_id":"7d69a904cbecc6a494ffaf5cae799239c50489f6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"to validate that the field is updated on attach/detach"},{"line_number":12,"context_line":"volume."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Based on patch https://review.openstack.org/#/c/55824"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Idb2191b4ad83a2282051ce64846922fbcd0dd597"},{"line_number":17,"context_line":"Closes-Bug: #1250066"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"bacf61ea_2c24305c","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":53},"updated":"2016-08-01 15:15:49.000000000","message":"Please use the dependency mark:\nDepends-On: I6279025054d0f8c0c895575f24436d9aee4e9b63","commit_id":"9df5f7cf909e855627852f329f39bb983ad44723"},{"author":{"_account_id":18335,"name":"Pushkar Umaranikar","email":"pushkar.umaranikar@intel.com","username":"pushkarumaranikar"},"change_message_id":"a0e4ee83a57cf26900c0b78fd8e79fd1c2bcdeff","unresolved":false,"context_lines":[{"line_number":11,"context_line":"to validate that the field is updated on attach/detach"},{"line_number":12,"context_line":"volume."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Based on patch https://review.openstack.org/#/c/55824"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Idb2191b4ad83a2282051ce64846922fbcd0dd597"},{"line_number":17,"context_line":"Closes-Bug: #1250066"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"bacf61ea_929e1205","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":53},"in_reply_to":"bacf61ea_2c24305c","updated":"2016-08-01 15:35:45.000000000","message":"It is not a follow up patch. I guess \"Depends-On\" is used for follow up patch. The reason I have added this because I am referring this patch for implementation.","commit_id":"9df5f7cf909e855627852f329f39bb983ad44723"}],"nova/compute/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"55aad7247ad1f74512709f45eeb98c2ccba32fdc","unresolved":false,"context_lines":[{"line_number":4659,"context_line":"                              context\u003dcontext, instance\u003dinstance)"},{"line_number":4660,"context_line":"                self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":4661,"context_line":"        self._instance_update(context, instance,"},{"line_number":4662,"context_line":"                              updated_at \u003d timeutils.utcnow())"},{"line_number":4663,"context_line":"        info \u003d {\u0027volume_id\u0027: bdm.volume_id}"},{"line_number":4664,"context_line":"        self._notify_about_instance_usage("},{"line_number":4665,"context_line":"            context, instance, \"volume.attach\", extra_usage_info\u003dinfo)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_2a7c4171","line":4662,"updated":"2015-12-02 08:52:44.000000000","message":"you don\u0027t need whitespace around \u003d operator in function calls","commit_id":"49b644899a053ce749d9524cc02f6cc5acbc5e9c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"56f1059ac8220fc394a3d2fc60f433f28f38bcfd","unresolved":false,"context_lines":[{"line_number":4659,"context_line":"                              context\u003dcontext, instance\u003dinstance)"},{"line_number":4660,"context_line":"                self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":4661,"context_line":"        self._instance_update(context, instance,"},{"line_number":4662,"context_line":"                              updated_at\u003dtimeutils.utcnow())"},{"line_number":4663,"context_line":"        info \u003d {\u0027volume_id\u0027: bdm.volume_id}"},{"line_number":4664,"context_line":"        self._notify_about_instance_usage("},{"line_number":4665,"context_line":"            context, instance, \"volume.attach\", extra_usage_info\u003dinfo)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a5ae5dd_1ccfb6b1","line":4662,"updated":"2016-02-03 10:43:16.000000000","message":"is there a reason we can\u0027t like the updated_at be picked up from the db?","commit_id":"e10318e5a4aaa4d88c72e1515795029d926bb038"},{"author":{"_account_id":18335,"name":"Pushkar Umaranikar","email":"pushkar.umaranikar@intel.com","username":"pushkarumaranikar"},"change_message_id":"b5f13813ae4412eefa4842d1cb09d0d0354155e1","unresolved":false,"context_lines":[{"line_number":4659,"context_line":"                              context\u003dcontext, instance\u003dinstance)"},{"line_number":4660,"context_line":"                self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":4661,"context_line":"        self._instance_update(context, instance,"},{"line_number":4662,"context_line":"                              updated_at\u003dtimeutils.utcnow())"},{"line_number":4663,"context_line":"        info \u003d {\u0027volume_id\u0027: bdm.volume_id}"},{"line_number":4664,"context_line":"        self._notify_about_instance_usage("},{"line_number":4665,"context_line":"            context, instance, \"volume.attach\", extra_usage_info\u003dinfo)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a5ae5dd_58d68dc6","line":4662,"in_reply_to":"5a5ae5dd_1ccfb6b1","updated":"2016-02-03 15:08:47.000000000","message":"we are updating value of updated_at field in DB when user attaches a volume to an instance. Hence, We are using current timestamp.\nHere, we don\u0027t want to read timestamp which is already existing in database.","commit_id":"e10318e5a4aaa4d88c72e1515795029d926bb038"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b046555c87714476a6c6bf2cc9760244ac189c6c","unresolved":false,"context_lines":[{"line_number":4755,"context_line":""},{"line_number":4756,"context_line":"        self.volume_api.terminate_connection(context, volume_id, connector)"},{"line_number":4757,"context_line":"        self._instance_update(context, instance,"},{"line_number":4758,"context_line":"                updated_at\u003dtimeutils.utcnow())"},{"line_number":4759,"context_line":""},{"line_number":4760,"context_line":"        if destroy_bdm:"},{"line_number":4761,"context_line":"            bdm.destroy()"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_c4e052fd","line":4758,"updated":"2016-07-05 08:55:44.000000000","message":"Nit: its tempting to put this after self.volume_api.detach, but this happens at the same time as bdm.destroy and notify, so that is \"locally\" correct, I think.","commit_id":"a74a01e657087e3a8279c0ffd228f31154b1c6e1"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"67d3aec2431d59761dff611fd3e6ab8bc8e80484","unresolved":false,"context_lines":[{"line_number":4622,"context_line":"                               \u0027mountpoint\u0027: bdm[\u0027mount_device\u0027]},"},{"line_number":4623,"context_line":"                              context\u003dcontext, instance\u003dinstance)"},{"line_number":4624,"context_line":"                self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":4625,"context_line":"        self._instance_update(context, instance,"},{"line_number":4626,"context_line":"                              updated_at\u003dtimeutils.utcnow())"},{"line_number":4627,"context_line":"        info \u003d {\u0027volume_id\u0027: bdm.volume_id}"},{"line_number":4628,"context_line":"        self._notify_about_instance_usage("}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_31a43607","line":4625,"updated":"2016-07-08 08:22:17.000000000","message":"Yes users can expect that this value to be updated when attach/detach volume.\n\nWe can have that behavior of attaching/detaching to change in future in such case that will trigger instance update_at automatically. That\u0027s why I \u0027d recommend to add comments on both places you have added this method.","commit_id":"55aec0848a4089fe0c43322389f6baf2cba7874b"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"67d3aec2431d59761dff611fd3e6ab8bc8e80484","unresolved":false,"context_lines":[{"line_number":4754,"context_line":"                connector \u003d stashed_connector"},{"line_number":4755,"context_line":""},{"line_number":4756,"context_line":"        self.volume_api.terminate_connection(context, volume_id, connector)"},{"line_number":4757,"context_line":"        self._instance_update(context, instance,"},{"line_number":4758,"context_line":"                updated_at\u003dtimeutils.utcnow())"},{"line_number":4759,"context_line":""},{"line_number":4760,"context_line":"        if destroy_bdm:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_5192a2a0","line":4757,"updated":"2016-07-08 08:22:17.000000000","message":"Please add comment here since it\u0027s something unusual. update_at is expected to be changed automatically.","commit_id":"55aec0848a4089fe0c43322389f6baf2cba7874b"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fe28103b93339aa5ea080a20672c57a74ce6cbcf","unresolved":false,"context_lines":[{"line_number":4622,"context_line":"                               \u0027mountpoint\u0027: bdm[\u0027mount_device\u0027]},"},{"line_number":4623,"context_line":"                              context\u003dcontext, instance\u003dinstance)"},{"line_number":4624,"context_line":"                self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":4625,"context_line":"        # (pumaranikar): Update instance\u0027s updated_at field on volume attach"},{"line_number":4626,"context_line":"        self._instance_update(context, instance,"},{"line_number":4627,"context_line":"                              updated_at\u003dtimeutils.utcnow())"},{"line_number":4628,"context_line":"        info \u003d {\u0027volume_id\u0027: bdm.volume_id}"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_25329410","line":4625,"updated":"2016-07-12 14:22:38.000000000","message":"Since you have to rebase because of the conflicts, please remove \u0027(pumaranikar):\u0027.\n\nAlso I expected to see in the comment WHY?","commit_id":"e7f46533af7842b1f7a24494184edb76330f06e9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fe28103b93339aa5ea080a20672c57a74ce6cbcf","unresolved":false,"context_lines":[{"line_number":4755,"context_line":"                connector \u003d stashed_connector"},{"line_number":4756,"context_line":""},{"line_number":4757,"context_line":"        self.volume_api.terminate_connection(context, volume_id, connector)"},{"line_number":4758,"context_line":"        # (pumaranikar): Update instance\u0027s updated_at field on volume detach"},{"line_number":4759,"context_line":"        self._instance_update(context, instance,"},{"line_number":4760,"context_line":"                updated_at\u003dtimeutils.utcnow())"},{"line_number":4761,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_650f7c39","line":4758,"updated":"2016-07-12 14:22:38.000000000","message":"Likewise here.","commit_id":"e7f46533af7842b1f7a24494184edb76330f06e9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"84ebdbad4397f25e87170ab5f9f01817ea87ae4e","unresolved":false,"context_lines":[{"line_number":4647,"context_line":"                               \u0027mountpoint\u0027: bdm[\u0027mount_device\u0027]},"},{"line_number":4648,"context_line":"                              context\u003dcontext, instance\u003dinstance)"},{"line_number":4649,"context_line":"                self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":4650,"context_line":"        # NOTE: Explicitly update instance\u0027s updated_at field on volume"},{"line_number":4651,"context_line":"        # attach since volume attach does not trigger instance update"},{"line_number":4652,"context_line":"        # automatically."},{"line_number":4653,"context_line":"        self._instance_update(context, instance,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_2914264b","line":4650,"updated":"2016-07-12 16:50:03.000000000","message":"s/NOTE://","commit_id":"07a161b10a365c66c6085896efc8723f2ab17f4e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2044a288449642a6576ba2e2b61d4f252ab77b98","unresolved":false,"context_lines":[{"line_number":4655,"context_line":"                               \u0027mountpoint\u0027: bdm[\u0027mount_device\u0027]},"},{"line_number":4656,"context_line":"                              context\u003dcontext, instance\u003dinstance)"},{"line_number":4657,"context_line":"                self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":4658,"context_line":"        # NOTE: Explicitly update instance\u0027s updated_at field on volume"},{"line_number":4659,"context_line":"        # attach since volume attach does not trigger instance update"},{"line_number":4660,"context_line":"        # automatically."},{"line_number":4661,"context_line":"        self._instance_update(context, instance,"}],"source_content_type":"text/x-python","patch_set":22,"id":"bacf61ea_4b710ea8","line":4658,"range":{"start_line":4658,"start_character":10,"end_line":4658,"end_character":15},"updated":"2016-08-03 15:27:16.000000000","message":"Nit: this seems odd, not sure why its here.","commit_id":"9df5f7cf909e855627852f329f39bb983ad44723"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2044a288449642a6576ba2e2b61d4f252ab77b98","unresolved":false,"context_lines":[{"line_number":4656,"context_line":"                              context\u003dcontext, instance\u003dinstance)"},{"line_number":4657,"context_line":"                self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":4658,"context_line":"        # NOTE: Explicitly update instance\u0027s updated_at field on volume"},{"line_number":4659,"context_line":"        # attach since volume attach does not trigger instance update"},{"line_number":4660,"context_line":"        # automatically."},{"line_number":4661,"context_line":"        self._instance_update(context, instance,"},{"line_number":4662,"context_line":"                              updated_at\u003dtimeutils.utcnow())"},{"line_number":4663,"context_line":"        info \u003d {\u0027volume_id\u0027: bdm.volume_id}"}],"source_content_type":"text/x-python","patch_set":22,"id":"bacf61ea_2be93a1b","line":4660,"range":{"start_line":4659,"start_character":23,"end_line":4660,"end_character":24},"updated":"2016-08-03 15:27:16.000000000","message":"I don\u0027t think it ever would, as not state change has happened, so the instance is not updated.\n\nNow I wish bdm was attached to the instance, but thats a different story.","commit_id":"9df5f7cf909e855627852f329f39bb983ad44723"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6f97febf7d1ffec805fac0578d8f2893230f2f7c","unresolved":false,"context_lines":[{"line_number":9629,"context_line":"        ctxt \u003d self.context"},{"line_number":9630,"context_line":"        mock_elevated_context.return_value \u003d ctxt"},{"line_number":9631,"context_line":""},{"line_number":9632,"context_line":"        self.stubs.Set(self.compute, \u0027_instance_update\u0027, _dummy_update)"},{"line_number":9633,"context_line":"        self.stubs.Set(self.compute, \u0027_notify_about_instance_usage\u0027,"},{"line_number":9634,"context_line":"                                                             _dummy_usage)"},{"line_number":9635,"context_line":"        self.stubs.Set(objects.Instance, \u0027save\u0027, _dummy_usage)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_543efada","line":9632,"updated":"2015-11-26 11:50:44.000000000","message":"Can we simply mock this and assert if it is called?","commit_id":"574cbd422aaa5308d97cdda7246ea22305820c20"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6f97febf7d1ffec805fac0578d8f2893230f2f7c","unresolved":false,"context_lines":[{"line_number":9630,"context_line":"        mock_elevated_context.return_value \u003d ctxt"},{"line_number":9631,"context_line":""},{"line_number":9632,"context_line":"        self.stubs.Set(self.compute, \u0027_instance_update\u0027, _dummy_update)"},{"line_number":9633,"context_line":"        self.stubs.Set(self.compute, \u0027_notify_about_instance_usage\u0027,"},{"line_number":9634,"context_line":"                                                             _dummy_usage)"},{"line_number":9635,"context_line":"        self.stubs.Set(objects.Instance, \u0027save\u0027, _dummy_usage)"},{"line_number":9636,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_d42aea8f","line":9633,"updated":"2015-11-26 11:50:44.000000000","message":"Can we simply mock this?","commit_id":"574cbd422aaa5308d97cdda7246ea22305820c20"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6f97febf7d1ffec805fac0578d8f2893230f2f7c","unresolved":false,"context_lines":[{"line_number":9632,"context_line":"        self.stubs.Set(self.compute, \u0027_instance_update\u0027, _dummy_update)"},{"line_number":9633,"context_line":"        self.stubs.Set(self.compute, \u0027_notify_about_instance_usage\u0027,"},{"line_number":9634,"context_line":"                                                             _dummy_usage)"},{"line_number":9635,"context_line":"        self.stubs.Set(objects.Instance, \u0027save\u0027, _dummy_usage)"},{"line_number":9636,"context_line":""},{"line_number":9637,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":9638,"context_line":"        updates.append(instance[\u0027updated_at\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_f40e0e3a","line":9635,"updated":"2015-11-26 11:50:44.000000000","message":"And this?","commit_id":"574cbd422aaa5308d97cdda7246ea22305820c20"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6f97febf7d1ffec805fac0578d8f2893230f2f7c","unresolved":false,"context_lines":[{"line_number":9750,"context_line":"        fake_bdm.device_name \u003d mp"},{"line_number":9751,"context_line":"        mock_get_by_id.return_value \u003d fake_bdm"},{"line_number":9752,"context_line":""},{"line_number":9753,"context_line":"        self.stubs.Set(self.compute, \u0027_instance_update\u0027, _dummy_update)"},{"line_number":9754,"context_line":"        self.stubs.Set(self.compute.notifier, \u0027info\u0027, _dummy)"},{"line_number":9755,"context_line":"        self.stubs.Set(self.compute, \u0027_notify_about_instance_usage\u0027, _dummy)"},{"line_number":9756,"context_line":"        self.stubs.Set(self.compute.driver, \u0027block_stats\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_8828c687","line":9753,"updated":"2015-11-26 11:50:44.000000000","message":"Similar comment as above. Try to mock this instead of stub","commit_id":"574cbd422aaa5308d97cdda7246ea22305820c20"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"55aad7247ad1f74512709f45eeb98c2ccba32fdc","unresolved":false,"context_lines":[{"line_number":9631,"context_line":"                                           do_check_attach\u003dFalse,"},{"line_number":9632,"context_line":"                                           do_driver_attach\u003dTrue)"},{"line_number":9633,"context_line":"        self.assertThat(mock_update.mock_calls,"},{"line_number":9634,"context_line":"                        testtools_matchers.HasLength(1))"},{"line_number":9635,"context_line":""},{"line_number":9636,"context_line":"    def test_attach_volume_no_device(self):"},{"line_number":9637,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_0a9ffd50","line":9634,"updated":"2015-12-02 08:52:44.000000000","message":"Is it equal to self.assertEqual(1, len(mock_update.mock_calls)) ?\n\nIt might also worth to check that the _instance_update called with the proper updated_at parameter.","commit_id":"49b644899a053ce749d9524cc02f6cc5acbc5e9c"},{"author":{"_account_id":18335,"name":"Pushkar Umaranikar","email":"pushkar.umaranikar@intel.com","username":"pushkarumaranikar"},"change_message_id":"d84ab1a4c5a900ca437c16ce6444e20d8151287f","unresolved":false,"context_lines":[{"line_number":9631,"context_line":"                                           do_check_attach\u003dFalse,"},{"line_number":9632,"context_line":"                                           do_driver_attach\u003dTrue)"},{"line_number":9633,"context_line":"        self.assertThat(mock_update.mock_calls,"},{"line_number":9634,"context_line":"                        testtools_matchers.HasLength(1))"},{"line_number":9635,"context_line":""},{"line_number":9636,"context_line":"    def test_attach_volume_no_device(self):"},{"line_number":9637,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a740942_f85d1eed","line":9634,"in_reply_to":"9a8ffd7b_0a9ffd50","updated":"2015-12-03 16:53:03.000000000","message":"Done","commit_id":"49b644899a053ce749d9524cc02f6cc5acbc5e9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"55aad7247ad1f74512709f45eeb98c2ccba32fdc","unresolved":false,"context_lines":[{"line_number":9739,"context_line":"                                                          instance,"},{"line_number":9740,"context_line":"                                                          fake_bdm)"},{"line_number":9741,"context_line":"            self.assertThat(mock_update.mock_calls,"},{"line_number":9742,"context_line":"                            testtools_matchers.HasLength(1))"},{"line_number":9743,"context_line":""},{"line_number":9744,"context_line":"    def test_detach_invalid_volume(self):"},{"line_number":9745,"context_line":"        # Ensure exception is raised while detaching an un-attached volume"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_caed75b8","line":9742,"updated":"2015-12-02 08:52:44.000000000","message":"Same as above","commit_id":"49b644899a053ce749d9524cc02f6cc5acbc5e9c"},{"author":{"_account_id":18335,"name":"Pushkar Umaranikar","email":"pushkar.umaranikar@intel.com","username":"pushkarumaranikar"},"change_message_id":"d84ab1a4c5a900ca437c16ce6444e20d8151287f","unresolved":false,"context_lines":[{"line_number":9739,"context_line":"                                                          instance,"},{"line_number":9740,"context_line":"                                                          fake_bdm)"},{"line_number":9741,"context_line":"            self.assertThat(mock_update.mock_calls,"},{"line_number":9742,"context_line":"                            testtools_matchers.HasLength(1))"},{"line_number":9743,"context_line":""},{"line_number":9744,"context_line":"    def test_detach_invalid_volume(self):"},{"line_number":9745,"context_line":"        # Ensure exception is raised while detaching an un-attached volume"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a740942_b85796c9","line":9742,"in_reply_to":"9a8ffd7b_caed75b8","updated":"2015-12-03 16:53:03.000000000","message":"Done","commit_id":"49b644899a053ce749d9524cc02f6cc5acbc5e9c"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"13ebfa2a63647ada8c3253fec34ac1c9c2cbb1db","unresolved":false,"context_lines":[{"line_number":9611,"context_line":"    @mock.patch(\u0027nova.context.RequestContext.elevated\u0027)"},{"line_number":9612,"context_line":"    @mock.patch.object(nova.compute.manager.ComputeManager, \u0027_instance_update\u0027)"},{"line_number":9613,"context_line":"    @mock.patch.object(timeutils, \u0027utcnow\u0027,"},{"line_number":9614,"context_line":"            lambda: datetime.datetime(2015, 0o1, 0o1))"},{"line_number":9615,"context_line":"    def test_attach_volume_updates_instance_updated_at(self,"},{"line_number":9616,"context_line":"            mock_update, mock_elevated_context, mock_bdm_attach):"},{"line_number":9617,"context_line":"        # Ensures that instance property \u0027updated_at\u0027 gets modified when volume"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_82733c4d","line":9614,"updated":"2015-12-03 19:43:23.000000000","message":"I think this should just use \u00271\u0027 and not \u00270o1\u0027.","commit_id":"9f91245dee4b6ef53acc97ef3085a548fbcbc4e0"},{"author":{"_account_id":18335,"name":"Pushkar Umaranikar","email":"pushkar.umaranikar@intel.com","username":"pushkarumaranikar"},"change_message_id":"3d047ade22179af221ba7299057287c8f72e59ab","unresolved":false,"context_lines":[{"line_number":9611,"context_line":"    @mock.patch(\u0027nova.context.RequestContext.elevated\u0027)"},{"line_number":9612,"context_line":"    @mock.patch.object(nova.compute.manager.ComputeManager, \u0027_instance_update\u0027)"},{"line_number":9613,"context_line":"    @mock.patch.object(timeutils, \u0027utcnow\u0027,"},{"line_number":9614,"context_line":"            lambda: datetime.datetime(2015, 0o1, 0o1))"},{"line_number":9615,"context_line":"    def test_attach_volume_updates_instance_updated_at(self,"},{"line_number":9616,"context_line":"            mock_update, mock_elevated_context, mock_bdm_attach):"},{"line_number":9617,"context_line":"        # Ensures that instance property \u0027updated_at\u0027 gets modified when volume"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_cf8ed278","line":9614,"in_reply_to":"7a740942_82733c4d","updated":"2015-12-07 20:32:22.000000000","message":"Done","commit_id":"9f91245dee4b6ef53acc97ef3085a548fbcbc4e0"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4bafbf4cd5ef630911233ddbcbec92dc77fd2e1e","unresolved":false,"context_lines":[{"line_number":9414,"context_line":"    @mock.patch(\u0027nova.objects.Instance._load_ec2_ids\u0027)"},{"line_number":9415,"context_line":"    @mock.patch.object(nova.compute.manager.ComputeManager, \u0027_instance_update\u0027)"},{"line_number":9416,"context_line":"    @mock.patch.object(timeutils, \u0027utcnow\u0027,"},{"line_number":9417,"context_line":"            lambda: datetime.datetime(2015, 1, 1))"},{"line_number":9418,"context_line":"    def test_attach_volume_updates_instance_updated_at(self, mock_update,"},{"line_number":9419,"context_line":"            mock_ec2_ids, mock_elevated_context, mock_bdm_attach):"},{"line_number":9420,"context_line":"        # Ensures that instance property \u0027updated_at\u0027 gets modified when volume"}],"source_content_type":"text/x-python","patch_set":21,"id":"bacf61ea_4f56da5c","line":9417,"range":{"start_line":9417,"start_character":12,"end_line":9417,"end_character":49},"updated":"2016-07-31 20:35:55.000000000","message":"I wonder could this be rewritten with return_value attribute instead?","commit_id":"85cac9619693793126274a05b37c0e2691304db4"},{"author":{"_account_id":18335,"name":"Pushkar Umaranikar","email":"pushkar.umaranikar@intel.com","username":"pushkarumaranikar"},"change_message_id":"8318027b64b104080fe393dde0c2ab6ff2646863","unresolved":false,"context_lines":[{"line_number":9414,"context_line":"    @mock.patch(\u0027nova.objects.Instance._load_ec2_ids\u0027)"},{"line_number":9415,"context_line":"    @mock.patch.object(nova.compute.manager.ComputeManager, \u0027_instance_update\u0027)"},{"line_number":9416,"context_line":"    @mock.patch.object(timeutils, \u0027utcnow\u0027,"},{"line_number":9417,"context_line":"            lambda: datetime.datetime(2015, 1, 1))"},{"line_number":9418,"context_line":"    def test_attach_volume_updates_instance_updated_at(self, mock_update,"},{"line_number":9419,"context_line":"            mock_ec2_ids, mock_elevated_context, mock_bdm_attach):"},{"line_number":9420,"context_line":"        # Ensures that instance property \u0027updated_at\u0027 gets modified when volume"}],"source_content_type":"text/x-python","patch_set":21,"id":"bacf61ea_4c188475","line":9417,"range":{"start_line":9417,"start_character":12,"end_line":9417,"end_character":49},"in_reply_to":"bacf61ea_4f56da5c","updated":"2016-08-01 15:10:59.000000000","message":"I think we cannot mock attributes of datetime. Assert will fail in that case because of mismatch. If you have better suggestion, I would request you to reply in detail.","commit_id":"85cac9619693793126274a05b37c0e2691304db4"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4bafbf4cd5ef630911233ddbcbec92dc77fd2e1e","unresolved":false,"context_lines":[{"line_number":9535,"context_line":"    @mock.patch.object(nova.compute.manager.ComputeManager, \u0027_instance_update\u0027)"},{"line_number":9536,"context_line":"    @mock.patch(\u0027nova.objects.block_device.BlockDeviceMapping.destroy\u0027)"},{"line_number":9537,"context_line":"    @mock.patch.object(timeutils, \u0027utcnow\u0027,"},{"line_number":9538,"context_line":"            lambda: datetime.datetime(2015, 1, 1))"},{"line_number":9539,"context_line":"    def test_detach_volume_updates_instance_updated_at(self, mock_destroy,"},{"line_number":9540,"context_line":"            mock_update, mock_driver_detach_volume, mock_ec2_ids,"},{"line_number":9541,"context_line":"            mock_get_by_volume_and_instance):"}],"source_content_type":"text/x-python","patch_set":21,"id":"bacf61ea_8f4c52c9","line":9538,"range":{"start_line":9538,"start_character":12,"end_line":9538,"end_character":49},"updated":"2016-07-31 20:35:55.000000000","message":"same question","commit_id":"85cac9619693793126274a05b37c0e2691304db4"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4bafbf4cd5ef630911233ddbcbec92dc77fd2e1e","unresolved":false,"context_lines":[{"line_number":9536,"context_line":"    @mock.patch(\u0027nova.objects.block_device.BlockDeviceMapping.destroy\u0027)"},{"line_number":9537,"context_line":"    @mock.patch.object(timeutils, \u0027utcnow\u0027,"},{"line_number":9538,"context_line":"            lambda: datetime.datetime(2015, 1, 1))"},{"line_number":9539,"context_line":"    def test_detach_volume_updates_instance_updated_at(self, mock_destroy,"},{"line_number":9540,"context_line":"            mock_update, mock_driver_detach_volume, mock_ec2_ids,"},{"line_number":9541,"context_line":"            mock_get_by_volume_and_instance):"},{"line_number":9542,"context_line":"        # Ensures that instance property \u0027updated_at\u0027 gets modfied when"}],"source_content_type":"text/x-python","patch_set":21,"id":"bacf61ea_6f7c7eb5","line":9539,"range":{"start_line":9539,"start_character":8,"end_line":9539,"end_character":54},"updated":"2016-07-31 20:35:55.000000000","message":"looks like this test is not working. From tox py27:\n2016-07-28 21:31:50.162596 |       File \"nova/compute/manager.py\", line 4745, in _detach_volume\n2016-07-28 21:31:50.162625 |         connection_info \u003d jsonutils.loads(bdm.connection_info)\nso you need to init connection_info field for bdm either","commit_id":"85cac9619693793126274a05b37c0e2691304db4"},{"author":{"_account_id":18335,"name":"Pushkar Umaranikar","email":"pushkar.umaranikar@intel.com","username":"pushkarumaranikar"},"change_message_id":"872f767b155a1ebd57f4c7cbce745f390ca5c30a","unresolved":false,"context_lines":[{"line_number":9536,"context_line":"    @mock.patch(\u0027nova.objects.block_device.BlockDeviceMapping.destroy\u0027)"},{"line_number":9537,"context_line":"    @mock.patch.object(timeutils, \u0027utcnow\u0027,"},{"line_number":9538,"context_line":"            lambda: datetime.datetime(2015, 1, 1))"},{"line_number":9539,"context_line":"    def test_detach_volume_updates_instance_updated_at(self, mock_destroy,"},{"line_number":9540,"context_line":"            mock_update, mock_driver_detach_volume, mock_ec2_ids,"},{"line_number":9541,"context_line":"            mock_get_by_volume_and_instance):"},{"line_number":9542,"context_line":"        # Ensures that instance property \u0027updated_at\u0027 gets modfied when"}],"source_content_type":"text/x-python","patch_set":21,"id":"bacf61ea_0c396cd7","line":9539,"range":{"start_line":9539,"start_character":8,"end_line":9539,"end_character":54},"in_reply_to":"bacf61ea_6f7c7eb5","updated":"2016-08-01 15:11:35.000000000","message":"Thanks. done.","commit_id":"85cac9619693793126274a05b37c0e2691304db4"}],"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":"6f97febf7d1ffec805fac0578d8f2893230f2f7c","unresolved":false,"context_lines":[{"line_number":2190,"context_line":"        bdm.device_name \u003d \u0027vdb\u0027"},{"line_number":2191,"context_line":"        bdm_get.return_value \u003d bdm"},{"line_number":2192,"context_line":""},{"line_number":2193,"context_line":"        self.stubs.Set(objects.Instance, \u0027save\u0027, _dummy)"},{"line_number":2194,"context_line":"        self.stubs.Set(self.compute, \u0027_instance_update\u0027, _dummy)"},{"line_number":2195,"context_line":""},{"line_number":2196,"context_line":"        with mock.patch.object(self.compute, \u0027volume_api\u0027) as volume_api:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_0844d647","line":2193,"updated":"2015-11-26 11:50:44.000000000","message":"I think a simple mock would be nicer","commit_id":"574cbd422aaa5308d97cdda7246ea22305820c20"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"0c387f3613530504c9ecd5ed7307716abc78f047","unresolved":false,"context_lines":[{"line_number":2190,"context_line":"        bdm.device_name \u003d \u0027vdb\u0027"},{"line_number":2191,"context_line":"        bdm_get.return_value \u003d bdm"},{"line_number":2192,"context_line":""},{"line_number":2193,"context_line":"        self.stubs.Set(objects.Instance, \u0027save\u0027, _dummy)"},{"line_number":2194,"context_line":"        self.stubs.Set(self.compute, \u0027_instance_update\u0027, _dummy)"},{"line_number":2195,"context_line":""},{"line_number":2196,"context_line":"        with mock.patch.object(self.compute, \u0027volume_api\u0027) as volume_api:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_8bb88576","line":2193,"in_reply_to":"9a8ffd7b_0844d647","updated":"2015-11-27 14:39:54.000000000","message":"So yes you should to mock and assert calls","commit_id":"574cbd422aaa5308d97cdda7246ea22305820c20"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"84ebdbad4397f25e87170ab5f9f01817ea87ae4e","unresolved":false,"context_lines":[{"line_number":2430,"context_line":"        local_connector \u003d {\u0027host\u0027: \u0027local-connector-host\u0027}"},{"line_number":2431,"context_line":"        expected_connector \u003d local_connector if not expected else expected"},{"line_number":2432,"context_line":""},{"line_number":2433,"context_line":"        with mock.patch("},{"line_number":2434,"context_line":"            \u0027nova.compute.manager.ComputeManager._instance_update\u0027):"},{"line_number":2435,"context_line":"            with mock.patch.object(self.compute,"},{"line_number":2436,"context_line":"                                   \u0027volume_api\u0027) as volume_api:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_04d4b11d","line":2433,"updated":"2016-07-12 16:50:03.000000000","message":"Instead of stack all of this context you can use \n\n  with test.nested(..):\n\nBut I guess you are following what is already done.","commit_id":"07a161b10a365c66c6085896efc8723f2ab17f4e"}]}
