)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b962e24f2802f18f2d09e9a642d7bee2513289bb","unresolved":true,"context_lines":[{"line_number":9,"context_line":"When attaching volumes to instances Nova has previously relied on checks"},{"line_number":10,"context_line":"carried out by c-api to ensure that a single non-multiattach volume is"},{"line_number":11,"context_line":"not attached to multiple instances at once. While this works well in"},{"line_number":12,"context_line":"most cases it does not handle PEBKAC issues when admins reset the state"},{"line_number":13,"context_line":"of a volume to available, allowing users to request that Nova attach the"},{"line_number":14,"context_line":"volume to another instance."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dbdf50d3_e8fc4447","line":12,"range":{"start_line":12,"start_character":30,"end_line":12,"end_character":36},"updated":"2021-02-04 22:21:53.000000000","message":"hehehe","commit_id":"1252588d4e48da1d3a753639a8a4d937acf3e037"}],"nova/compute/api.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6da2bb630634f39d947c9450003472657299f4e0","unresolved":true,"context_lines":[{"line_number":4609,"context_line":"        except exception.VolumeBDMNotFound:"},{"line_number":4610,"context_line":"            pass"},{"line_number":4611,"context_line":""},{"line_number":4612,"context_line":"    def _check_volume_already_attached(self, context, volume_id):"},{"line_number":4613,"context_line":"        \"\"\"Avoid allowing a non-multiattach volumes being attached twice"},{"line_number":4614,"context_line":""},{"line_number":4615,"context_line":"        Unlike the above _check_volume_already_attached_to_instance check we"}],"source_content_type":"text/x-python","patch_set":2,"id":"2a925441_86edb829","line":4612,"range":{"start_line":4612,"start_character":39,"end_line":4612,"end_character":63},"updated":"2021-01-27 14:56:10.000000000","message":"nit: type hints would be wonderful, seeing as we\u0027re adding new code 😉\n\n  def _check_volume_already_attached(\n      context: nova_context.RequestContext, volume_id: str,\n  ):\n\nought to do the trick","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"6dedaf224e5855b84d985129c9cd5daa983dc1a5","unresolved":false,"context_lines":[{"line_number":4609,"context_line":"        except exception.VolumeBDMNotFound:"},{"line_number":4610,"context_line":"            pass"},{"line_number":4611,"context_line":""},{"line_number":4612,"context_line":"    def _check_volume_already_attached(self, context, volume_id):"},{"line_number":4613,"context_line":"        \"\"\"Avoid allowing a non-multiattach volumes being attached twice"},{"line_number":4614,"context_line":""},{"line_number":4615,"context_line":"        Unlike the above _check_volume_already_attached_to_instance check we"}],"source_content_type":"text/x-python","patch_set":2,"id":"4bb6b13e_39279e4e","line":4612,"range":{"start_line":4612,"start_character":39,"end_line":4612,"end_character":63},"in_reply_to":"2a925441_86edb829","updated":"2021-01-27 15:40:21.000000000","message":"Done","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6da2bb630634f39d947c9450003472657299f4e0","unresolved":true,"context_lines":[{"line_number":4773,"context_line":"        # NOTE(lyarwood): Ensure that non multiattach volumes don\u0027t already"},{"line_number":4774,"context_line":"        # have active block device mappings present in Nova."},{"line_number":4775,"context_line":"        if not volume.get(\u0027multiattach\u0027, False):"},{"line_number":4776,"context_line":"            self._check_volume_already_attached(context, volume_id)"},{"line_number":4777,"context_line":""},{"line_number":4778,"context_line":"        is_shelved_offloaded \u003d instance.vm_state \u003d\u003d vm_states.SHELVED_OFFLOADED"},{"line_number":4779,"context_line":"        if is_shelved_offloaded:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1044e5e1_0fa92daf","line":4776,"updated":"2021-01-27 14:56:10.000000000","message":"There\u0027s a potential TOCTOU issue here since we don\u0027t have a lock on this volume, but I guess you\u0027d want to be *very* unlucky for that to happen.","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"6dedaf224e5855b84d985129c9cd5daa983dc1a5","unresolved":false,"context_lines":[{"line_number":4773,"context_line":"        # NOTE(lyarwood): Ensure that non multiattach volumes don\u0027t already"},{"line_number":4774,"context_line":"        # have active block device mappings present in Nova."},{"line_number":4775,"context_line":"        if not volume.get(\u0027multiattach\u0027, False):"},{"line_number":4776,"context_line":"            self._check_volume_already_attached(context, volume_id)"},{"line_number":4777,"context_line":""},{"line_number":4778,"context_line":"        is_shelved_offloaded \u003d instance.vm_state \u003d\u003d vm_states.SHELVED_OFFLOADED"},{"line_number":4779,"context_line":"        if is_shelved_offloaded:"}],"source_content_type":"text/x-python","patch_set":2,"id":"066a56b6_c3313664","line":4776,"in_reply_to":"1044e5e1_0fa92daf","updated":"2021-01-27 15:40:21.000000000","message":"Yeah there\u0027s no lock we could take anyway as bdm creation happens on the remote compute. As I\u0027ve said in the commit there are additional checks after this in the c-api side that should catch this *if* we race with a compute, this is just for the standard case where a single request is made.","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2b5f326b68e61aab74d6c2789e4313231d60f52","unresolved":true,"context_lines":[{"line_number":4635,"context_line":"        a check within Nova before creating a new BDM for the attachment."},{"line_number":4636,"context_line":"        \"\"\""},{"line_number":4637,"context_line":"        try:"},{"line_number":4638,"context_line":"            bdm \u003d objects.BlockDeviceMapping.get_by_volume("},{"line_number":4639,"context_line":"                context, volume_id)"},{"line_number":4640,"context_line":"            msg \u003d _(\"volume %(volume_id)s is already attached to instance \""},{"line_number":4641,"context_line":"                    \"%(instance_uuid)s\") % {\u0027volume_id\u0027: volume_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a939333_8c648d27","line":4638,"updated":"2021-01-29 08:26:01.000000000","message":"In which cell we are searching for this volume? As far as I see it is not doing a scatter-gather in all cells. So I guess this only search for the cell the instance is currently located. Is it possible the first attachment was made in another cell?","commit_id":"bc9e70697d81c997fb251f90e2f26376bc8fce98"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"efe821057fdb9ce53c0916bcc81aac20f40cd9e1","unresolved":true,"context_lines":[{"line_number":4635,"context_line":"        a check within Nova before creating a new BDM for the attachment."},{"line_number":4636,"context_line":"        \"\"\""},{"line_number":4637,"context_line":"        try:"},{"line_number":4638,"context_line":"            bdm \u003d objects.BlockDeviceMapping.get_by_volume("},{"line_number":4639,"context_line":"                context, volume_id)"},{"line_number":4640,"context_line":"            msg \u003d _(\"volume %(volume_id)s is already attached to instance \""},{"line_number":4641,"context_line":"                    \"%(instance_uuid)s\") % {\u0027volume_id\u0027: volume_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9b2639ad_0a71819a","line":4638,"in_reply_to":"1a939333_8c648d27","updated":"2021-02-01 10:25:36.000000000","message":"There\u0027s a possibility yes but I would assume that the associated block_device_mapping record also comes with the instance if it ever moves between cells?","commit_id":"bc9e70697d81c997fb251f90e2f26376bc8fce98"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5e681323ac94a097b81006ed6b5f31daa6204259","unresolved":true,"context_lines":[{"line_number":4780,"context_line":"        # _check_attach_and_reserve_volume and Cinder will allow multiple"},{"line_number":4781,"context_line":"        # attachments between the same volume and instance but the old flow"},{"line_number":4782,"context_line":"        # API semantics don\u0027t allow that so we enforce it here."},{"line_number":4783,"context_line":"        self._check_volume_already_attached_to_instance(context,"},{"line_number":4784,"context_line":"                                                        instance,"},{"line_number":4785,"context_line":"                                                        volume_id)"},{"line_number":4786,"context_line":"        volume \u003d self.volume_api.get(context, volume_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"2315d4eb_bce55057","line":4783,"updated":"2021-01-29 18:56:39.000000000","message":"Could we not merge the new check into this method, and save the extra BDM DB lookup?","commit_id":"bc9e70697d81c997fb251f90e2f26376bc8fce98"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"efe821057fdb9ce53c0916bcc81aac20f40cd9e1","unresolved":true,"context_lines":[{"line_number":4780,"context_line":"        # _check_attach_and_reserve_volume and Cinder will allow multiple"},{"line_number":4781,"context_line":"        # attachments between the same volume and instance but the old flow"},{"line_number":4782,"context_line":"        # API semantics don\u0027t allow that so we enforce it here."},{"line_number":4783,"context_line":"        self._check_volume_already_attached_to_instance(context,"},{"line_number":4784,"context_line":"                                                        instance,"},{"line_number":4785,"context_line":"                                                        volume_id)"},{"line_number":4786,"context_line":"        volume \u003d self.volume_api.get(context, volume_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"d193fce0_48aa2b14","line":4783,"in_reply_to":"2315d4eb_bce55057","updated":"2021-02-01 10:25:36.000000000","message":"tl;dr I\u0027ve looked into this and I can\u0027t see a way to do this in a single BDM lookup without some BlockDeviceMappingList changes that would leave this unbackportable. I\u0027ll add a TODO and fup change for master.\n\nI can\u0027t replace the get_by_volume_and_instance lookup in _check_volume_already_attached_to_instance with a single get_by_volume lookup as it raises VolumeBDMIsMultiAttach when more than one record is found:\n\nhttps://github.com/openstack/nova/blob/0c53f4bde8c97fa0d3e43aba5e9745ce0d50df4a/nova/objects/block_device.py#L286-L297\n\nBlockDeviceMappingList unfortunately doesn\u0027t provide a get_by_volume lookup that would give a list I could iterate over and check for any attachments to the provided instance uuid.","commit_id":"bc9e70697d81c997fb251f90e2f26376bc8fce98"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"492fe61bde2df5756f0252303b75a5f6f6fc7a24","unresolved":true,"context_lines":[{"line_number":4780,"context_line":"        # _check_attach_and_reserve_volume and Cinder will allow multiple"},{"line_number":4781,"context_line":"        # attachments between the same volume and instance but the old flow"},{"line_number":4782,"context_line":"        # API semantics don\u0027t allow that so we enforce it here."},{"line_number":4783,"context_line":"        self._check_volume_already_attached_to_instance(context,"},{"line_number":4784,"context_line":"                                                        instance,"},{"line_number":4785,"context_line":"                                                        volume_id)"},{"line_number":4786,"context_line":"        volume \u003d self.volume_api.get(context, volume_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"56e7c176_c1a70f9b","line":4783,"in_reply_to":"d193fce0_48aa2b14","updated":"2021-02-01 14:45:37.000000000","message":"\u003e I can\u0027t replace the get_by_volume_and_instance lookup in _check_volume_already_attached_to_instance with a single get_by_volume lookup as it raises VolumeBDMIsMultiAttach when more than one record is found:\n\u003e \n\u003e https://github.com/openstack/nova/blob/0c53f4bde8c97fa0d3e43aba5e9745ce0d50df4a/nova/objects/block_device.py#L286-L297\n\u003e \n\u003e BlockDeviceMappingList unfortunately doesn\u0027t provide a get_by_volume lookup that would give a list I could iterate over and check for any attachments to the provided instance uuid.\n\nAh, right - in my head this was something we could have done. OK, let\u0027s keep this as is for backportability, and make it more efficient on master.","commit_id":"bc9e70697d81c997fb251f90e2f26376bc8fce98"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"492fe61bde2df5756f0252303b75a5f6f6fc7a24","unresolved":true,"context_lines":[{"line_number":4787,"context_line":""},{"line_number":4788,"context_line":"        # NOTE(lyarwood): Ensure that non multiattach volumes don\u0027t already"},{"line_number":4789,"context_line":"        # have active block device mappings present in Nova."},{"line_number":4790,"context_line":"        # TODO(lyarwood): Merge this into the"},{"line_number":4791,"context_line":"        # _check_volume_already_attached_to_instance check once"},{"line_number":4792,"context_line":"        # BlockDeviceMappingList provides a list of active bdms per volume so"},{"line_number":4793,"context_line":"        # we can preform a single lookup for both checks."}],"source_content_type":"text/x-python","patch_set":4,"id":"f2a789b4_f83cdb36","line":4790,"updated":"2021-02-01 14:45:37.000000000","message":"Thanks!","commit_id":"429f202a64a54ddf89d5cd41b93f9a6328c089da"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b962e24f2802f18f2d09e9a642d7bee2513289bb","unresolved":true,"context_lines":[{"line_number":4625,"context_line":"    def _check_volume_already_attached("},{"line_number":4626,"context_line":"        self, context: nova_context.RequestContext, volume_id: str"},{"line_number":4627,"context_line":"    ):"},{"line_number":4628,"context_line":"        \"\"\"Avoid allowing a non-multiattach volumes being attached twice"},{"line_number":4629,"context_line":""},{"line_number":4630,"context_line":"        Unlike the above _check_volume_already_attached_to_instance check we"},{"line_number":4631,"context_line":"        also need to ensure that non-multiattached volumes are not attached to"}],"source_content_type":"text/x-python","patch_set":6,"id":"8625e152_78cc30c5","line":4628,"range":{"start_line":4628,"start_character":44,"end_line":4628,"end_character":51},"updated":"2021-02-04 22:21:53.000000000","message":"volume? or remove \"a\"?","commit_id":"1252588d4e48da1d3a753639a8a4d937acf3e037"}],"nova/tests/unit/compute/test_api.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6da2bb630634f39d947c9450003472657299f4e0","unresolved":true,"context_lines":[{"line_number":445,"context_line":"    @mock.patch.object(objects.BlockDeviceMapping,"},{"line_number":446,"context_line":"                       \u0027get_by_volume_and_instance\u0027)"},{"line_number":447,"context_line":"    @mock.patch.object(objects.BlockDeviceMapping,"},{"line_number":448,"context_line":"                       \u0027get_by_volume\u0027)"},{"line_number":449,"context_line":"    @mock.patch.object(compute_rpcapi.ComputeAPI, \u0027attach_volume\u0027)"},{"line_number":450,"context_line":"    def test_attach_volume_new_flow("},{"line_number":451,"context_line":"            self, mock_attach, mock_get_by_volume, mock_get_by_instance,"}],"source_content_type":"text/x-python","patch_set":2,"id":"a612cc76_86e9b892","line":448,"updated":"2021-01-27 14:56:10.000000000","message":"nit: one line?","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"6dedaf224e5855b84d985129c9cd5daa983dc1a5","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    @mock.patch.object(objects.BlockDeviceMapping,"},{"line_number":446,"context_line":"                       \u0027get_by_volume_and_instance\u0027)"},{"line_number":447,"context_line":"    @mock.patch.object(objects.BlockDeviceMapping,"},{"line_number":448,"context_line":"                       \u0027get_by_volume\u0027)"},{"line_number":449,"context_line":"    @mock.patch.object(compute_rpcapi.ComputeAPI, \u0027attach_volume\u0027)"},{"line_number":450,"context_line":"    def test_attach_volume_new_flow("},{"line_number":451,"context_line":"            self, mock_attach, mock_get_by_volume, mock_get_by_instance,"}],"source_content_type":"text/x-python","patch_set":2,"id":"68f77518_e5b7211e","line":448,"in_reply_to":"a612cc76_86e9b892","updated":"2021-01-27 15:40:21.000000000","message":"Done","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6da2bb630634f39d947c9450003472657299f4e0","unresolved":true,"context_lines":[{"line_number":449,"context_line":"    @mock.patch.object(compute_rpcapi.ComputeAPI, \u0027attach_volume\u0027)"},{"line_number":450,"context_line":"    def test_attach_volume_new_flow("},{"line_number":451,"context_line":"            self, mock_attach, mock_get_by_volume, mock_get_by_instance,"},{"line_number":452,"context_line":"            mock_reserve, mock_record):"},{"line_number":453,"context_line":"        mock_get_by_instance.side_effect \u003d exception.VolumeBDMNotFound("},{"line_number":454,"context_line":"            volume_id\u003d\u0027fake-volume-id\u0027)"},{"line_number":455,"context_line":"        mock_get_by_volume.side_effect \u003d exception.VolumeBDMNotFound("}],"source_content_type":"text/x-python","patch_set":2,"id":"0c45e099_d3f8352b","line":452,"updated":"2021-01-27 14:56:10.000000000","message":"nit:\n\n  def test_attach_volume_new_flow(\n      self, mock_attach, mock_get_by_volume, mock_get_by_instance,\n      mock_reserve, mock_record,\n  ):","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"6dedaf224e5855b84d985129c9cd5daa983dc1a5","unresolved":false,"context_lines":[{"line_number":449,"context_line":"    @mock.patch.object(compute_rpcapi.ComputeAPI, \u0027attach_volume\u0027)"},{"line_number":450,"context_line":"    def test_attach_volume_new_flow("},{"line_number":451,"context_line":"            self, mock_attach, mock_get_by_volume, mock_get_by_instance,"},{"line_number":452,"context_line":"            mock_reserve, mock_record):"},{"line_number":453,"context_line":"        mock_get_by_instance.side_effect \u003d exception.VolumeBDMNotFound("},{"line_number":454,"context_line":"            volume_id\u003d\u0027fake-volume-id\u0027)"},{"line_number":455,"context_line":"        mock_get_by_volume.side_effect \u003d exception.VolumeBDMNotFound("}],"source_content_type":"text/x-python","patch_set":2,"id":"f1d73f68_d6de109b","line":452,"in_reply_to":"0c45e099_d3f8352b","updated":"2021-01-27 15:40:21.000000000","message":"Done","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6da2bb630634f39d947c9450003472657299f4e0","unresolved":true,"context_lines":[{"line_number":487,"context_line":"    @mock.patch.object(compute_rpcapi.ComputeAPI, \u0027attach_volume\u0027)"},{"line_number":488,"context_line":"    def test_tagged_volume_attach_new_flow("},{"line_number":489,"context_line":"            self, mock_attach, mock_get_by_volume, mock_get_by_instance,"},{"line_number":490,"context_line":"            mock_reserve, mock_record):"},{"line_number":491,"context_line":"        mock_get_by_instance.side_effect \u003d exception.VolumeBDMNotFound("},{"line_number":492,"context_line":"            volume_id\u003d\u0027fake-volume-id\u0027)"},{"line_number":493,"context_line":"        mock_get_by_volume.side_effect \u003d exception.VolumeBDMNotFound("}],"source_content_type":"text/x-python","patch_set":2,"id":"79ad2512_3570f998","line":490,"updated":"2021-01-27 14:56:10.000000000","message":"ditto (both)","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6da2bb630634f39d947c9450003472657299f4e0","unresolved":true,"context_lines":[{"line_number":528,"context_line":"    @mock.patch.object(compute_rpcapi.ComputeAPI, \u0027attach_volume\u0027)"},{"line_number":529,"context_line":"    def test_attach_volume_attachment_create_fails("},{"line_number":530,"context_line":"            self, mock_attach, mock_get_by_volume, mock_get_by_instance,"},{"line_number":531,"context_line":"            mock_reserve):"},{"line_number":532,"context_line":"        mock_get_by_instance.side_effect \u003d exception.VolumeBDMNotFound("},{"line_number":533,"context_line":"            volume_id\u003d\u0027fake-volume-id\u0027)"},{"line_number":534,"context_line":"        mock_get_by_volume.side_effect \u003d exception.VolumeBDMNotFound("}],"source_content_type":"text/x-python","patch_set":2,"id":"4390555e_3ff10d7e","line":531,"updated":"2021-01-27 14:56:10.000000000","message":"ditto (both)","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"6dedaf224e5855b84d985129c9cd5daa983dc1a5","unresolved":false,"context_lines":[{"line_number":528,"context_line":"    @mock.patch.object(compute_rpcapi.ComputeAPI, \u0027attach_volume\u0027)"},{"line_number":529,"context_line":"    def test_attach_volume_attachment_create_fails("},{"line_number":530,"context_line":"            self, mock_attach, mock_get_by_volume, mock_get_by_instance,"},{"line_number":531,"context_line":"            mock_reserve):"},{"line_number":532,"context_line":"        mock_get_by_instance.side_effect \u003d exception.VolumeBDMNotFound("},{"line_number":533,"context_line":"            volume_id\u003d\u0027fake-volume-id\u0027)"},{"line_number":534,"context_line":"        mock_get_by_volume.side_effect \u003d exception.VolumeBDMNotFound("}],"source_content_type":"text/x-python","patch_set":2,"id":"a7624e0a_33e42aa7","line":531,"in_reply_to":"4390555e_3ff10d7e","updated":"2021-01-27 15:40:21.000000000","message":"Done","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6da2bb630634f39d947c9450003472657299f4e0","unresolved":true,"context_lines":[{"line_number":559,"context_line":"    @mock.patch.object(objects.BlockDeviceMapping,"},{"line_number":560,"context_line":"                       \u0027get_by_volume\u0027)"},{"line_number":561,"context_line":"    @mock.patch.object(objects.BlockDeviceMapping,"},{"line_number":562,"context_line":"                       \u0027get_by_volume_and_instance\u0027)"},{"line_number":563,"context_line":"    def test_attach_volume_bdm_exists(self, mock_by_instance, mock_by_volume):"},{"line_number":564,"context_line":"        mock_by_instance.side_effect \u003d exception.VolumeBDMNotFound("},{"line_number":565,"context_line":"            volume_id\u003duuids.volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8f3a3242_d887e5f3","line":562,"updated":"2021-01-27 14:56:10.000000000","message":"nit:\n\n    @mock.patch.object(objects.BlockDeviceMapping, \u0027get_by_volume\u0027)\n    @mock.patch.object(\n        objects.BlockDeviceMapping, \u0027get_by_volume_and_instance\u0027)\n\n?","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"6dedaf224e5855b84d985129c9cd5daa983dc1a5","unresolved":false,"context_lines":[{"line_number":559,"context_line":"    @mock.patch.object(objects.BlockDeviceMapping,"},{"line_number":560,"context_line":"                       \u0027get_by_volume\u0027)"},{"line_number":561,"context_line":"    @mock.patch.object(objects.BlockDeviceMapping,"},{"line_number":562,"context_line":"                       \u0027get_by_volume_and_instance\u0027)"},{"line_number":563,"context_line":"    def test_attach_volume_bdm_exists(self, mock_by_instance, mock_by_volume):"},{"line_number":564,"context_line":"        mock_by_instance.side_effect \u003d exception.VolumeBDMNotFound("},{"line_number":565,"context_line":"            volume_id\u003duuids.volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c54d9378_5a2b7433","line":562,"in_reply_to":"8f3a3242_d887e5f3","updated":"2021-01-27 15:40:21.000000000","message":"Done","commit_id":"9f1f7d6700e267df5611802880f4ac19cace96b5"}]}
