)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow multiple volume attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch provides changes to Nova that are needed to support Cinder\u0027s"},{"line_number":10,"context_line":"multi attach capability.  Cinder volumes now have a multiattach flag that"},{"line_number":11,"context_line":"is created at volume creation time. We now pass an attachment uuid at"},{"line_number":12,"context_line":"detach time to tell cinder which instance we are asking it to detach the"},{"line_number":13,"context_line":"volume."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"fa32b979_355eb444","line":10,"updated":"2015-06-17 10:44:02.000000000","message":"multi attach \u003d\u003e multi-attach","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow multiple volume attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch provides changes to Nova that are needed to support Cinder\u0027s"},{"line_number":10,"context_line":"multi attach capability.  Cinder volumes now have a multiattach flag that"},{"line_number":11,"context_line":"is created at volume creation time. We now pass an attachment uuid at"},{"line_number":12,"context_line":"detach time to tell cinder which instance we are asking it to detach the"},{"line_number":13,"context_line":"volume."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"fa32b979_15285099","line":10,"range":{"start_line":10,"start_character":52,"end_line":10,"end_character":63},"updated":"2015-06-17 10:44:02.000000000","message":"multiattach \u003d\u003e multi-attach","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow multiple volume attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch provides changes to Nova that are needed to support Cinder\u0027s"},{"line_number":10,"context_line":"multi attach capability.  Cinder volumes now have a multiattach flag that"},{"line_number":11,"context_line":"is created at volume creation time. We now pass an attachment uuid at"},{"line_number":12,"context_line":"detach time to tell cinder which instance we are asking it to detach the"},{"line_number":13,"context_line":"volume."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"fa32b979_4076df70","line":10,"range":{"start_line":10,"start_character":52,"end_line":10,"end_character":63},"in_reply_to":"fa32b979_15285099","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow multiple volume attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch provides changes to Nova that are needed to support Cinder\u0027s"},{"line_number":10,"context_line":"multi attach capability.  Cinder volumes now have a multiattach flag that"},{"line_number":11,"context_line":"is created at volume creation time. We now pass an attachment uuid at"},{"line_number":12,"context_line":"detach time to tell cinder which instance we are asking it to detach the"},{"line_number":13,"context_line":"volume."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"fa32b979_6071a375","line":10,"in_reply_to":"fa32b979_355eb444","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"}],"nova/compute/api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":1757,"context_line":"                                                         connector)"},{"line_number":1758,"context_line":"                    volume \u003d self.volume_api.get(bdm.volume_id)"},{"line_number":1759,"context_line":"                    attachment \u003d self.volume_api.get_volume_attachment("},{"line_number":1760,"context_line":"                        volume, instance[\u0027uuid\u0027])"},{"line_number":1761,"context_line":"                    self.volume_api.detach(elevated, bdm.volume_id,"},{"line_number":1762,"context_line":"                                           attachment[\u0027id\u0027])"},{"line_number":1763,"context_line":"                    if bdm.delete_on_termination:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_47162b4d","line":1760,"updated":"2015-06-17 10:44:02.000000000","message":"instance should be an object here. please use instance.uuid","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":1757,"context_line":"                                                         connector)"},{"line_number":1758,"context_line":"                    volume \u003d self.volume_api.get(bdm.volume_id)"},{"line_number":1759,"context_line":"                    attachment \u003d self.volume_api.get_volume_attachment("},{"line_number":1760,"context_line":"                        volume, instance[\u0027uuid\u0027])"},{"line_number":1761,"context_line":"                    self.volume_api.detach(elevated, bdm.volume_id,"},{"line_number":1762,"context_line":"                                           attachment[\u0027id\u0027])"},{"line_number":1763,"context_line":"                    if bdm.delete_on_termination:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_a0dfab38","line":1760,"in_reply_to":"fa32b979_47162b4d","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":3069,"context_line":"        # so just check the attachment specific to this instance"},{"line_number":3070,"context_line":"        if volume[\u0027attachments\u0027]:"},{"line_number":3071,"context_line":"            for attachment in volume[\u0027attachments\u0027]:"},{"line_number":3072,"context_line":"                if attachment[\u0027instance_uuid\u0027] \u003d\u003d instance[\u0027uuid\u0027]:"},{"line_number":3073,"context_line":"                    break"},{"line_number":3074,"context_line":"            else:"},{"line_number":3075,"context_line":"                raise exception.VolumeUnattached(volume_id\u003dvolume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_2747674c","line":3072,"updated":"2015-06-17 10:44:02.000000000","message":"ditto","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":3069,"context_line":"        # so just check the attachment specific to this instance"},{"line_number":3070,"context_line":"        if volume[\u0027attachments\u0027]:"},{"line_number":3071,"context_line":"            for attachment in volume[\u0027attachments\u0027]:"},{"line_number":3072,"context_line":"                if attachment[\u0027instance_uuid\u0027] \u003d\u003d instance[\u0027uuid\u0027]:"},{"line_number":3073,"context_line":"                    break"},{"line_number":3074,"context_line":"            else:"},{"line_number":3075,"context_line":"                raise exception.VolumeUnattached(volume_id\u003dvolume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_a0b6cbf6","line":3072,"in_reply_to":"fa32b979_2747674c","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"}],"nova/compute/manager.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":2667,"context_line":"                for bdm in bdms:"},{"line_number":2668,"context_line":"                    if bdm.is_volume:"},{"line_number":2669,"context_line":"                        self.detach_volume(context, bdm.volume_id, instance)"},{"line_number":2670,"context_line":""},{"line_number":2671,"context_line":"            files \u003d self._decode_files(injected_files)"},{"line_number":2672,"context_line":""},{"line_number":2673,"context_line":"            kwargs \u003d dict("}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_e765ffb4","side":"PARENT","line":2670,"updated":"2015-06-17 10:44:02.000000000","message":"no need to delete this line - but up to you","commit_id":"f60eb56f0ac1ab007cfbda65008b7222d382831f"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":2667,"context_line":"                for bdm in bdms:"},{"line_number":2668,"context_line":"                    if bdm.is_volume:"},{"line_number":2669,"context_line":"                        self.detach_volume(context, bdm.volume_id, instance)"},{"line_number":2670,"context_line":""},{"line_number":2671,"context_line":"            files \u003d self._decode_files(injected_files)"},{"line_number":2672,"context_line":""},{"line_number":2673,"context_line":"            kwargs \u003d dict("}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_4c688ab9","side":"PARENT","line":2670,"in_reply_to":"fa32b979_e765ffb4","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"f60eb56f0ac1ab007cfbda65008b7222d382831f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":4479,"context_line":"        \"\"\"Detach a volume from an instance.\"\"\""},{"line_number":4480,"context_line":"        bdm \u003d objects.BlockDeviceMapping.\\"},{"line_number":4481,"context_line":"                get_by_instance_and_volume_id(context, volume_id,"},{"line_number":4482,"context_line":"                                              instance[\u0027uuid\u0027])"},{"line_number":4483,"context_line":"        if CONF.volume_usage_poll_interval \u003e 0:"},{"line_number":4484,"context_line":"            vol_stats \u003d []"},{"line_number":4485,"context_line":"            mp \u003d bdm.device_name"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_a75b77f5","line":4482,"updated":"2015-06-17 10:44:02.000000000","message":"please use instance.uuid","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":4479,"context_line":"        \"\"\"Detach a volume from an instance.\"\"\""},{"line_number":4480,"context_line":"        bdm \u003d objects.BlockDeviceMapping.\\"},{"line_number":4481,"context_line":"                get_by_instance_and_volume_id(context, volume_id,"},{"line_number":4482,"context_line":"                                              instance[\u0027uuid\u0027])"},{"line_number":4483,"context_line":"        if CONF.volume_usage_poll_interval \u003e 0:"},{"line_number":4484,"context_line":"            vol_stats \u003d []"},{"line_number":4485,"context_line":"            mp \u003d bdm.device_name"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_00ad3787","line":4482,"in_reply_to":"fa32b979_a75b77f5","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":4506,"context_line":"        volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":4507,"context_line":"        self.volume_api.terminate_connection(context, volume_id, connector)"},{"line_number":4508,"context_line":"        attachment \u003d self.volume_api.get_volume_attachment(volume,"},{"line_number":4509,"context_line":"                                                           instance[\u0027uuid\u0027])"},{"line_number":4510,"context_line":"        bdm.destroy()"},{"line_number":4511,"context_line":"        info \u003d dict(volume_id\u003dvolume_id)"},{"line_number":4512,"context_line":"        self._notify_about_instance_usage("}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_a7129707","line":4509,"updated":"2015-06-17 10:44:02.000000000","message":"ditto","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":4506,"context_line":"        volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":4507,"context_line":"        self.volume_api.terminate_connection(context, volume_id, connector)"},{"line_number":4508,"context_line":"        attachment \u003d self.volume_api.get_volume_attachment(volume,"},{"line_number":4509,"context_line":"                                                           instance[\u0027uuid\u0027])"},{"line_number":4510,"context_line":"        bdm.destroy()"},{"line_number":4511,"context_line":"        info \u003d dict(volume_id\u003dvolume_id)"},{"line_number":4512,"context_line":"        self._notify_about_instance_usage("}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_40cedf63","line":4509,"in_reply_to":"fa32b979_a7129707","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":4600,"context_line":""},{"line_number":4601,"context_line":"        bdm \u003d objects.BlockDeviceMapping.get_by_instance_and_volume_id("},{"line_number":4602,"context_line":"                                                context, old_volume_id,"},{"line_number":4603,"context_line":"                                                instance[\u0027uuid\u0027])"},{"line_number":4604,"context_line":"        connector \u003d self.driver.get_volume_connector(instance)"},{"line_number":4605,"context_line":"        LOG.info(_LI(\u0027Swapping volume %(old_volume)s for %(new_volume)s\u0027),"},{"line_number":4606,"context_line":"                  {\u0027old_volume\u0027: old_volume_id, \u0027new_volume\u0027: new_volume_id},"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_070263b4","line":4603,"updated":"2015-06-17 10:44:02.000000000","message":"ditto","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":4600,"context_line":""},{"line_number":4601,"context_line":"        bdm \u003d objects.BlockDeviceMapping.get_by_instance_and_volume_id("},{"line_number":4602,"context_line":"                                                context, old_volume_id,"},{"line_number":4603,"context_line":"                                                instance[\u0027uuid\u0027])"},{"line_number":4604,"context_line":"        connector \u003d self.driver.get_volume_connector(instance)"},{"line_number":4605,"context_line":"        LOG.info(_LI(\u0027Swapping volume %(old_volume)s for %(new_volume)s\u0027),"},{"line_number":4606,"context_line":"                  {\u0027old_volume\u0027: old_volume_id, \u0027new_volume\u0027: new_volume_id},"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_80e627e6","line":4603,"in_reply_to":"fa32b979_070263b4","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":736,"context_line":"        bdm_cls \u003d objects.BlockDeviceMapping"},{"line_number":737,"context_line":"        if not isinstance(volume_bdm, bdm_cls):"},{"line_number":738,"context_line":"            volume_bdm \u003d bdm_cls.get_by_instance_and_volume_id("},{"line_number":739,"context_line":"                ctxt, volume_id, instance[\u0027uuid\u0027])"},{"line_number":740,"context_line":"        return volume_bdm"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"    def backup_instance(self, ctxt, instance, image_id, backup_type,"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_67200f49","line":739,"updated":"2015-06-17 10:44:02.000000000","message":"ditto","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":736,"context_line":"        bdm_cls \u003d objects.BlockDeviceMapping"},{"line_number":737,"context_line":"        if not isinstance(volume_bdm, bdm_cls):"},{"line_number":738,"context_line":"            volume_bdm \u003d bdm_cls.get_by_instance_and_volume_id("},{"line_number":739,"context_line":"                ctxt, volume_id, instance[\u0027uuid\u0027])"},{"line_number":740,"context_line":"        return volume_bdm"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"    def backup_instance(self, ctxt, instance, image_id, backup_type,"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_e00a9389","line":739,"in_reply_to":"fa32b979_67200f49","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"71baddc9fe0d8a0ef84a603c374951c607ebc7a5","unresolved":false,"context_lines":[{"line_number":4008,"context_line":""},{"line_number":4009,"context_line":"@require_context"},{"line_number":4010,"context_line":"def block_device_mapping_get_by_volume_id(context, volume_id,"},{"line_number":4011,"context_line":"                                          columns_to_join\u003dNone):"},{"line_number":4012,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4013,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4014,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_fce40a0e","line":4011,"updated":"2015-12-17 10:56:34.000000000","message":"Nit: shouldn\u0027t really include these changes in here, but its almost christmas, so lets ignore that.","commit_id":"75cc1c5c980d6efc1c827a2fedd5b60d56b7a6f2"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"64d05973a4bc8c56b76a2a132b09fbaffea5d99c","unresolved":false,"context_lines":[{"line_number":4008,"context_line":""},{"line_number":4009,"context_line":"@require_context"},{"line_number":4010,"context_line":"def block_device_mapping_get_by_volume_id(context, volume_id,"},{"line_number":4011,"context_line":"                                          columns_to_join\u003dNone):"},{"line_number":4012,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4013,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4014,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_eba41bba","line":4011,"in_reply_to":"3a7e1126_28048d15","updated":"2015-12-17 18:37:37.000000000","message":"Sorry, I mixed up this comment with the next one, I got it now what you meant by not doing this here. Apologies. :)","commit_id":"75cc1c5c980d6efc1c827a2fedd5b60d56b7a6f2"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"becfb4804873991dbde52994e528fd4606fb7ef7","unresolved":false,"context_lines":[{"line_number":4008,"context_line":""},{"line_number":4009,"context_line":"@require_context"},{"line_number":4010,"context_line":"def block_device_mapping_get_by_volume_id(context, volume_id,"},{"line_number":4011,"context_line":"                                          columns_to_join\u003dNone):"},{"line_number":4012,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4013,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4014,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_28048d15","line":4011,"in_reply_to":"3a7e1126_fce40a0e","updated":"2015-12-17 11:22:01.000000000","message":"It\u0027s only the indentation that was fixed in this function. But we can file a wishlist bug if you feel that this should be refactored.","commit_id":"75cc1c5c980d6efc1c827a2fedd5b60d56b7a6f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"52f860895e8ffa62dd855cd27053e2999ff99106","unresolved":false,"context_lines":[{"line_number":4012,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4013,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4014,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"},{"line_number":4015,"context_line":"                 first()"},{"line_number":4016,"context_line":""},{"line_number":4017,"context_line":""},{"line_number":4018,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_e5eeae21","line":4015,"updated":"2015-12-17 11:01:43.000000000","message":"Just had a thought. I feel like this should really now error out if it finds more than one record, rather than just return the first one.","commit_id":"75cc1c5c980d6efc1c827a2fedd5b60d56b7a6f2"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"becfb4804873991dbde52994e528fd4606fb7ef7","unresolved":false,"context_lines":[{"line_number":4012,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4013,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4014,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"},{"line_number":4015,"context_line":"                 first()"},{"line_number":4016,"context_line":""},{"line_number":4017,"context_line":""},{"line_number":4018,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_eb2bdf80","line":4015,"in_reply_to":"3a7e1126_e5eeae21","updated":"2015-12-17 11:22:01.000000000","message":"As this series did not intend to touch this part, would that be ok to fix this in a subsequent patch?","commit_id":"75cc1c5c980d6efc1c827a2fedd5b60d56b7a6f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"89d6859360d14ef68e901aaf00dcf0a1a8ebd263","unresolved":false,"context_lines":[{"line_number":4012,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4013,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4014,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"},{"line_number":4015,"context_line":"                 first()"},{"line_number":4016,"context_line":""},{"line_number":4017,"context_line":""},{"line_number":4018,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_cc3cf695","line":4015,"in_reply_to":"3a7e1126_eb2bdf80","updated":"2015-12-17 12:33:34.000000000","message":"In my head I see it as part of this DB layer change, others may not agree with me.","commit_id":"75cc1c5c980d6efc1c827a2fedd5b60d56b7a6f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7001fa9dd3c1c52cf60d94b51b7db0985fa6145d","unresolved":false,"context_lines":[{"line_number":4043,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4044,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4045,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"},{"line_number":4046,"context_line":"                 first()"},{"line_number":4047,"context_line":""},{"line_number":4048,"context_line":""},{"line_number":4049,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa69d971_021cde10","line":4046,"updated":"2016-01-04 11:30:36.000000000","message":"I think we should change this to all() and change the name to \"get_all_by_volume_id\"","commit_id":"931286094676e295fef290126332f379f1e8d421"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aac26ff3eaad1c8699469d7842ea99ef15585f70","unresolved":false,"context_lines":[{"line_number":4043,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4044,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4045,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"},{"line_number":4046,"context_line":"                 first()"},{"line_number":4047,"context_line":""},{"line_number":4048,"context_line":""},{"line_number":4049,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa69d971_fd1e0f62","line":4046,"in_reply_to":"fa69d971_021cde10","updated":"2016-01-04 11:47:17.000000000","message":"My bad, we could just call one_or_none() here, instead of first, and then handle the new exception correctly (sqlalchemy.orm.exc.MultipleResultsFound) in the objects layer.","commit_id":"931286094676e295fef290126332f379f1e8d421"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"7f2afe17a3a9124ee853fb35908461aef699990f","unresolved":false,"context_lines":[{"line_number":4043,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4044,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4045,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"},{"line_number":4046,"context_line":"                 first()"},{"line_number":4047,"context_line":""},{"line_number":4048,"context_line":""},{"line_number":4049,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa69d971_51edcdb5","line":4046,"in_reply_to":"fa69d971_565dc313","updated":"2016-01-08 12:59:23.000000000","message":"This function is used in get_by_volume_id() in objects/block_device.py. It\u0027s only used there if don\u0027t have the instance_uuid, which is true only in case of volume_snapshot_create. If you check this patch: https://review.openstack.org/#/c/193134/ you can see that it is the only place where we don\u0027t have that information and it is therefore blocked for volumes that allow multi-attach.\n\nAlso as we currently need the volume info for multiple reasons it does not mean optimization to use a new DB function to identify that a volume is already attached to an instance. Also a volume can be attached to a host as opposed to an instance, in which sense the volume info is the best source of information regarding attachments.","commit_id":"931286094676e295fef290126332f379f1e8d421"},{"author":{"_account_id":14806,"name":"Chhavi Agarwal","email":"chhagarw@in.ibm.com","username":"chhagarw"},"change_message_id":"085b4ae4f2811b4e0f429f97a3760a6e2e4bb11e","unresolved":false,"context_lines":[{"line_number":4043,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4044,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4045,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"},{"line_number":4046,"context_line":"                 first()"},{"line_number":4047,"context_line":""},{"line_number":4048,"context_line":""},{"line_number":4049,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa69d971_565dc313","line":4046,"in_reply_to":"fa69d971_78b46ad0","updated":"2016-01-08 12:36:07.000000000","message":"in the shared volume scenario, get_by_volume_id will be returning the multiple BDM entries,  in that case returning the single entry will not be the correct data to proceed for any operations. \n\nI can see this has been used at number of places during detach and migration. \n\nWith the shared volume support, i think we should return all the BDM entries and update the places where this API is been used.","commit_id":"931286094676e295fef290126332f379f1e8d421"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"926bbac5f9ef31a0a1268f858c705c7a55cbc4f2","unresolved":false,"context_lines":[{"line_number":4043,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4044,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4045,"context_line":"                 filter_by(volume_id\u003dvolume_id).\\"},{"line_number":4046,"context_line":"                 first()"},{"line_number":4047,"context_line":""},{"line_number":4048,"context_line":""},{"line_number":4049,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa69d971_78b46ad0","line":4046,"in_reply_to":"fa69d971_fd1e0f62","updated":"2016-01-04 16:07:09.000000000","message":"Done","commit_id":"931286094676e295fef290126332f379f1e8d421"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b1994103cd4419edc637712304f03d52cba0e4b5","unresolved":false,"context_lines":[{"line_number":6090,"context_line":"        self._create_bdm({\u0027volume_id\u0027: \u0027fake_id\u0027})"},{"line_number":6091,"context_line":"        bdm \u003d db.block_device_mapping_get_by_instance_and_volume_id(self.ctxt,"},{"line_number":6092,"context_line":"                \u0027fake_id\u0027, self.instance[\u0027uuid\u0027])"},{"line_number":6093,"context_line":"        self.assertEqual(bdm[\u0027volume_id\u0027], \u0027fake_id\u0027)"},{"line_number":6094,"context_line":"        self.assertEqual(bdm[\u0027instance_uuid\u0027], self.instance[\u0027uuid\u0027])"},{"line_number":6095,"context_line":""},{"line_number":6096,"context_line":"    def test_block_device_mapping_get_by_instance_and_volume_id_multiattach("}],"source_content_type":"text/x-python","patch_set":24,"id":"7a740942_6dee9cee","line":6093,"updated":"2015-12-13 07:53:06.000000000","message":"the expected value should be first","commit_id":"87e9352412ba08a4a627b6c7fe5063e92118f1d0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b1994103cd4419edc637712304f03d52cba0e4b5","unresolved":false,"context_lines":[{"line_number":6103,"context_line":"                          \u0027instance_uuid\u0027: instance_uuid2})"},{"line_number":6104,"context_line":"        bdm \u003d db.block_device_mapping_get_by_instance_and_volume_id(self.ctxt,"},{"line_number":6105,"context_line":"                \u0027fake_id\u0027, instance_uuid2)"},{"line_number":6106,"context_line":"        self.assertEqual(bdm[\u0027volume_id\u0027], \u0027fake_id\u0027)"},{"line_number":6107,"context_line":"        self.assertEqual(bdm[\u0027instance_uuid\u0027], instance_uuid2)"},{"line_number":6108,"context_line":""},{"line_number":6109,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"7a740942_8debc8db","line":6106,"updated":"2015-12-13 07:53:06.000000000","message":"ditto","commit_id":"87e9352412ba08a4a627b6c7fe5063e92118f1d0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"71baddc9fe0d8a0ef84a603c374951c607ebc7a5","unresolved":false,"context_lines":[{"line_number":6096,"context_line":"    def test_block_device_mapping_get_by_instance_and_volume_id_multiattach("},{"line_number":6097,"context_line":"            self):"},{"line_number":6098,"context_line":"        instance_uuid1 \u003d \u002769f5c254-1a5b-4fff-acf7-cb369904f58f\u0027"},{"line_number":6099,"context_line":"        instance_uuid2 \u003d \u002769f5c254-1a5b-4fff-acf7-cb369904f59f\u0027"},{"line_number":6100,"context_line":"        self._create_bdm({\u0027volume_id\u0027: \u0027fake_id\u0027,"},{"line_number":6101,"context_line":"                          \u0027instance_uuid\u0027: instance_uuid1})"},{"line_number":6102,"context_line":"        self._create_bdm({\u0027volume_id\u0027: \u0027fake_id\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_c2ba88e1","line":6099,"updated":"2015-12-17 10:56:34.000000000","message":"Erm, these should be different I guess?\n\nI would prefer if use use the pattern above, and use real instance uuids:\nself.instance2 \u003d db.instance_create(self.ctxt, {})\n\nIf we add a foreign key here, it would break your test.","commit_id":"75cc1c5c980d6efc1c827a2fedd5b60d56b7a6f2"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"becfb4804873991dbde52994e528fd4606fb7ef7","unresolved":false,"context_lines":[{"line_number":6096,"context_line":"    def test_block_device_mapping_get_by_instance_and_volume_id_multiattach("},{"line_number":6097,"context_line":"            self):"},{"line_number":6098,"context_line":"        instance_uuid1 \u003d \u002769f5c254-1a5b-4fff-acf7-cb369904f58f\u0027"},{"line_number":6099,"context_line":"        instance_uuid2 \u003d \u002769f5c254-1a5b-4fff-acf7-cb369904f59f\u0027"},{"line_number":6100,"context_line":"        self._create_bdm({\u0027volume_id\u0027: \u0027fake_id\u0027,"},{"line_number":6101,"context_line":"                          \u0027instance_uuid\u0027: instance_uuid1})"},{"line_number":6102,"context_line":"        self._create_bdm({\u0027volume_id\u0027: \u0027fake_id\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_0bbaeb23","line":6099,"in_reply_to":"3a7e1126_c2ba88e1","updated":"2015-12-17 11:22:01.000000000","message":"Ok, I will change this in the next patch set. Thanks for the pointers.","commit_id":"75cc1c5c980d6efc1c827a2fedd5b60d56b7a6f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"71baddc9fe0d8a0ef84a603c374951c607ebc7a5","unresolved":false,"context_lines":[{"line_number":6104,"context_line":"        bdm \u003d db.block_device_mapping_get_by_instance_and_volume_id(self.ctxt,"},{"line_number":6105,"context_line":"                \u0027fake_id\u0027, instance_uuid2)"},{"line_number":6106,"context_line":"        self.assertEqual(bdm[\u0027volume_id\u0027], \u0027fake_id\u0027)"},{"line_number":6107,"context_line":"        self.assertEqual(bdm[\u0027instance_uuid\u0027], instance_uuid2)"},{"line_number":6108,"context_line":""},{"line_number":6109,"context_line":""},{"line_number":6110,"context_line":"class AgentBuildTestCase(test.TestCase, ModelsObjectComparatorMixin):"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_02ae5085","line":6107,"updated":"2015-12-17 10:56:34.000000000","message":"Would be nice to check that with both instance_uuids.","commit_id":"75cc1c5c980d6efc1c827a2fedd5b60d56b7a6f2"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"becfb4804873991dbde52994e528fd4606fb7ef7","unresolved":false,"context_lines":[{"line_number":6104,"context_line":"        bdm \u003d db.block_device_mapping_get_by_instance_and_volume_id(self.ctxt,"},{"line_number":6105,"context_line":"                \u0027fake_id\u0027, instance_uuid2)"},{"line_number":6106,"context_line":"        self.assertEqual(bdm[\u0027volume_id\u0027], \u0027fake_id\u0027)"},{"line_number":6107,"context_line":"        self.assertEqual(bdm[\u0027instance_uuid\u0027], instance_uuid2)"},{"line_number":6108,"context_line":""},{"line_number":6109,"context_line":""},{"line_number":6110,"context_line":"class AgentBuildTestCase(test.TestCase, ModelsObjectComparatorMixin):"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_6b94cf8a","line":6107,"in_reply_to":"3a7e1126_02ae5085","updated":"2015-12-17 11:22:01.000000000","message":"I will fix this in the next patch set.","commit_id":"75cc1c5c980d6efc1c827a2fedd5b60d56b7a6f2"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":1723,"context_line":"        bdm_cls \u003d objects.BlockDeviceMapping"},{"line_number":1724,"context_line":"        bdm \u003d bdm_cls.get_by_instance_and_volume_id(context,"},{"line_number":1725,"context_line":"                                                    volume_id,"},{"line_number":1726,"context_line":"                                                    instance[\u0027uuid\u0027])"},{"line_number":1727,"context_line":""},{"line_number":1728,"context_line":"        driver_bdm \u003d driver_block_device.convert_volume(bdm)"},{"line_number":1729,"context_line":"        if driver_bdm:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_279be773","line":1726,"updated":"2015-06-17 10:44:02.000000000","message":"instance object","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":1723,"context_line":"        bdm_cls \u003d objects.BlockDeviceMapping"},{"line_number":1724,"context_line":"        bdm \u003d bdm_cls.get_by_instance_and_volume_id(context,"},{"line_number":1725,"context_line":"                                                    volume_id,"},{"line_number":1726,"context_line":"                                                    instance[\u0027uuid\u0027])"},{"line_number":1727,"context_line":""},{"line_number":1728,"context_line":"        driver_bdm \u003d driver_block_device.convert_volume(bdm)"},{"line_number":1729,"context_line":"        if driver_bdm:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_40433fb2","line":1726,"in_reply_to":"fa32b979_279be773","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"}],"nova/volume/cinder.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ce77de5381e1a13a5801625169d353f04375509b","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    #            removed."},{"line_number":151,"context_line":"    d[\u0027attach_time\u0027] \u003d \"\""},{"line_number":152,"context_line":"    d[\u0027mountpoint\u0027] \u003d \"\""},{"line_number":153,"context_line":"    d[\u0027multiattach\u0027] \u003d vol.multiattach"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    if vol.attachments:"},{"line_number":156,"context_line":"        d[\u0027attachments\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_be92cc54","line":153,"updated":"2015-02-11 16:20:38.000000000","message":"We need to be safe when trying to access vol.multiattach.  For backwards compatibility, we need to make sure it\u0027s there before accessing it.","commit_id":"4fd6722310493e9f5bcd57a3053955f83f04e7ca"},{"author":{"_account_id":10851,"name":"Tobias Engelbert","email":"tobias.engelbert@ericsson.com","username":"Tobi"},"change_message_id":"505ebd693d72f31e166021b0201217e3ee0b641d","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    #            removed."},{"line_number":151,"context_line":"    d[\u0027attach_time\u0027] \u003d \"\""},{"line_number":152,"context_line":"    d[\u0027mountpoint\u0027] \u003d \"\""},{"line_number":153,"context_line":"    d[\u0027multiattach\u0027] \u003d vol.multiattach"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    if vol.attachments:"},{"line_number":156,"context_line":"        d[\u0027attachments\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_f21635f1","line":153,"in_reply_to":"da86d52c_be92cc54","updated":"2015-02-11 17:14:01.000000000","message":"d[\u0027multiattach\u0027] \u003d getattr(vol, \u0027multiattach\u0027, None)","commit_id":"4fd6722310493e9f5bcd57a3053955f83f04e7ca"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"c99dc81fc2392f538c0a1487e4129391f7d0b177","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    #            removed."},{"line_number":151,"context_line":"    d[\u0027attach_time\u0027] \u003d \"\""},{"line_number":152,"context_line":"    d[\u0027mountpoint\u0027] \u003d \"\""},{"line_number":153,"context_line":"    d[\u0027multiattach\u0027] \u003d vol.multiattach"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    if vol.attachments:"},{"line_number":156,"context_line":"        d[\u0027attachments\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_62bd0568","line":153,"in_reply_to":"da86d52c_f21635f1","updated":"2015-02-11 22:58:28.000000000","message":"I would set that to False instead of None as prior to the multiattach attribute existing would be the implied value.  No volume prior to multiattach existing are multiattach capable.","commit_id":"4fd6722310493e9f5bcd57a3053955f83f04e7ca"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"dff3fbe19934aadb46de74a5b1d112ded23cb0f7","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        d[\u0027attachments\u0027] \u003d []"},{"line_number":157,"context_line":"        for attach in vol.attachments:"},{"line_number":158,"context_line":"            a \u003d {\u0027attach_status\u0027: \u0027attached\u0027,"},{"line_number":159,"context_line":"                 \u0027attachment_id\u0027: attach[\u0027attachment_id\u0027],"},{"line_number":160,"context_line":"                 \u0027instance_uuid\u0027: attach[\u0027serverId\u0027],"},{"line_number":161,"context_line":"                 \u0027mountpoint\u0027: attach[\u0027device\u0027],"},{"line_number":162,"context_line":"                 }"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_0c6d3ccc","line":159,"updated":"2015-02-12 15:45:22.000000000","message":"also need to be safe here as well.","commit_id":"f37e5f45a57f77cb6ef6d6b6f876ce1c219b8dc0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        # has been marked as multiattach"},{"line_number":320,"context_line":"        if \u0027multiattach\u0027 in volume and volume[\u0027multiattach\u0027] \u003d\u003d \u0027true\u0027:"},{"line_number":321,"context_line":"            if (volume[\u0027status\u0027] not in (\"available\", \u0027in-use\u0027)):"},{"line_number":322,"context_line":"                msg \u003d _LE(\"multiattach volume\u0027s status must be\""},{"line_number":323,"context_line":"                        \"\u0027available\u0027 or \u0027in-use\u0027\")"},{"line_number":324,"context_line":"                LOG.error(msg)"},{"line_number":325,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_67ca4f50","line":322,"updated":"2015-06-17 10:44:02.000000000","message":"see below regarding the _LE","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        # has been marked as multiattach"},{"line_number":320,"context_line":"        if \u0027multiattach\u0027 in volume and volume[\u0027multiattach\u0027] \u003d\u003d \u0027true\u0027:"},{"line_number":321,"context_line":"            if (volume[\u0027status\u0027] not in (\"available\", \u0027in-use\u0027)):"},{"line_number":322,"context_line":"                msg \u003d _LE(\"multiattach volume\u0027s status must be\""},{"line_number":323,"context_line":"                        \"\u0027available\u0027 or \u0027in-use\u0027\")"},{"line_number":324,"context_line":"                LOG.error(msg)"},{"line_number":325,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_20f71b5a","line":322,"in_reply_to":"fa32b979_67ca4f50","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                LOG.error(msg)"},{"line_number":330,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":331,"context_line":"            if volume[\u0027attach_status\u0027] \u003d\u003d \"attached\":"},{"line_number":332,"context_line":"                msg \u003d _LE(\"volume is already attached\")"},{"line_number":333,"context_line":"                LOG.error(msg)"},{"line_number":334,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":335,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_e7bdffb7","line":332,"updated":"2015-06-17 10:44:02.000000000","message":"the LE is only for logging and this should not be passed to the exception. In this case it should be msg \u003d _(\"status...\")","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                LOG.error(msg)"},{"line_number":330,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":331,"context_line":"            if volume[\u0027attach_status\u0027] \u003d\u003d \"attached\":"},{"line_number":332,"context_line":"                msg \u003d _LE(\"volume is already attached\")"},{"line_number":333,"context_line":"                LOG.error(msg)"},{"line_number":334,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":335,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_e09b7316","line":332,"in_reply_to":"fa32b979_e7bdffb7","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c56adc10edb3e58486dfdfadcf551ab6ead07925","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            attach \u003d {}"},{"line_number":388,"context_line":"        for attach in attachments:"},{"line_number":389,"context_line":"            if attach.get(\u0027instance_uuid\u0027, None) \u003d\u003d instance_uuid:"},{"line_number":390,"context_line":"                    break"},{"line_number":391,"context_line":"        return attach"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    @translate_volume_exception"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_27c0c729","line":390,"updated":"2015-06-17 10:44:02.000000000","message":"indentation is dodgy","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"},{"author":{"_account_id":13909,"name":"Chris Gacsal","email":"chris.gacsal@gmail.com","username":"chrisg"},"change_message_id":"e80142d72c4e64b78e7bd929f8e1b01a19611b46","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            attach \u003d {}"},{"line_number":388,"context_line":"        for attach in attachments:"},{"line_number":389,"context_line":"            if attach.get(\u0027instance_uuid\u0027, None) \u003d\u003d instance_uuid:"},{"line_number":390,"context_line":"                    break"},{"line_number":391,"context_line":"        return attach"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    @translate_volume_exception"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_607683d8","line":390,"in_reply_to":"fa32b979_27c0c729","updated":"2015-06-18 09:39:02.000000000","message":"Done","commit_id":"e8932c82566aeec6a2e072cc197e8ebeb815c627"}]}
