)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b2d2487776f096de646108b0ecdc72037eb7c184","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Nova:"},{"line_number":34,"context_line":"https://review.openstack.org/#/c/143114/"},{"line_number":35,"context_line":"python-cinderclient:"},{"line_number":36,"context_line":"https://review.openstack.org/#/c/85856/"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Change-Id: I950fa00ed5a30e7758245d5b0557f6df42dc58a3"},{"line_number":39,"context_line":"Implements: blueprint multi-attach-volume"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"1a930d6b_a4e206ff","line":36,"updated":"2015-01-22 19:59:27.000000000","message":"This needs an APIImpact tag in the commit message to let the docs  team know about the changed APIs.","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"fff66a9a3db18bf57dfe41756f737bbfc7c8cfb5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Nova:"},{"line_number":34,"context_line":"https://review.openstack.org/#/c/143114/"},{"line_number":35,"context_line":"python-cinderclient:"},{"line_number":36,"context_line":"https://review.openstack.org/#/c/85856/"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Change-Id: I950fa00ed5a30e7758245d5b0557f6df42dc58a3"},{"line_number":39,"context_line":"Implements: blueprint multi-attach-volume"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"1a930d6b_4f6fbbc5","line":36,"in_reply_to":"1a930d6b_a4e206ff","updated":"2015-01-23 16:36:17.000000000","message":"Done","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"}],"cinder/api/contrib/admin_actions.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"372f8ccf28075d2ff29121e0f2a349f07ae5d57f","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        attachment_id \u003d None"},{"line_number":151,"context_line":"        if \u0027attachment_id\u0027 in body[\u0027os-force_detach\u0027]:"},{"line_number":152,"context_line":"            attachment_id \u003d body[\u0027os-force_detach\u0027][\u0027attachment_id\u0027]"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        self.volume_api.detach(context, volume, attachment_id)"},{"line_number":155,"context_line":"        return webob.Response(status_int\u003d202)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FzA8%3D","line":152,"updated":"2014-04-27 06:39:03.000000000","message":"Change these lines to:\n attachment_id \u003d body[\u0027os-force_detach\u0027].get(\u0027attachment_id\u0027, None)","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d2e19867717288db019686f1a06f3c9a63001cc4","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        attachment_id \u003d None"},{"line_number":151,"context_line":"        if \u0027attachment_id\u0027 in body[\u0027os-force_detach\u0027]:"},{"line_number":152,"context_line":"            attachment_id \u003d body[\u0027os-force_detach\u0027][\u0027attachment_id\u0027]"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        self.volume_api.detach(context, volume, attachment_id)"},{"line_number":155,"context_line":"        return webob.Response(status_int\u003d202)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FyTQ%3D","line":152,"in_reply_to":"AAAAXX%2F%2FzA8%3D","updated":"2014-04-27 17:17:22.000000000","message":"Done","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"394dcdca72de54b119595f8e9d68b6d32eee41eb","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        attachment_id \u003d None"},{"line_number":190,"context_line":"        if \u0027attachment_id\u0027 in body[\u0027os-force_detach\u0027]:"},{"line_number":191,"context_line":"            attachment_id \u003d body[\u0027os-force_detach\u0027].get(\u0027attachment_id\u0027, None)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        self.volume_api.detach(context, volume, attachment_id)"},{"line_number":194,"context_line":"        return webob.Response(status_int\u003d202)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_f61b2dc9","line":191,"updated":"2015-01-19 15:41:59.000000000","message":"The above three lines can be more succinctly written as:\n\nattachment_id \u003d body[\u0027os-force_detach\u0027].get(\u0027attachment_id\u0027)","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"d8d7c0024b7b71f1f9871d6190c6e653a9213a49","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        self.volume_api.terminate_connection(context, volume,"},{"line_number":187,"context_line":"                                             {}, force\u003dTrue)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        attachment_id \u003d None"},{"line_number":190,"context_line":"        if \u0027attachment_id\u0027 in body[\u0027os-force_detach\u0027]:"},{"line_number":191,"context_line":"            attachment_id \u003d body[\u0027os-force_detach\u0027].get(\u0027attachment_id\u0027, None)"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_8a1d3012","line":189,"updated":"2015-01-22 12:54:58.000000000","message":"Lines 189-190 are not necessary (if \u0027attachment_id\u0027 is not there line 191 will return None)","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"dbf0ba1acc93b7b655b3c269d86633d194b9c7fa","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        self.volume_api.terminate_connection(context, volume,"},{"line_number":187,"context_line":"                                             {}, force\u003dTrue)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        attachment_id \u003d None"},{"line_number":190,"context_line":"        if \u0027attachment_id\u0027 in body[\u0027os-force_detach\u0027]:"},{"line_number":191,"context_line":"            attachment_id \u003d body[\u0027os-force_detach\u0027].get(\u0027attachment_id\u0027, None)"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_91646f4a","line":189,"in_reply_to":"1a930d6b_8a1d3012","updated":"2015-01-22 17:44:05.000000000","message":"Done","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"}],"cinder/api/contrib/volume_actions.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"372f8ccf28075d2ff29121e0f2a349f07ae5d57f","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        attachment_id \u003d None"},{"line_number":130,"context_line":"        if \u0027attachment_id\u0027 in body[\u0027os-detach\u0027]:"},{"line_number":131,"context_line":"            attachment_id \u003d body[\u0027os-detach\u0027][\u0027attachment_id\u0027]"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self.volume_api.detach(context, volume, attachment_id)"},{"line_number":134,"context_line":"        return webob.Response(status_int\u003d202)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FzA4%3D","line":131,"updated":"2014-04-27 06:39:03.000000000","message":"Change these lines to:\n attachment_id \u003d body[\u0027os-detach\u0027].get(\u0027attachment_id\u0027, None)","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d2e19867717288db019686f1a06f3c9a63001cc4","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        attachment_id \u003d None"},{"line_number":130,"context_line":"        if \u0027attachment_id\u0027 in body[\u0027os-detach\u0027]:"},{"line_number":131,"context_line":"            attachment_id \u003d body[\u0027os-detach\u0027][\u0027attachment_id\u0027]"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self.volume_api.detach(context, volume, attachment_id)"},{"line_number":134,"context_line":"        return webob.Response(status_int\u003d202)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FyTE%3D","line":131,"in_reply_to":"AAAAXX%2F%2FzA4%3D","updated":"2014-04-27 17:17:22.000000000","message":"Done","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"394dcdca72de54b119595f8e9d68b6d32eee41eb","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        attachment_id \u003d None"},{"line_number":131,"context_line":"        if body[\u0027os-detach\u0027] and \u0027attachment_id\u0027 in body[\u0027os-detach\u0027]:"},{"line_number":132,"context_line":"            attachment_id \u003d body[\u0027os-detach\u0027].get(\u0027attachment_id\u0027, None)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        self.volume_api.detach(context, volume, attachment_id)"},{"line_number":135,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_b68445b3","line":133,"updated":"2015-01-19 15:41:59.000000000","message":"This if block can be more succinctly written as:\n\nif body[\u0027os-detach\u0027]:\n    attachment_id \u003d body[\u0027os-detach\u0027].get(\u0027attachment_id\u0027)","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"d8d7c0024b7b71f1f9871d6190c6e653a9213a49","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        except exception.VolumeNotFound as error:"},{"line_number":128,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        attachment_id \u003d None"},{"line_number":131,"context_line":"        if body[\u0027os-detach\u0027] and \u0027attachment_id\u0027 in body[\u0027os-detach\u0027]:"},{"line_number":132,"context_line":"            attachment_id \u003d body[\u0027os-detach\u0027].get(\u0027attachment_id\u0027, None)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_aa1aec14","line":130,"updated":"2015-01-22 12:54:58.000000000","message":"Lines 130-131 are not necessary (if \u0027attachment_id\u0027 is not there line 132 will return None)","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"dbf0ba1acc93b7b655b3c269d86633d194b9c7fa","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        except exception.VolumeNotFound as error:"},{"line_number":128,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        attachment_id \u003d None"},{"line_number":131,"context_line":"        if body[\u0027os-detach\u0027] and \u0027attachment_id\u0027 in body[\u0027os-detach\u0027]:"},{"line_number":132,"context_line":"            attachment_id \u003d body[\u0027os-detach\u0027].get(\u0027attachment_id\u0027, None)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_31fd7b3b","line":130,"in_reply_to":"1a930d6b_aa1aec14","updated":"2015-01-22 17:44:05.000000000","message":"Done","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"970996067f6b71f1ddc378dedf1766e466e7028a","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        attachment_id \u003d None"},{"line_number":131,"context_line":"        if body[\u0027os-detach\u0027]:"},{"line_number":132,"context_line":"            attachment_id \u003d body[\u0027os-detach\u0027].get(\u0027attachment_id\u0027, None)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        self.volume_api.detach(context, volume, attachment_id)"},{"line_number":135,"context_line":"        return webob.Response(status_int\u003d202)"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_9aaf907c","line":132,"updated":"2015-03-10 05:54:09.000000000","message":"Is there any reason of having the user look up the attachment id and then pass that in? Why not just pass in the instance uuid?","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        attachment_id \u003d None"},{"line_number":131,"context_line":"        if body[\u0027os-detach\u0027]:"},{"line_number":132,"context_line":"            attachment_id \u003d body[\u0027os-detach\u0027].get(\u0027attachment_id\u0027, None)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        self.volume_api.detach(context, volume, attachment_id)"},{"line_number":135,"context_line":"        return webob.Response(status_int\u003d202)"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_9094ba8d","line":132,"in_reply_to":"9a80dd14_9aaf907c","updated":"2015-03-10 15:37:34.000000000","message":"Because you can be attached to a host as well as an instance.  In which case you don\u0027t have an instance uuid.   That\u0027s why we need attachment_id, as it uniquely identifies an attachment either to a host, or an instance.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"}],"cinder/api/v1/volumes.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"372f8ccf28075d2ff29121e0f2a349f07ae5d57f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"def _translate_attachment_summary_view(_context, vol):"},{"line_number":48,"context_line":"    \"\"\"Maps keys for attachment summary view.\"\"\""},{"line_number":49,"context_line":"    d \u003d []"},{"line_number":50,"context_line":"    if vol.get(\u0027volume_attachment\u0027):"},{"line_number":51,"context_line":"        attachments \u003d vol.get(\u0027volume_attachment\u0027)"},{"line_number":52,"context_line":"        for attachment in attachments:"},{"line_number":53,"context_line":"            if attachment.get(\u0027attach_status\u0027) \u003d\u003d \u0027attached\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FzAE%3D","line":50,"updated":"2014-04-27 06:39:03.000000000","message":"You can remove this \u0027if\u0027 statement:\n\n attachments \u003d vol.get(\u0027volume_attachment\u0027, [])\n for attachment in attachments:\n     ...","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d2e19867717288db019686f1a06f3c9a63001cc4","unresolved":false,"context_lines":[{"line_number":47,"context_line":"def _translate_attachment_summary_view(_context, vol):"},{"line_number":48,"context_line":"    \"\"\"Maps keys for attachment summary view.\"\"\""},{"line_number":49,"context_line":"    d \u003d []"},{"line_number":50,"context_line":"    if vol.get(\u0027volume_attachment\u0027):"},{"line_number":51,"context_line":"        attachments \u003d vol.get(\u0027volume_attachment\u0027)"},{"line_number":52,"context_line":"        for attachment in attachments:"},{"line_number":53,"context_line":"            if attachment.get(\u0027attach_status\u0027) \u003d\u003d \u0027attached\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FySo%3D","line":50,"in_reply_to":"AAAAXX%2F%2FzAE%3D","updated":"2014-04-27 17:17:22.000000000","message":"Done","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        LOG.info(_LI(\"Create volume of %s GB\"), size, context\u003dcontext)"},{"line_number":377,"context_line":"        shareable \u003d volume.get(\u0027shareable\u0027, False)"},{"line_number":378,"context_line":"        kwargs[\u0027shareable\u0027] \u003d shareable"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        image_href \u003d None"},{"line_number":381,"context_line":"        image_uuid \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_9a48e7b4","line":378,"updated":"2015-01-05 07:07:17.000000000","message":"I don\u0027t think we are supposed to add new feature to V1 API any more as it is deprecated.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        LOG.info(_LI(\"Create volume of %s GB\"), size, context\u003dcontext)"},{"line_number":377,"context_line":"        shareable \u003d volume.get(\u0027shareable\u0027, False)"},{"line_number":378,"context_line":"        kwargs[\u0027shareable\u0027] \u003d shareable"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        image_href \u003d None"},{"line_number":381,"context_line":"        image_uuid \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_7fb79b21","line":378,"in_reply_to":"3a961159_9a48e7b4","updated":"2015-01-15 16:23:58.000000000","message":"If I don\u0027t modify this file, to support the new shareable flag and the translation of the attachments from the new table, then any of the gate tests that run against v1 will fail.  This whole file will go away when we actually remove v1 from the tree.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f823e40f9d9db96492f3ed47285ff4a755a56b91","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    attachments \u003d vol.get(\u0027volume_attachment\u0027, [])"},{"line_number":53,"context_line":"    for attachment in attachments:"},{"line_number":54,"context_line":"        if attachment.get(\u0027attach_status\u0027) \u003d\u003d \u0027attached\u0027:"},{"line_number":55,"context_line":"            a \u003d {\u0027id\u0027: attachment.get(\u0027volume_id\u0027),"},{"line_number":56,"context_line":"                 \u0027attachment_id\u0027: attachment.get(\u0027id\u0027),"},{"line_number":57,"context_line":"                 \u0027volume_id\u0027: attachment.get(\u0027volume_id\u0027),"},{"line_number":58,"context_line":"                 \u0027server_id\u0027: attachment.get(\u0027instance_uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_e29179f8","line":55,"updated":"2015-01-20 19:00:44.000000000","message":"Why wouldn\u0027t the \u0027id\u0027 of the attachment be the \u0027attachment_id\u0027? I presume this is to preserve some sort of backwards compatibility?","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ade835a9c4be7b5a31ccc9384ffc5b22b2105f0f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    attachments \u003d vol.get(\u0027volume_attachment\u0027, [])"},{"line_number":53,"context_line":"    for attachment in attachments:"},{"line_number":54,"context_line":"        if attachment.get(\u0027attach_status\u0027) \u003d\u003d \u0027attached\u0027:"},{"line_number":55,"context_line":"            a \u003d {\u0027id\u0027: attachment.get(\u0027volume_id\u0027),"},{"line_number":56,"context_line":"                 \u0027attachment_id\u0027: attachment.get(\u0027id\u0027),"},{"line_number":57,"context_line":"                 \u0027volume_id\u0027: attachment.get(\u0027volume_id\u0027),"},{"line_number":58,"context_line":"                 \u0027server_id\u0027: attachment.get(\u0027instance_uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a930d6b_3f366f04","line":55,"in_reply_to":"3a961159_e29179f8","updated":"2015-01-21 05:28:12.000000000","message":"this is to maintain backwards compatibility.   the id used to be volume_id, so that\u0027s why it\u0027s volume_id here.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"d8d7c0024b7b71f1f9871d6190c6e653a9213a49","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    else:"},{"line_number":92,"context_line":"        d[\u0027bootable\u0027] \u003d \u0027false\u0027"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    if vol[\u0027shareable\u0027]:"},{"line_number":95,"context_line":"        d[\u0027shareable\u0027] \u003d \u0027true\u0027"},{"line_number":96,"context_line":"    else:"},{"line_number":97,"context_line":"        d[\u0027shareable\u0027] \u003d \u0027false\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_caee58ec","line":94,"updated":"2015-01-22 12:54:58.000000000","message":"\u0027shareable\u0027 is vague in my opinion - why not allow_multiattach for example?  (For all occurrences in this patch set, not just this file)","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"001a3fe5303eb705e6147c9a5cda55aa2cd43ede","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    else:"},{"line_number":92,"context_line":"        d[\u0027bootable\u0027] \u003d \u0027false\u0027"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    if vol[\u0027shareable\u0027]:"},{"line_number":95,"context_line":"        d[\u0027shareable\u0027] \u003d \u0027true\u0027"},{"line_number":96,"context_line":"    else:"},{"line_number":97,"context_line":"        d[\u0027shareable\u0027] \u003d \u0027false\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_5e6e8f02","line":94,"in_reply_to":"1a930d6b_caee58ec","updated":"2015-01-22 19:04:49.000000000","message":"We discussed this in the cinder channel today and decided to change the name to \u0027multiattach\u0027   \n\nI\u0027ll change the cinder client to use --allow-multiattach\n\ncinder create --allow-multiattach --name foo 300","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"b5b7c50c93b532645a600ddf444de459069220f4","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    else:"},{"line_number":92,"context_line":"        d[\u0027bootable\u0027] \u003d \u0027false\u0027"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    if vol[\u0027shareable\u0027]:"},{"line_number":95,"context_line":"        d[\u0027shareable\u0027] \u003d \u0027true\u0027"},{"line_number":96,"context_line":"    else:"},{"line_number":97,"context_line":"        d[\u0027shareable\u0027] \u003d \u0027false\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_dead1f8a","line":94,"in_reply_to":"1a930d6b_caee58ec","updated":"2015-01-22 18:56:37.000000000","message":"allow_multiattach is less than ideal as an option to use in \ncinder create command line.  :(","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"aad176762a07166a123d1c31e45a143650ecbd59","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                 \u0027volume_id\u0027: attachment.get(\u0027volume_id\u0027),"},{"line_number":58,"context_line":"                 \u0027server_id\u0027: attachment.get(\u0027instance_uuid\u0027),"},{"line_number":59,"context_line":"                 \u0027host_name\u0027: attachment.get(\u0027attached_host\u0027),"},{"line_number":60,"context_line":"                 \u0027device\u0027: attachment.get(\u0027mountpoint\u0027),"},{"line_number":61,"context_line":"                 }"},{"line_number":62,"context_line":"            d.append(a)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"ba7be1f8_fbb482d2","line":60,"updated":"2015-02-24 09:55:07.000000000","message":"Looking at the old version, this could potentially not exist before? Is that possibility now definitely gone?","commit_id":"ef82bde3b5e34f320a450ee5b03251c8b0957a00"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4140df151db17e4ab3fdf8d416ac0c377bc45704","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                 \u0027volume_id\u0027: attachment.get(\u0027volume_id\u0027),"},{"line_number":58,"context_line":"                 \u0027server_id\u0027: attachment.get(\u0027instance_uuid\u0027),"},{"line_number":59,"context_line":"                 \u0027host_name\u0027: attachment.get(\u0027attached_host\u0027),"},{"line_number":60,"context_line":"                 \u0027device\u0027: attachment.get(\u0027mountpoint\u0027),"},{"line_number":61,"context_line":"                 }"},{"line_number":62,"context_line":"            d.append(a)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"ba7be1f8_18106aa7","line":60,"in_reply_to":"ba7be1f8_fbb482d2","updated":"2015-02-24 15:57:48.000000000","message":"I\u0027m pretty sure it was always around.   Looking at the history the check was actually a hold over from the nova volume days.  The mountpoint is always there, if it\u0027s attached.","commit_id":"ef82bde3b5e34f320a450ee5b03251c8b0957a00"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"aad176762a07166a123d1c31e45a143650ecbd59","unresolved":false,"context_lines":[{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        LOG.info(_LI(\"Create volume of %s GB\"), size, context\u003dcontext)"},{"line_number":380,"context_line":"        multiattach \u003d volume.get(\u0027multiattach\u0027, False)"},{"line_number":381,"context_line":"        kwargs[\u0027multiattach\u0027] \u003d multiattach"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        image_href \u003d None"},{"line_number":384,"context_line":"        image_uuid \u003d None"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba7be1f8_1bdcf6e3","line":381,"updated":"2015-02-24 09:55:07.000000000","message":"Ok, so minor code level details aside, this bit worries me. This allows people to create multi-attachable volumes, despite the fact they don\u0027t work. At all. You can\u0027t attach them to nova. Is there the possibility of adding:\n\nif multiattach:\n    exp \u003d _(\"Multiattach is not yet supported in cinder, please try again in a future version\")\n    raise exc.HTTPInvalid(explanation\u003dexp)\n\nThis would reduce my worries about exposing this broken functionality in the release, and is trivially removed by anybody testing multiattach support who has patched nova. Even make it a config option \u0027I_have_an_experimental_multiattach_capable_nova_and_I_know_what_Im_doing\u0027 defaulting to False? \n\nEither option means we can land the feature before nova, and hopefully not increase out support load","commit_id":"ef82bde3b5e34f320a450ee5b03251c8b0957a00"}],"cinder/api/v2/views/volumes.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"372f8ccf28075d2ff29121e0f2a349f07ae5d57f","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        attachments \u003d []"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        if volume[\u0027attach_status\u0027] \u003d\u003d \u0027attached\u0027:"},{"line_number":84,"context_line":"            if volume.get(\u0027volume_attachment\u0027):"},{"line_number":85,"context_line":"                attaches \u003d volume.get(\u0027volume_attachment\u0027)"},{"line_number":86,"context_line":"                for attachment in attaches:"},{"line_number":87,"context_line":"                    if attachment.get(\u0027attach_status\u0027) \u003d\u003d \u0027attached\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2Fy%2F0%3D","line":84,"updated":"2014-04-27 06:39:03.000000000","message":"What is the case where the attach_status is \u0027attached\u0027 but there are no volume_attachments?\n\nAs in v1, you can remove the \u0027if\u0027 statement","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d2e19867717288db019686f1a06f3c9a63001cc4","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        attachments \u003d []"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        if volume[\u0027attach_status\u0027] \u003d\u003d \u0027attached\u0027:"},{"line_number":84,"context_line":"            if volume.get(\u0027volume_attachment\u0027):"},{"line_number":85,"context_line":"                attaches \u003d volume.get(\u0027volume_attachment\u0027)"},{"line_number":86,"context_line":"                for attachment in attaches:"},{"line_number":87,"context_line":"                    if attachment.get(\u0027attach_status\u0027) \u003d\u003d \u0027attached\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FySQ%3D","line":84,"in_reply_to":"AAAAXX%2F%2Fy%2F0%3D","updated":"2014-04-27 17:17:22.000000000","message":"Done","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":10973,"name":"Trump.Zhang","email":"zhangleiqiang@huawei.com","username":"trump.zhang"},"change_message_id":"e10c93f75d5662df035c823206265592576fdf97","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                \u0027metadata\u0027: self._get_volume_metadata(volume),"},{"line_number":68,"context_line":"                \u0027links\u0027: self._get_links(request, volume[\u0027id\u0027]),"},{"line_number":69,"context_line":"                \u0027user_id\u0027: volume.get(\u0027user_id\u0027),"},{"line_number":70,"context_line":"                \u0027bootable\u0027: str(volume.get(\u0027bootable\u0027)).lower(),"},{"line_number":71,"context_line":"                \u0027encrypted\u0027: self._is_volume_encrypted(volume)"},{"line_number":72,"context_line":"            }"},{"line_number":73,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_5757c825","line":70,"updated":"2014-05-19 07:59:36.000000000","message":"The \"shareable\" key is missing here.","commit_id":"09bf94fd3e31a1bb06cf5311ba67c530db82514e"}],"cinder/api/v2/volumes.py":[{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"394dcdca72de54b119595f8e9d68b6d32eee41eb","unresolved":false,"context_lines":[{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        kwargs[\u0027availability_zone\u0027] \u003d volume.get(\u0027availability_zone\u0027, None)"},{"line_number":415,"context_line":"        kwargs[\u0027scheduler_hints\u0027] \u003d volume.get(\u0027scheduler_hints\u0027, None)"},{"line_number":416,"context_line":"        shareable \u003d volume.get(\u0027shareable\u0027, False)"},{"line_number":417,"context_line":"        kwargs[\u0027shareable\u0027] \u003d shareable"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        new_volume \u003d self.volume_api.create(context,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_365a15f6","line":416,"updated":"2015-01-19 15:41:59.000000000","message":"There doesn\u0027t seem much point in having this shareable variable.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ade835a9c4be7b5a31ccc9384ffc5b22b2105f0f","unresolved":false,"context_lines":[{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        kwargs[\u0027availability_zone\u0027] \u003d volume.get(\u0027availability_zone\u0027, None)"},{"line_number":415,"context_line":"        kwargs[\u0027scheduler_hints\u0027] \u003d volume.get(\u0027scheduler_hints\u0027, None)"},{"line_number":416,"context_line":"        shareable \u003d volume.get(\u0027shareable\u0027, False)"},{"line_number":417,"context_line":"        kwargs[\u0027shareable\u0027] \u003d shareable"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        new_volume \u003d self.volume_api.create(context,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_699f3452","line":416,"in_reply_to":"3a961159_365a15f6","updated":"2015-01-21 05:28:12.000000000","message":"uh.   It\u0027s part of the spec for multi-attach.   We don\u0027t want every single volume being multi-attachable, as you have to know what you are doing.   Not all filesystems will work under the scenario of being attached to more than one host/vm.   We want the users to explicitly say at create time if the volume should be attachable to more than one instance.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"8073f73626a56e9356ebc616188744ee59009349","unresolved":false,"context_lines":[{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        kwargs[\u0027availability_zone\u0027] \u003d volume.get(\u0027availability_zone\u0027, None)"},{"line_number":415,"context_line":"        kwargs[\u0027scheduler_hints\u0027] \u003d volume.get(\u0027scheduler_hints\u0027, None)"},{"line_number":416,"context_line":"        shareable \u003d volume.get(\u0027shareable\u0027, False)"},{"line_number":417,"context_line":"        kwargs[\u0027shareable\u0027] \u003d shareable"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        new_volume \u003d self.volume_api.create(context,"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a930d6b_c00e6234","line":416,"in_reply_to":"3a961159_699f3452","updated":"2015-01-21 09:23:54.000000000","message":"no I meant:\n\nkwargs[\u0027shareable\u0027] \u003d volume.get(\u0027shareable\u0027, False)","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"7fb6a57714c77d04df9e506cbec3d561e0c427ff","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        kwargs[\u0027scheduler_hints\u0027] \u003d volume.get(\u0027scheduler_hints\u0027, None)"},{"line_number":416,"context_line":"        multiattach \u003d volume.get(\u0027multiattach\u0027, False)"},{"line_number":417,"context_line":"        kwargs[\u0027multiattach\u0027] \u003d multiattach"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        new_volume \u003d self.volume_api.create(context,"},{"line_number":420,"context_line":"                                            size,"},{"line_number":421,"context_line":"                                            volume.get(\u0027display_name\u0027),"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba7be1f8_9b32a60e","line":418,"updated":"2015-02-25 11:25:10.000000000","message":"See comment in the V1 version. Actually, we probably shouldn\u0027t be changing the V1 code at all, but that\u0027s a minor detail and not something I\u0027m going to be hitting -1 over.","commit_id":"ef82bde3b5e34f320a450ee5b03251c8b0957a00"}],"cinder/backup/manager.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"372f8ccf28075d2ff29121e0f2a349f07ae5d57f","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                            mgr.detach_volume(ctxt, volume[\u0027id\u0027],"},{"line_number":203,"context_line":"                                              attachment[\u0027id\u0027])"},{"line_number":204,"context_line":"                if volume[\u0027status\u0027] \u003d\u003d \u0027restoring-backup\u0027:"},{"line_number":205,"context_line":"                    LOG.info(_(\u0027Resetting volume %s to error_restoring \u0027"},{"line_number":206,"context_line":"                               \u0027(was restoring-backup).\u0027) % volume[\u0027id\u0027])"},{"line_number":207,"context_line":"                    mgr \u003d self._get_manager(backend)"},{"line_number":208,"context_line":"                    for attachment in attachments:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2Fy%2Fs%3D","line":205,"updated":"2014-04-27 06:39:03.000000000","message":"I know it was like this, but I think it should be \"Setting\" rather than \"Resetting\" - the status was never \u0027error_restoring\u0027.","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d2e19867717288db019686f1a06f3c9a63001cc4","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                            mgr.detach_volume(ctxt, volume[\u0027id\u0027],"},{"line_number":203,"context_line":"                                              attachment[\u0027id\u0027])"},{"line_number":204,"context_line":"                if volume[\u0027status\u0027] \u003d\u003d \u0027restoring-backup\u0027:"},{"line_number":205,"context_line":"                    LOG.info(_(\u0027Resetting volume %s to error_restoring \u0027"},{"line_number":206,"context_line":"                               \u0027(was restoring-backup).\u0027) % volume[\u0027id\u0027])"},{"line_number":207,"context_line":"                    mgr \u003d self._get_manager(backend)"},{"line_number":208,"context_line":"                    for attachment in attachments:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FySI%3D","line":205,"in_reply_to":"AAAAXX%2F%2Fy%2Fs%3D","updated":"2014-04-27 17:17:22.000000000","message":"Done","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            if attachments:"},{"line_number":202,"context_line":"                if volume[\u0027status\u0027] \u003d\u003d \u0027backing-up\u0027:"},{"line_number":203,"context_line":"                    LOG.info(_LI(\u0027Resetting volume %s to available \u0027"},{"line_number":204,"context_line":"                                 \u0027(was backing-up).\u0027) % volume[\u0027id\u0027])"},{"line_number":205,"context_line":"                    mgr \u003d self._get_manager(backend)"},{"line_number":206,"context_line":"                    for attachment in attachments:"},{"line_number":207,"context_line":"                        if (attachment[\u0027attached_host\u0027] \u003d\u003d self.host and"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_5ad59fb5","line":204,"updated":"2015-01-05 07:07:17.000000000","message":"\",\" is recommended rather than \"%\".","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            if attachments:"},{"line_number":202,"context_line":"                if volume[\u0027status\u0027] \u003d\u003d \u0027backing-up\u0027:"},{"line_number":203,"context_line":"                    LOG.info(_LI(\u0027Resetting volume %s to available \u0027"},{"line_number":204,"context_line":"                                 \u0027(was backing-up).\u0027) % volume[\u0027id\u0027])"},{"line_number":205,"context_line":"                    mgr \u003d self._get_manager(backend)"},{"line_number":206,"context_line":"                    for attachment in attachments:"},{"line_number":207,"context_line":"                        if (attachment[\u0027attached_host\u0027] \u003d\u003d self.host and"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_df540fc8","line":204,"in_reply_to":"3a961159_5ad59fb5","updated":"2015-01-15 16:23:58.000000000","message":"Done","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                                              attachment[\u0027id\u0027])"},{"line_number":211,"context_line":"                if volume[\u0027status\u0027] \u003d\u003d \u0027restoring-backup\u0027:"},{"line_number":212,"context_line":"                    LOG.info(_LI(\u0027setting volume %s to error_restoring \u0027"},{"line_number":213,"context_line":"                                 \u0027(was restoring-backup).\u0027) % volume[\u0027id\u0027])"},{"line_number":214,"context_line":"                    mgr \u003d self._get_manager(backend)"},{"line_number":215,"context_line":"                    for attachment in attachments:"},{"line_number":216,"context_line":"                        if (attachment[\u0027attached_host\u0027] \u003d\u003d self.host and"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_7ae41bac","line":213,"updated":"2015-01-05 07:07:17.000000000","message":"% -\u003e ,","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                                              attachment[\u0027id\u0027])"},{"line_number":211,"context_line":"                if volume[\u0027status\u0027] \u003d\u003d \u0027restoring-backup\u0027:"},{"line_number":212,"context_line":"                    LOG.info(_LI(\u0027setting volume %s to error_restoring \u0027"},{"line_number":213,"context_line":"                                 \u0027(was restoring-backup).\u0027) % volume[\u0027id\u0027])"},{"line_number":214,"context_line":"                    mgr \u003d self._get_manager(backend)"},{"line_number":215,"context_line":"                    for attachment in attachments:"},{"line_number":216,"context_line":"                        if (attachment[\u0027attached_host\u0027] \u003d\u003d self.host and"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_1f72177c","line":213,"in_reply_to":"3a961159_7ae41bac","updated":"2015-01-15 16:23:58.000000000","message":"Done","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f823e40f9d9db96492f3ed47285ff4a755a56b91","unresolved":false,"context_lines":[{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"@require_admin_context"},{"line_number":1038,"context_line":"def volume_attached(context, attachment_id, instance_uuid, host_name,"},{"line_number":1039,"context_line":"                    mountpoint, attach_mode\u003d\u0027rw\u0027):"},{"line_number":1040,"context_line":"    if instance_uuid and not uuidutils.is_uuid_like(instance_uuid):"},{"line_number":1041,"context_line":"        raise exception.InvalidUUID(uuid\u003dinstance_uuid)"},{"line_number":1042,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_bde07227","line":1039,"updated":"2015-01-20 19:00:44.000000000","message":"Without any docstrings either here or the DB API module, it\u0027s *really* confusing to try to understand why the volume_attached() and volume_detached() methods went from being SELECT queries for attached and detached volumes to SELECT *and* INSERT/UPDATE queries.\n\nWhy is this code doing data modification at all?","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f823e40f9d9db96492f3ed47285ff4a755a56b91","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"    session \u003d get_session()"},{"line_number":1221,"context_line":"    with session.begin():"},{"line_number":1222,"context_line":"        attachment_list \u003d volume_attachment_get_used_by_volume_id("},{"line_number":1223,"context_line":"            context, volume_id, session\u003dsession)"},{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"        remain_attachment \u003d False"},{"line_number":1226,"context_line":"        for attachment in attachment_list:"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_3da7220d","line":1223,"updated":"2015-01-20 19:00:44.000000000","message":"Why not call volume_attachment_get() and pass in the attachment_id? There\u0027s no need to iterate over all attachments below checking to see if attachment_id matches attachment[\u0027id\u0027], because attachment_id cannot be None (the database schema has the volume_attachment.id column as primary key and not nullable, so there\u0027s never a case of having a None attachment ID...","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ade835a9c4be7b5a31ccc9384ffc5b22b2105f0f","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"    session \u003d get_session()"},{"line_number":1221,"context_line":"    with session.begin():"},{"line_number":1222,"context_line":"        attachment_list \u003d volume_attachment_get_used_by_volume_id("},{"line_number":1223,"context_line":"            context, volume_id, session\u003dsession)"},{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"        remain_attachment \u003d False"},{"line_number":1226,"context_line":"        for attachment in attachment_list:"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a930d6b_fa19557a","line":1223,"in_reply_to":"3a961159_3da7220d","updated":"2015-01-21 05:28:12.000000000","message":"Done","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f823e40f9d9db96492f3ed47285ff4a755a56b91","unresolved":false,"context_lines":[{"line_number":1311,"context_line":"            filter_by(volume_id\u003dvolume_id).\\"},{"line_number":1312,"context_line":"            filter_by(attached_host\u003dhost).\\"},{"line_number":1313,"context_line":"            filter(models.VolumeAttachment.attach_status !\u003d \u0027detached\u0027).\\"},{"line_number":1314,"context_line":"            first()"},{"line_number":1315,"context_line":"        return result"},{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_7dbd2a03","line":1314,"updated":"2015-01-20 19:00:44.000000000","message":"Why is this first() and not all()?","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f823e40f9d9db96492f3ed47285ff4a755a56b91","unresolved":false,"context_lines":[{"line_number":1324,"context_line":"            filter_by(volume_id\u003dvolume_id).\\"},{"line_number":1325,"context_line":"            filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":1326,"context_line":"            filter(models.VolumeAttachment.attach_status !\u003d \u0027detached\u0027).\\"},{"line_number":1327,"context_line":"            first()"},{"line_number":1328,"context_line":"        return result"},{"line_number":1329,"context_line":""},{"line_number":1330,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_dd337ec2","line":1327,"updated":"2015-01-20 19:00:44.000000000","message":"Ditto.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b2d2487776f096de646108b0ecdc72037eb7c184","unresolved":false,"context_lines":[{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        volume_ref[\u0027status\u0027] \u003d \u0027in-use\u0027"},{"line_number":1060,"context_line":"        volume_ref[\u0027attach_status\u0027] \u003d \u0027attached\u0027"},{"line_number":1061,"context_line":"        volume_ref.save(session\u003dsession)"},{"line_number":1062,"context_line":"        return volume_ref"},{"line_number":1063,"context_line":""},{"line_number":1064,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a930d6b_24c0d6df","line":1061,"updated":"2015-01-22 19:59:27.000000000","message":"Not sure if you caught my comments from a previous patchset on this... but I\u0027m very much concerned with have a DB API method here (and the volume_detached() call below) that ostensibly is modifying the record that it is getting from the database... there\u0027s no docstring indication in the DB API base API or here that ndicates that the volume record is going to be changed in the database... at the very least, I\u0027d ask that a docstring be placed in the base DB API that very clearly explains that volume_attached() and volume_detached() *modifies* the volume information in backend storage.","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"fff66a9a3db18bf57dfe41756f737bbfc7c8cfb5","unresolved":false,"context_lines":[{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        volume_ref[\u0027status\u0027] \u003d \u0027in-use\u0027"},{"line_number":1060,"context_line":"        volume_ref[\u0027attach_status\u0027] \u003d \u0027attached\u0027"},{"line_number":1061,"context_line":"        volume_ref.save(session\u003dsession)"},{"line_number":1062,"context_line":"        return volume_ref"},{"line_number":1063,"context_line":""},{"line_number":1064,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a930d6b_58211efa","line":1061,"in_reply_to":"1a930d6b_24c0d6df","updated":"2015-01-23 16:36:17.000000000","message":"Done","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b2d2487776f096de646108b0ecdc72037eb7c184","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"    with session.begin():"},{"line_number":1222,"context_line":"        attachment \u003d volume_attachment_get(context, attachment_id,"},{"line_number":1223,"context_line":"                                           session\u003dsession)"},{"line_number":1224,"context_line":"        if attachment:"},{"line_number":1225,"context_line":"            now \u003d timeutils.utcnow()"},{"line_number":1226,"context_line":"            attachment[\u0027attach_status\u0027] \u003d \u0027detached\u0027"},{"line_number":1227,"context_line":"            attachment[\u0027detach_time\u0027] \u003d now"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a930d6b_a4abe61c","line":1224,"updated":"2015-01-22 19:59:27.000000000","message":"How can this be None?","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"fff66a9a3db18bf57dfe41756f737bbfc7c8cfb5","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"    with session.begin():"},{"line_number":1222,"context_line":"        attachment \u003d volume_attachment_get(context, attachment_id,"},{"line_number":1223,"context_line":"                                           session\u003dsession)"},{"line_number":1224,"context_line":"        if attachment:"},{"line_number":1225,"context_line":"            now \u003d timeutils.utcnow()"},{"line_number":1226,"context_line":"            attachment[\u0027attach_status\u0027] \u003d \u0027detached\u0027"},{"line_number":1227,"context_line":"            attachment[\u0027detach_time\u0027] \u003d now"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a930d6b_cf62cbd7","line":1224,"in_reply_to":"1a930d6b_a4abe61c","updated":"2015-01-23 16:36:17.000000000","message":"If there are no attachments.","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"}],"cinder/db/sqlalchemy/migrate_repo/versions/023_add_volume_attachment.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fef63165a67c8006ca4ff315e1452b86923a51c1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (C) 2013 eBay Inc."},{"line_number":4,"context_line":"# Copyright (C) 2013 OpenStack, LLC."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2Fyac%3D","line":3,"updated":"2014-04-27 16:16:37.000000000","message":"Should it be 2014?","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d2e19867717288db019686f1a06f3c9a63001cc4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (C) 2013 eBay Inc."},{"line_number":4,"context_line":"# Copyright (C) 2013 OpenStack, LLC."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FyR4%3D","line":3,"in_reply_to":"AAAAXX%2F%2Fyac%3D","updated":"2014-04-27 17:17:22.000000000","message":"Done","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fef63165a67c8006ca4ff315e1452b86923a51c1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (C) 2013 eBay Inc."},{"line_number":4,"context_line":"# Copyright (C) 2013 OpenStack, LLC."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2Fyak%3D","line":4,"updated":"2014-04-27 16:16:37.000000000","message":"I thought we don\u0027t need Copyright OpenStack any more.","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d2e19867717288db019686f1a06f3c9a63001cc4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (C) 2013 eBay Inc."},{"line_number":4,"context_line":"# Copyright (C) 2013 OpenStack, LLC."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FyR0%3D","line":4,"in_reply_to":"AAAAXX%2F%2Fyak%3D","updated":"2014-04-27 17:17:22.000000000","message":"Done","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":10973,"name":"Trump.Zhang","email":"zhangleiqiang@huawei.com","username":"trump.zhang"},"change_message_id":"c9fc2cc7182a8a324a2ee6b1779a4492ef61b58d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                      \u0027instance_uuid\u0027: volume.instance_uuid,"},{"line_number":77,"context_line":"                      \u0027mountpoint\u0027: volume.mountpoint,"},{"line_number":78,"context_line":"                      \u0027attach_time\u0027: volume.attach_time,"},{"line_number":79,"context_line":"                      \u0027attach_mode\u0027: \u0027rw\u0027,"},{"line_number":80,"context_line":"                      }"},{"line_number":81,"context_line":"            attachment.execute(values)"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_7c2167fa","line":79,"updated":"2014-05-14 09:10:08.000000000","message":"Here we must set the \"deleted\" as 0 explicitly, otherwise, when \"joinedload\" volume_attachment from volume we will get empty results, because the \"deleted\" here is NULL and the \"join\" condition during \"joinedload\" is \"deleted\u003d0\"\n\nIt affects the existing attached volumes before upgrading.\n\nOr we should set the \"default value\" for \"deleted\" column in volume_attachment table definition above.","commit_id":"09bf94fd3e31a1bb06cf5311ba67c530db82514e"},{"author":{"_account_id":10973,"name":"Trump.Zhang","email":"zhangleiqiang@huawei.com","username":"trump.zhang"},"change_message_id":"5265f629374f8478d7691d0d1ae80076ba5991c8","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        if not attachment.deleted_at:"},{"line_number":129,"context_line":"            volume_id \u003d attachment.volume_id"},{"line_number":130,"context_line":"            volumes.update().\\"},{"line_number":131,"context_line":"                where(volumes.c.volume_id \u003d\u003d volume_id).\\"},{"line_number":132,"context_line":"                values(mountpoint\u003dattachment.mountpoint,"},{"line_number":133,"context_line":"                       attached_host\u003dattachment.attached_host,"},{"line_number":134,"context_line":"                       attach_time\u003dattachment.attach_time,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_6e737bb1","line":131,"updated":"2014-05-13 09:03:50.000000000","message":"Should \"volumes.c.volume_id\" be \"volumes.c.id\" here ?","commit_id":"09bf94fd3e31a1bb06cf5311ba67c530db82514e"}],"cinder/db/sqlalchemy/migrate_repo/versions/023_sqlite_downgrade.sql":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8dc3de13fc5e9190fee273484bd4d858697a5555","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        volume_attachment.attach_time,"},{"line_number":70,"context_line":"        volume_attachment.instance_uuid,"},{"line_number":71,"context_line":"        volume_attachment.mountpoint"},{"line_number":72,"context_line":"    FROM volumes "},{"line_number":73,"context_line":"    LEFT OUTER JOIN volume_attachment"},{"line_number":74,"context_line":"    ON volumes.id\u003dvolume_attachment.volume_id;"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-sql","patch_set":4,"id":"AAAAXX%2F%2FyLg%3D","line":72,"updated":"2014-04-27 17:59:47.000000000","message":"Remove space","commit_id":"b156827ab61eaa9831a240091f3cb6c70fdba115"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f73e6a403e5041262fb66e46208b92294433e030","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        volume_attachment.attach_time,"},{"line_number":70,"context_line":"        volume_attachment.instance_uuid,"},{"line_number":71,"context_line":"        volume_attachment.mountpoint"},{"line_number":72,"context_line":"    FROM volumes "},{"line_number":73,"context_line":"    LEFT OUTER JOIN volume_attachment"},{"line_number":74,"context_line":"    ON volumes.id\u003dvolume_attachment.volume_id;"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-sql","patch_set":4,"id":"AAAAXX%2F%2FsWs%3D","line":72,"in_reply_to":"AAAAXX%2F%2FyLg%3D","updated":"2014-04-28 19:57:19.000000000","message":"Done","commit_id":"b156827ab61eaa9831a240091f3cb6c70fdba115"}],"cinder/db/sqlalchemy/migrate_repo/versions/035_add_volume_attachment.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"acc90dc67f8a451bd53a8851d0cf92099e2dc8a8","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        Column(\u0027attached_host\u0027, String(length\u003d255)),"},{"line_number":52,"context_line":"        Column(\u0027instance_uuid\u0027, String(length\u003d36)),"},{"line_number":53,"context_line":"        Column(\u0027mountpoint\u0027, String(length\u003d255)),"},{"line_number":54,"context_line":"        Column(\u0027attach_time\u0027, DateTime),"},{"line_number":55,"context_line":"        Column(\u0027detach_time\u0027, DateTime),"},{"line_number":56,"context_line":"        Column(\u0027attach_mode\u0027, String(length\u003d36)),"},{"line_number":57,"context_line":"        Column(\u0027attach_status\u0027, String(length\u003d255)),"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_37fc4872","line":54,"updated":"2014-12-19 11:21:06.000000000","message":"Looks good, but you\u0027ve got other column types in models definition","commit_id":"e1924817fbfb904445b3e1d3d5dd01319f950945"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"192943a0b7829790a56776341f38f54e51c12714","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        Column(\u0027attached_host\u0027, String(length\u003d255)),"},{"line_number":52,"context_line":"        Column(\u0027instance_uuid\u0027, String(length\u003d36)),"},{"line_number":53,"context_line":"        Column(\u0027mountpoint\u0027, String(length\u003d255)),"},{"line_number":54,"context_line":"        Column(\u0027attach_time\u0027, DateTime),"},{"line_number":55,"context_line":"        Column(\u0027detach_time\u0027, DateTime),"},{"line_number":56,"context_line":"        Column(\u0027attach_mode\u0027, String(length\u003d36)),"},{"line_number":57,"context_line":"        Column(\u0027attach_status\u0027, String(length\u003d255)),"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_c9b0bd8d","line":54,"in_reply_to":"3a961159_37fc4872","updated":"2014-12-19 20:45:16.000000000","message":"Thanks Ivan, I\u0027ll fix it in the model.","commit_id":"e1924817fbfb904445b3e1d3d5dd01319f950945"}],"cinder/db/sqlalchemy/migrate_repo/versions/037_add_volume_attachment.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# (c) Copyright 2012-2014 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_1aeb1779","line":1,"updated":"2015-01-05 07:07:17.000000000","message":"2015 now:)","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    try:"},{"line_number":62,"context_line":"        volume_attachment.create()"},{"line_number":63,"context_line":"    except Exception:"},{"line_number":64,"context_line":"        LOG.error(_(\"Table volume_attachment not created!\"))"},{"line_number":65,"context_line":"        raise"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    # now migrate existing volume attachment info into the"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_babbe373","line":64,"updated":"2015-01-05 07:07:17.000000000","message":"_LE","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    for attachment in attachments:"},{"line_number":125,"context_line":"        # we are going to lose data here for"},{"line_number":126,"context_line":"        # multiple attaches.  We\u0027ll migrate and the"},{"line_number":127,"context_line":"        # last update wins."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        if not attachment.deleted_at:"},{"line_number":130,"context_line":"            volume_id \u003d attachment.volume_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_1a7077db","line":127,"updated":"2015-01-05 07:07:17.000000000","message":"Not sure if it is worth going thru the loop here? Maybe just do it for the first attachment?","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    for attachment in attachments:"},{"line_number":125,"context_line":"        # we are going to lose data here for"},{"line_number":126,"context_line":"        # multiple attaches.  We\u0027ll migrate and the"},{"line_number":127,"context_line":"        # last update wins."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        if not attachment.deleted_at:"},{"line_number":130,"context_line":"            volume_id \u003d attachment.volume_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_df224f53","line":127,"in_reply_to":"3a961159_1a7077db","updated":"2015-01-15 16:23:58.000000000","message":"We have to downgrade all of the attachments here.  This is for all volumes.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        volume_attachment.drop()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    except Exception:"},{"line_number":142,"context_line":"        LOG.error(_(\"Dropping volume_attachment table failed.\"))"},{"line_number":143,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_5aaaff1a","line":142,"updated":"2015-01-05 07:07:17.000000000","message":"_LE","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        volume_attachment.drop()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    except Exception:"},{"line_number":142,"context_line":"        LOG.error(_(\"Dropping volume_attachment table failed.\"))"},{"line_number":143,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_7fea3bd9","line":142,"in_reply_to":"3a961159_5aaaff1a","updated":"2015-01-15 16:23:58.000000000","message":"Done","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"70a892fe3873c1883ca7b887ced13f886b3a121e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    try:"},{"line_number":62,"context_line":"        volume_attachment.create()"},{"line_number":63,"context_line":"    except Exception:"},{"line_number":64,"context_line":"        LOG.error(_(\"Table volume_attachment not created!\"))"},{"line_number":65,"context_line":"        raise"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    # now migrate existing volume attachment info into the"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_87fb957a","line":64,"updated":"2015-01-09 21:09:32.000000000","message":"_LE","commit_id":"d20afc787dbea225c1b2b7158560612b17d22083"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"3d2a283534487037c634266da1e8a0ca815f1a96","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    try:"},{"line_number":62,"context_line":"        volume_attachment.create()"},{"line_number":63,"context_line":"    except Exception:"},{"line_number":64,"context_line":"        LOG.error(_(\"Table volume_attachment not created!\"))"},{"line_number":65,"context_line":"        raise"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    # now migrate existing volume attachment info into the"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_a76fb1fb","line":64,"in_reply_to":"3a961159_87fb957a","updated":"2015-01-09 21:31:48.000000000","message":"Done","commit_id":"d20afc787dbea225c1b2b7158560612b17d22083"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"70a892fe3873c1883ca7b887ced13f886b3a121e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    for volume in volumes_list:"},{"line_number":71,"context_line":"        if volume.attach_status \u003d\u003d \u0027attached\u0027:"},{"line_number":72,"context_line":"            attachment \u003d volume_attachment.insert()"},{"line_number":73,"context_line":"            values \u003d {\u0027id\u0027: str(uuid.uuid4()),"},{"line_number":74,"context_line":"                      \u0027created_at\u0027: CREATED_AT,"},{"line_number":75,"context_line":"                      \u0027volume_id\u0027: volume.id,"},{"line_number":76,"context_line":"                      \u0027attached_host\u0027: volume.host,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_e7ca9945","line":73,"updated":"2015-01-09 21:09:32.000000000","message":"str() -\u003e six.text_type()","commit_id":"d20afc787dbea225c1b2b7158560612b17d22083"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"3d2a283534487037c634266da1e8a0ca815f1a96","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    for volume in volumes_list:"},{"line_number":71,"context_line":"        if volume.attach_status \u003d\u003d \u0027attached\u0027:"},{"line_number":72,"context_line":"            attachment \u003d volume_attachment.insert()"},{"line_number":73,"context_line":"            values \u003d {\u0027id\u0027: str(uuid.uuid4()),"},{"line_number":74,"context_line":"                      \u0027created_at\u0027: CREATED_AT,"},{"line_number":75,"context_line":"                      \u0027volume_id\u0027: volume.id,"},{"line_number":76,"context_line":"                      \u0027attached_host\u0027: volume.host,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_e770d9dc","line":73,"in_reply_to":"3a961159_e7ca9945","updated":"2015-01-09 21:31:48.000000000","message":"Done","commit_id":"d20afc787dbea225c1b2b7158560612b17d22083"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"b48238292a8cb29c25889bb8e619a2955731b41f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    volumes.drop_column(attached_host)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"def downgrade(migrate_engine):"},{"line_number":101,"context_line":"    \"\"\"Remove volume_attachment table.\"\"\""},{"line_number":102,"context_line":"    meta \u003d MetaData()"},{"line_number":103,"context_line":"    meta.bind \u003d migrate_engine"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a930d6b_82f1f596","line":100,"updated":"2015-01-27 13:24:54.000000000","message":"Would you see a lot of value added if we split up the DB migration into multiple migrations? I\u0027ve seen issues in the past where a migration may fail halfway but it\u0027s hard to know where it failed and the downgrade wouldn\u0027t handle it cleanly.","commit_id":"4b1d54acc12229cca02f435c87d84efe51c828d1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d04ed06de2217e2981bc4258cf1c3f190dff53cf","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    attach_time \u003d volumes.columns.attach_time"},{"line_number":95,"context_line":"    volumes.drop_column(attach_time)"},{"line_number":96,"context_line":"    attached_host \u003d volumes.columns.attached_host"},{"line_number":97,"context_line":"    volumes.drop_column(attached_host)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_450ee633","line":97,"updated":"2015-02-13 22:12:32.000000000","message":"Seems like this should be in a try: block.  Then is something goes wrong, do we log or warning?  Should at least do that because if the columns are let around and then the person tried to downgrade there are also going to be issues.  Just feel like we should do something to handle a failure here.","commit_id":"e7ff04298d1ae04150f42aa917c175cf3445fea3"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"872d8879667957085b579b745182f4ba285c5b8d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    attach_time \u003d volumes.columns.attach_time"},{"line_number":95,"context_line":"    volumes.drop_column(attach_time)"},{"line_number":96,"context_line":"    attached_host \u003d volumes.columns.attached_host"},{"line_number":97,"context_line":"    volumes.drop_column(attached_host)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_c5665629","line":97,"in_reply_to":"da86d52c_450ee633","updated":"2015-02-13 23:11:13.000000000","message":"Done","commit_id":"e7ff04298d1ae04150f42aa917c175cf3445fea3"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"7fb6a57714c77d04df9e506cbec3d561e0c427ff","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import datetime"},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"ba7be1f8_0fb2bb93","line":15,"updated":"2015-02-25 11:25:10.000000000","message":"Do we need to document anywhere that running this migration on a live system would be more than a little bit of a bad idea? i.e. not attaches / detaches can be happening while this runs...\n\nNot that most of our db migrations can currently be run on a live system, but with objectisation coming in, that will no longer be true. A objectisated adaptor for this would be... fun.\n\n1) Create the multi-attach column and set it to false. The code should not, at this point, care that the field is there. Or does it? It needs to set it to false for new volumes... can we use a default value in the db to take care of that?\n\n2) Create the new attachments table, then poke the code to update so that it noticed. Noticing can be done automagically, but there\u0027s probably a performance cost.\n\n3) All attaches and detaches (and status checks) would then have to do both the old columns in the volume table as well as the new table, in the same transaction. \n\n3) The copy over loop below would have to be altered not to overwrite an update from the cinder code... \n\n4) Once everything is copied over, then we can drop the columns in the volume table\n\n\nI *think* that should work, though I haven\u0027t tried it.\n\n\n\nI realise this comment is not entirely relevant to the change, particularly as volume table is not yet objectised, but it seemed worth thinking about / noting.","commit_id":"ef82bde3b5e34f320a450ee5b03251c8b0957a00"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bc1c547230e591137cad6d9f77e97b959bf70945","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    for attachment in attachments:"},{"line_number":129,"context_line":"        # we are going to lose data here for"},{"line_number":130,"context_line":"        # multiple attaches.  We\u0027ll migrate and the"},{"line_number":131,"context_line":"        # last update wins."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        if not attachment.deleted_at:"},{"line_number":134,"context_line":"            volume_id \u003d attachment.volume_id"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_8d612cd5","line":131,"updated":"2015-02-26 03:27:16.000000000","message":"So I get this, but I think we need to do something to make this REALLY clear and possibly consider forcing a disconnect or something somehow.  My concern is that although downgrades aren\u0027t exactly \"common\" that I know of this can cause a real mess I think if you have multiple connections active and you just flip the DB state on them but don\u0027t actually clean anything up.\n\nAgain, could be you thought of this and covered it and I just don\u0027t see it?  I don\u0027t have a suggestion off the top of my head for how to deal with it, maybe the answer is document VERY clearly that \"hey... don\u0027t downgrade if you have active attachments, or at least multiple active attachments\"","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"00effedc6efad514170ec6dbcaac4b73e4a7ccd8","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    for attachment in attachments:"},{"line_number":129,"context_line":"        # we are going to lose data here for"},{"line_number":130,"context_line":"        # multiple attaches.  We\u0027ll migrate and the"},{"line_number":131,"context_line":"        # last update wins."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        if not attachment.deleted_at:"},{"line_number":134,"context_line":"            volume_id \u003d attachment.volume_id"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_5d089728","line":131,"in_reply_to":"ba7be1f8_6e0e92e6","updated":"2015-02-26 22:09:33.000000000","message":"yeah... like I said in the comment; I don\u0027t have a great solution just wanted to point it out and note we\u0027re going to have to do something even if it\u0027s just documenting it.  Release notes and Docs","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cd5f64bf5b34ecd076d23ea96d53aafe4429469f","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    for attachment in attachments:"},{"line_number":129,"context_line":"        # we are going to lose data here for"},{"line_number":130,"context_line":"        # multiple attaches.  We\u0027ll migrate and the"},{"line_number":131,"context_line":"        # last update wins."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        if not attachment.deleted_at:"},{"line_number":134,"context_line":"            volume_id \u003d attachment.volume_id"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_6e0e92e6","line":131,"in_reply_to":"ba7be1f8_8d612cd5","updated":"2015-02-26 17:25:36.000000000","message":"I\u0027m open to suggestions here.   Single attaches should just work.   But what should we do when a volume is attached more than once?  \n\nI guess we could balk at the migration for volumes that are multiattached and raise an exception?  Force the admin to detach those?  But then how to we pick up where we left off with the downgrade?   I don\u0027t know how that would work.\nI suppose we could first look for any volumes that are multiattached and then list them and fail and do nothing?  Can we run a downgrade twice if the first pass does nothing?  How do you manually kick off a downgrade in that case?","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"}],"cinder/db/sqlalchemy/migrate_repo/versions/040_add_volume_attachment.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7693cbf17d810ac0de6b969295f94035ffeb67b2","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    volumes.create_column(attached_host)"},{"line_number":112,"context_line":"    volumes.update().values(attached_host\u003dNone).execute()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    attach_time \u003d Column(\u0027attach_time\u0027, String(length\u003d255))"},{"line_number":115,"context_line":"    volumes.create_column(attach_time)"},{"line_number":116,"context_line":"    volumes.update().values(attach_time\u003dNone).execute()"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"9a80dd14_19013706","line":114,"updated":"2015-03-06 22:58:28.000000000","message":"Looks a bit confusing. I know that we store attach time as String(255) now but comment for it would be a good if other patch will be","commit_id":"f6dc34eabfd1d48747d7ec111c7f6ba742c3b7d0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a422e06d34b1c6b8aa8af14376d5a5de2e0be53c","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        if not attachment.deleted_at:"},{"line_number":134,"context_line":"            volume_id \u003d attachment.volume_id"},{"line_number":135,"context_line":"            volumes.update().\\"},{"line_number":136,"context_line":"                where(volumes.c.volume_id \u003d\u003d volume_id).\\"},{"line_number":137,"context_line":"                values(mountpoint\u003dattachment.mountpoint,"},{"line_number":138,"context_line":"                       attached_host\u003dattachment.attached_host,"},{"line_number":139,"context_line":"                       attach_time\u003dattachment.attach_time,"}],"source_content_type":"text/x-python","patch_set":44,"id":"9a80dd14_ce850008","line":136,"updated":"2015-03-09 01:49:51.000000000","message":"I tested downgrade using this command \"cinder-manage db sync 39\". It should be \"volumes.c.id\" on the left hand side.  \"volumes.c.volume_id\" doesn\u0027t exist.","commit_id":"f6dc34eabfd1d48747d7ec111c7f6ba742c3b7d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a5bb67d8e82858d2febe35af9d7fd4b41ef0e398","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        if not attachment.deleted_at:"},{"line_number":134,"context_line":"            volume_id \u003d attachment.volume_id"},{"line_number":135,"context_line":"            volumes.update().\\"},{"line_number":136,"context_line":"                where(volumes.c.volume_id \u003d\u003d volume_id).\\"},{"line_number":137,"context_line":"                values(mountpoint\u003dattachment.mountpoint,"},{"line_number":138,"context_line":"                       attached_host\u003dattachment.attached_host,"},{"line_number":139,"context_line":"                       attach_time\u003dattachment.attach_time,"}],"source_content_type":"text/x-python","patch_set":44,"id":"9a80dd14_77a2134c","line":136,"in_reply_to":"9a80dd14_ce850008","updated":"2015-03-09 15:14:22.000000000","message":"Done","commit_id":"f6dc34eabfd1d48747d7ec111c7f6ba742c3b7d0"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"970996067f6b71f1ddc378dedf1766e466e7028a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        raise"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    # now migrate existing volume attachment info into the"},{"line_number":69,"context_line":"    # new volume_attachment table"},{"line_number":70,"context_line":"    volumes_list \u003d list(volumes.select().execute())"},{"line_number":71,"context_line":"    for volume in volumes_list:"},{"line_number":72,"context_line":"        if volume.attach_status \u003d\u003d \u0027attached\u0027:"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_7ad65c50","line":69,"updated":"2015-03-10 05:54:09.000000000","message":"Curious how well this was tested. Any test scenarios where this upgrade is happening, but there are attaches are in flight?\n\nI\u0027m a little concerned with this, because a large deployment could take a while here, and ideally, the object work is suppose to allow schema changes independent of services, so services could still be actively running and accepting detach changes.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        raise"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    # now migrate existing volume attachment info into the"},{"line_number":69,"context_line":"    # new volume_attachment table"},{"line_number":70,"context_line":"    volumes_list \u003d list(volumes.select().execute())"},{"line_number":71,"context_line":"    for volume in volumes_list:"},{"line_number":72,"context_line":"        if volume.attach_status \u003d\u003d \u0027attached\u0027:"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_90f75ad4","line":69,"in_reply_to":"9a80dd14_7ad65c50","updated":"2015-03-10 15:37:34.000000000","message":"We currently don\u0027t support upgrades of the cinder DB while the services are running afaik.   I think a LOT of upgrade scripts would fail in that scenario for a several reasons, so this one is no different.\n\nYes, this could take a while to migrate, but you can\u0027t have a partially migrated set of data and expect attaches/detaches to work correctly.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"}],"cinder/db/sqlalchemy/migrate_repo/versions/040_sqlite_downgrade.sql":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"aa5ec2ee31771a9e14df8a2c3845e88e24e7a689","unresolved":false,"context_lines":[{"line_number":1,"context_line":"BEGIN TRANSACTION;"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"CREATE TABLE volumes_v34 ("},{"line_number":4,"context_line":"    created_at DATETIME,"},{"line_number":5,"context_line":"    updated_at DATETIME,"},{"line_number":6,"context_line":"    deleted_at DATETIME,"}],"source_content_type":"text/x-sql","patch_set":46,"id":"9a80dd14_99431012","line":3,"updated":"2015-03-10 11:49:29.000000000","message":"Should be volumes_v39","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":1,"context_line":"BEGIN TRANSACTION;"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"CREATE TABLE volumes_v34 ("},{"line_number":4,"context_line":"    created_at DATETIME,"},{"line_number":5,"context_line":"    updated_at DATETIME,"},{"line_number":6,"context_line":"    deleted_at DATETIME,"}],"source_content_type":"text/x-sql","patch_set":46,"id":"9a80dd14_90ccba8c","line":3,"in_reply_to":"9a80dd14_99431012","updated":"2015-03-10 15:37:34.000000000","message":"Done","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"359e13b3eea0a83a893462bd4c24501f26804a20","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    PRIMARY KEY (id)"},{"line_number":41,"context_line":");"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"INSERT INTO volumes_v34"},{"line_number":44,"context_line":"    SELECT volumes.created_at,"},{"line_number":45,"context_line":"        volumes.updated_at,"},{"line_number":46,"context_line":"        volumes.deleted_at,"}],"source_content_type":"text/x-sql","patch_set":46,"id":"9a80dd14_19fd60b1","line":43,"updated":"2015-03-10 11:50:39.000000000","message":"volumes_v39","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    PRIMARY KEY (id)"},{"line_number":41,"context_line":");"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"INSERT INTO volumes_v34"},{"line_number":44,"context_line":"    SELECT volumes.created_at,"},{"line_number":45,"context_line":"        volumes.updated_at,"},{"line_number":46,"context_line":"        volumes.deleted_at,"}],"source_content_type":"text/x-sql","patch_set":46,"id":"9a80dd14_b0e29eff","line":43,"in_reply_to":"9a80dd14_19fd60b1","updated":"2015-03-10 15:37:34.000000000","message":"Done","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"aa5ec2ee31771a9e14df8a2c3845e88e24e7a689","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    ON volumes.id\u003dvolume_attachment.volume_id;"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"DROP TABLE volumes;"},{"line_number":85,"context_line":"ALTER TABLE volumes_v34 RENAME TO volumes;"},{"line_number":86,"context_line":"DROP TABLE volume_attachment;"},{"line_number":87,"context_line":"COMMIT;"}],"source_content_type":"text/x-sql","patch_set":46,"id":"9a80dd14_396144a9","line":85,"updated":"2015-03-10 11:49:29.000000000","message":"volumes_v39","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    ON volumes.id\u003dvolume_attachment.volume_id;"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"DROP TABLE volumes;"},{"line_number":85,"context_line":"ALTER TABLE volumes_v34 RENAME TO volumes;"},{"line_number":86,"context_line":"DROP TABLE volume_attachment;"},{"line_number":87,"context_line":"COMMIT;"}],"source_content_type":"text/x-sql","patch_set":46,"id":"9a80dd14_10b9aaec","line":85,"in_reply_to":"9a80dd14_396144a9","updated":"2015-03-10 15:37:34.000000000","message":"Done","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"}],"cinder/db/sqlalchemy/models.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"acc90dc67f8a451bd53a8851d0cf92099e2dc8a8","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    instance_uuid \u003d Column(String(36))"},{"line_number":207,"context_line":"    attached_host \u003d Column(String(255))"},{"line_number":208,"context_line":"    mountpoint \u003d Column(String(255))"},{"line_number":209,"context_line":"    attach_time \u003d Column(String(255))"},{"line_number":210,"context_line":"    detach_time \u003d Column(String(255))"},{"line_number":211,"context_line":"    attach_status \u003d Column(String(255))"},{"line_number":212,"context_line":"    attach_mode \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_17bd8cb7","line":209,"updated":"2014-12-19 11:21:06.000000000","message":"Why do you use string instead of time type? Anyway, 256 characters is to big value for timestamp","commit_id":"e1924817fbfb904445b3e1d3d5dd01319f950945"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"192943a0b7829790a56776341f38f54e51c12714","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    instance_uuid \u003d Column(String(36))"},{"line_number":207,"context_line":"    attached_host \u003d Column(String(255))"},{"line_number":208,"context_line":"    mountpoint \u003d Column(String(255))"},{"line_number":209,"context_line":"    attach_time \u003d Column(String(255))"},{"line_number":210,"context_line":"    detach_time \u003d Column(String(255))"},{"line_number":211,"context_line":"    attach_status \u003d Column(String(255))"},{"line_number":212,"context_line":"    attach_mode \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_e9ad7932","line":209,"in_reply_to":"3a961159_17bd8cb7","updated":"2014-12-19 20:45:16.000000000","message":"yah fixing.","commit_id":"e1924817fbfb904445b3e1d3d5dd01319f950945"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"b00a04184f70929ecc7f2bb40afc106f99019cc1","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    mountpoint \u003d Column(String(255))"},{"line_number":210,"context_line":"    attach_time \u003d Column(DateTime)"},{"line_number":211,"context_line":"    detach_time \u003d Column(DateTime)"},{"line_number":212,"context_line":"    attach_status \u003d Column(String(255))"},{"line_number":213,"context_line":"    attach_mode \u003d Column(String(255))"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_164d2372","line":212,"updated":"2015-01-19 10:04:02.000000000","message":"I think It might be helpful if you add comments telling what status the attach can have.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ade835a9c4be7b5a31ccc9384ffc5b22b2105f0f","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    mountpoint \u003d Column(String(255))"},{"line_number":210,"context_line":"    attach_time \u003d Column(DateTime)"},{"line_number":211,"context_line":"    detach_time \u003d Column(DateTime)"},{"line_number":212,"context_line":"    attach_status \u003d Column(String(255))"},{"line_number":213,"context_line":"    attach_mode \u003d Column(String(255))"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_49e998b6","line":212,"in_reply_to":"3a961159_164d2372","updated":"2015-01-21 05:28:12.000000000","message":"The attach_status can be exactly as it is today.  There is no changing of the values of attach_status.  It\u0027s simply being moved from the volume table to the volume_attachment table.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"d8d7c0024b7b71f1f9871d6190c6e653a9213a49","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    deleted \u003d Column(Boolean, default\u003dFalse)"},{"line_number":154,"context_line":"    bootable \u003d Column(Boolean, default\u003dFalse)"},{"line_number":155,"context_line":"    shareable \u003d Column(Boolean, default\u003dFalse)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    replication_status \u003d Column(String(255))"},{"line_number":158,"context_line":"    replication_extended_status \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_2a10bc00","line":155,"updated":"2015-01-22 12:54:58.000000000","message":"Maybe something like \u0027allow_multiattach\u0027 would be clearer, especially with all the talk about sharing volumes/snapshots between users?","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bc1c547230e591137cad6d9f77e97b959bf70945","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                          \u0027VolumeAdminMetadata.deleted \u003d\u003d False)\u0027)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"class VolumeAttachment(BASE, CinderBase):"},{"line_number":197,"context_line":"    \"\"\"Represents a volume attachment for a vm.\"\"\""},{"line_number":198,"context_line":"    __tablename__ \u003d \u0027volume_attachment\u0027"},{"line_number":199,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_8d33ecf4","line":196,"updated":"2015-02-26 03:27:16.000000000","message":"I\u0027d initially thought having a list in the existing attachment mostly for compat sake, but I kinda like this approach better I think.","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"}],"cinder/tests/api/contrib/test_admin_actions.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                                            stubs.FAKE_UUID, None,"},{"line_number":569,"context_line":"                                            mountpoint, \u0027rw\u0027)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        self.assertEqual(attachment[\u0027instance_uuid\u0027], stubs.FAKE_UUID)"},{"line_number":572,"context_line":"        self.assertEqual(attachment[\u0027volume_id\u0027], volume[\u0027id\u0027])"},{"line_number":573,"context_line":"        self.assertEqual(attachment[\u0027attached_host\u0027], \u0027test\u0027)"},{"line_number":574,"context_line":"        self.assertEqual(attachment[\u0027attach_status\u0027], \u0027attached\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_1a3eb7da","line":571,"updated":"2015-01-05 07:07:17.000000000","message":"The order of the parameters seem to be reversed. It should be expected, actual.\n\nself.assertEqual(stubs.FAKE_UUID, attachment[\u0027instance_uuid\u0027])\n\nSame with the 3 assertEqual calls below.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                                            stubs.FAKE_UUID, None,"},{"line_number":569,"context_line":"                                            mountpoint, \u0027rw\u0027)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        self.assertEqual(attachment[\u0027instance_uuid\u0027], stubs.FAKE_UUID)"},{"line_number":572,"context_line":"        self.assertEqual(attachment[\u0027volume_id\u0027], volume[\u0027id\u0027])"},{"line_number":573,"context_line":"        self.assertEqual(attachment[\u0027attached_host\u0027], \u0027test\u0027)"},{"line_number":574,"context_line":"        self.assertEqual(attachment[\u0027attach_status\u0027], \u0027attached\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_3f927357","line":571,"in_reply_to":"3a961159_1a3eb7da","updated":"2015-01-15 16:23:58.000000000","message":"Done","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"}],"cinder/tests/api/contrib/test_volume_actions.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        res \u003d req.get_response(fakes.wsgi_app())"},{"line_number":190,"context_line":"        self.assertEqual(res.status_int, 202)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def test_attach_with_invalid_arguments(self):"},{"line_number":193,"context_line":"        # Invalid request to attach volume an invalid target"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_5d34b9de","line":190,"updated":"2015-01-05 07:07:17.000000000","message":"self.assertEqual(202, res.status_int)","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        res \u003d req.get_response(fakes.wsgi_app())"},{"line_number":190,"context_line":"        self.assertEqual(res.status_int, 202)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def test_attach_with_invalid_arguments(self):"},{"line_number":193,"context_line":"        # Invalid request to attach volume an invalid target"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_7047c84c","line":190,"in_reply_to":"3a961159_5d34b9de","updated":"2015-01-15 16:23:58.000000000","message":"Done","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"}],"cinder/tests/test_db_api.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        volume \u003d db.volume_get(self.ctxt, volume[\u0027id\u0027])"},{"line_number":284,"context_line":"        attachment \u003d db.volume_attachment_get(self.ctxt, attachment[\u0027id\u0027])"},{"line_number":285,"context_line":"        self.assertEqual(volume[\u0027status\u0027], \u0027in-use\u0027)"},{"line_number":286,"context_line":"        self.assertEqual(attachment[\u0027mountpoint\u0027], \u0027/tmp\u0027)"},{"line_number":287,"context_line":"        self.assertEqual(attachment[\u0027attach_status\u0027], \u0027attached\u0027)"},{"line_number":288,"context_line":"        self.assertEqual(attachment[\u0027instance_uuid\u0027], instance_uuid)"},{"line_number":289,"context_line":"        self.assertIsNone(attachment[\u0027attached_host\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_7d6175d2","line":286,"updated":"2015-01-05 07:07:17.000000000","message":"The parameters are reversed here too.  Same with the other assertEqual calls.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        volume \u003d db.volume_get(self.ctxt, volume[\u0027id\u0027])"},{"line_number":284,"context_line":"        attachment \u003d db.volume_attachment_get(self.ctxt, attachment[\u0027id\u0027])"},{"line_number":285,"context_line":"        self.assertEqual(volume[\u0027status\u0027], \u0027in-use\u0027)"},{"line_number":286,"context_line":"        self.assertEqual(attachment[\u0027mountpoint\u0027], \u0027/tmp\u0027)"},{"line_number":287,"context_line":"        self.assertEqual(attachment[\u0027attach_status\u0027], \u0027attached\u0027)"},{"line_number":288,"context_line":"        self.assertEqual(attachment[\u0027instance_uuid\u0027], instance_uuid)"},{"line_number":289,"context_line":"        self.assertIsNone(attachment[\u0027attached_host\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_107e846a","line":286,"in_reply_to":"3a961159_7d6175d2","updated":"2015-01-15 16:23:58.000000000","message":"Done","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"}],"cinder/tests/test_hp3par.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8dc3de13fc5e9190fee273484bd4d858697a5555","unresolved":false,"context_lines":[{"line_number":995,"context_line":"             \u0027lun\u0027: 90, \u0027type\u0027: 0}]"},{"line_number":996,"context_line":"        mock_client.getPorts.return_value \u003d {"},{"line_number":997,"context_line":"            \u0027members\u0027: self.FAKE_FC_PORTS + [self.FAKE_ISCSI_PORT]}"},{"line_number":998,"context_line":"        location \u003d (\"%(volume_name)s,%(lun_id)s,%(host)s,%(nsp)s\" %"},{"line_number":999,"context_line":"                    {\u0027volume_name\u0027: self.VOLUME_3PAR_NAME,"},{"line_number":1000,"context_line":"                     \u0027lun_id\u0027: 90,"},{"line_number":1001,"context_line":"                     \u0027host\u0027: self.FAKE_HOST,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXX%2F%2FyL4%3D","line":998,"updated":"2014-04-27 17:59:47.000000000","message":"Please remove hp3par from this patch","commit_id":"b156827ab61eaa9831a240091f3cb6c70fdba115"}],"cinder/tests/test_migrations.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"372f8ccf28075d2ff29121e0f2a349f07ae5d57f","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"                                        metadata,"},{"line_number":1075,"context_line":"                                        autoload\u003dTrue)"},{"line_number":1076,"context_line":"            self.assertNotIn(\u0027disabled_reason\u0027, services.c)"},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"    def test_migration_023(self):"},{"line_number":1079,"context_line":"        \"\"\"Test that adding volume_attachment table works.\"\"\""},{"line_number":1080,"context_line":"        for (key, engine) in self.engines.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FzBI%3D","line":1077,"updated":"2014-04-27 06:39:03.000000000","message":"Please submit 3par changes separately","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"4438efbb8bb1f0457ccc6012d4c7301b636468ac","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"                                        metadata,"},{"line_number":1075,"context_line":"                                        autoload\u003dTrue)"},{"line_number":1076,"context_line":"            self.assertNotIn(\u0027disabled_reason\u0027, services.c)"},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"    def test_migration_023(self):"},{"line_number":1079,"context_line":"        \"\"\"Test that adding volume_attachment table works.\"\"\""},{"line_number":1080,"context_line":"        for (key, engine) in self.engines.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FyMI%3D","line":1077,"in_reply_to":"AAAAXX%2F%2Fybg%3D","updated":"2014-04-27 17:57:31.000000000","message":"Oops, this should have been in test_hp3par.py ... not sure how it got here...","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2361df31c0c3bc1825d2e762dec2f17096fa53d5","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"                                        metadata,"},{"line_number":1075,"context_line":"                                        autoload\u003dTrue)"},{"line_number":1076,"context_line":"            self.assertNotIn(\u0027disabled_reason\u0027, services.c)"},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"    def test_migration_023(self):"},{"line_number":1079,"context_line":"        \"\"\"Test that adding volume_attachment table works.\"\"\""},{"line_number":1080,"context_line":"        for (key, engine) in self.engines.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2Fybg%3D","line":1077,"in_reply_to":"AAAAXX%2F%2FzBI%3D","updated":"2014-04-27 15:19:59.000000000","message":"There aren\u0027t any 3par changes in here?","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1e290df9c34bafe02382c9da4f1d3fdd14613b6d","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        volume_types \u003d db_utils.get_table(engine, \u0027volume_types\u0027)"},{"line_number":705,"context_line":"        self.assertNotIn(\u0027description\u0027, volume_types.c)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    def _check_35(self, engine, data):"},{"line_number":708,"context_line":"        volumes \u003d db_utils.get_table(engine, \u0027volumes\u0027)"},{"line_number":709,"context_line":"        self.assertNotIn(\u0027instance_uuid\u0027, volumes.c)"},{"line_number":710,"context_line":"        self.assertNotIn(\u0027attached_host\u0027, volumes.c)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_9bda5476","line":707,"updated":"2014-12-22 18:42:02.000000000","message":"this needs to be _check_035","commit_id":"6c8c6f0552dc1b886c79a74464e1762e5bf45df9"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bb78dc5f6ee06fbeaf5dea4947d50d716bc748a8","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        volume_types \u003d db_utils.get_table(engine, \u0027volume_types\u0027)"},{"line_number":705,"context_line":"        self.assertNotIn(\u0027description\u0027, volume_types.c)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    def _check_35(self, engine, data):"},{"line_number":708,"context_line":"        volumes \u003d db_utils.get_table(engine, \u0027volumes\u0027)"},{"line_number":709,"context_line":"        self.assertNotIn(\u0027instance_uuid\u0027, volumes.c)"},{"line_number":710,"context_line":"        self.assertNotIn(\u0027attached_host\u0027, volumes.c)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_fb60b8a6","line":707,"in_reply_to":"3a961159_9bda5476","updated":"2014-12-22 19:06:33.000000000","message":"Done","commit_id":"6c8c6f0552dc1b886c79a74464e1762e5bf45df9"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1e290df9c34bafe02382c9da4f1d3fdd14613b6d","unresolved":false,"context_lines":[{"line_number":725,"context_line":"        self.assertIsInstance(attachments.attach_mode.type,"},{"line_number":726,"context_line":"                              sqlalchemy.types.VARCHAR)"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    def _post_downgrade_35(self, engine):"},{"line_number":729,"context_line":"        self.assertFalse(engine.dialect.has_table(engine.connect(),"},{"line_number":730,"context_line":"                                                  \"volume_attachment\"))"},{"line_number":731,"context_line":"        volumes \u003d db_utils.get_table(engine, \u0027volumes\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_dbe05c28","line":728,"updated":"2014-12-22 18:42:02.000000000","message":"ditto","commit_id":"6c8c6f0552dc1b886c79a74464e1762e5bf45df9"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bb78dc5f6ee06fbeaf5dea4947d50d716bc748a8","unresolved":false,"context_lines":[{"line_number":725,"context_line":"        self.assertIsInstance(attachments.attach_mode.type,"},{"line_number":726,"context_line":"                              sqlalchemy.types.VARCHAR)"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    def _post_downgrade_35(self, engine):"},{"line_number":729,"context_line":"        self.assertFalse(engine.dialect.has_table(engine.connect(),"},{"line_number":730,"context_line":"                                                  \"volume_attachment\"))"},{"line_number":731,"context_line":"        volumes \u003d db_utils.get_table(engine, \u0027volumes\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_1b64a4b7","line":728,"in_reply_to":"3a961159_dbe05c28","updated":"2014-12-22 19:06:33.000000000","message":"Done","commit_id":"6c8c6f0552dc1b886c79a74464e1762e5bf45df9"}],"cinder/tests/test_volume.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fef63165a67c8006ca4ff315e1452b86923a51c1","unresolved":false,"context_lines":[{"line_number":1561,"context_line":"        self.assertEqual(vol[\u0027attach_status\u0027], \"detached\")"},{"line_number":1562,"context_line":"        admin_metadata \u003d vol[\u0027volume_admin_metadata\u0027]"},{"line_number":1563,"context_line":"        for data in admin_metadata:"},{"line_number":1564,"context_line":"            print (vars(data))"},{"line_number":1565,"context_line":"        self.assertEqual(len(admin_metadata), 2)"},{"line_number":1566,"context_line":"        self.assertEqual(admin_metadata[0][\u0027key\u0027], \u0027readonly\u0027)"},{"line_number":1567,"context_line":"        self.assertEqual(admin_metadata[0][\u0027value\u0027], \u0027True\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FyYU%3D","line":1564,"updated":"2014-04-27 16:16:37.000000000","message":"Is this \"print\" added for debugging purpose?  Should it be removed now?","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d2e19867717288db019686f1a06f3c9a63001cc4","unresolved":false,"context_lines":[{"line_number":1561,"context_line":"        self.assertEqual(vol[\u0027attach_status\u0027], \"detached\")"},{"line_number":1562,"context_line":"        admin_metadata \u003d vol[\u0027volume_admin_metadata\u0027]"},{"line_number":1563,"context_line":"        for data in admin_metadata:"},{"line_number":1564,"context_line":"            print (vars(data))"},{"line_number":1565,"context_line":"        self.assertEqual(len(admin_metadata), 2)"},{"line_number":1566,"context_line":"        self.assertEqual(admin_metadata[0][\u0027key\u0027], \u0027readonly\u0027)"},{"line_number":1567,"context_line":"        self.assertEqual(admin_metadata[0][\u0027value\u0027], \u0027True\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FyTc%3D","line":1564,"in_reply_to":"AAAAXX%2F%2FyYU%3D","updated":"2014-04-27 17:17:22.000000000","message":"thanks.","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"                                               mountpoint, \u0027ro\u0027)"},{"line_number":1406,"context_line":"        vol \u003d db.volume_get(context.get_admin_context(), volume_id)"},{"line_number":1407,"context_line":"        self.assertEqual(vol[\u0027status\u0027], \"in-use\")"},{"line_number":1408,"context_line":"        self.assertEqual(attachment[\u0027attach_status\u0027], \"attached\")"},{"line_number":1409,"context_line":"        self.assertEqual(attachment[\u0027mountpoint\u0027], mountpoint)"},{"line_number":1410,"context_line":"        self.assertEqual(attachment[\u0027instance_uuid\u0027], instance_uuid)"},{"line_number":1411,"context_line":"        self.assertIsNone(attachment[\u0027attached_host\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_1da871da","line":1408,"updated":"2015-01-05 07:07:17.000000000","message":"reversed here too.  Same with the other assertEqual calls.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"                                               mountpoint, \u0027ro\u0027)"},{"line_number":1406,"context_line":"        vol \u003d db.volume_get(context.get_admin_context(), volume_id)"},{"line_number":1407,"context_line":"        self.assertEqual(vol[\u0027status\u0027], \"in-use\")"},{"line_number":1408,"context_line":"        self.assertEqual(attachment[\u0027attach_status\u0027], \"attached\")"},{"line_number":1409,"context_line":"        self.assertEqual(attachment[\u0027mountpoint\u0027], mountpoint)"},{"line_number":1410,"context_line":"        self.assertEqual(attachment[\u0027instance_uuid\u0027], instance_uuid)"},{"line_number":1411,"context_line":"        self.assertIsNone(attachment[\u0027attached_host\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_b05e90e7","line":1408,"in_reply_to":"3a961159_1da871da","updated":"2015-01-15 16:23:58.000000000","message":"Done","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c6cab07c544a0d9d33533012abb3e952dd7e32c2","unresolved":false,"context_lines":[{"line_number":1891,"context_line":"                                                mountpoint2, \u0027ro\u0027)"},{"line_number":1892,"context_line":"        vol \u003d db.volume_get(context.get_admin_context(), volume_id)"},{"line_number":1893,"context_line":"        self.assertEqual(\u0027in-use\u0027, vol[\u0027status\u0027])"},{"line_number":1894,"context_line":"        self.assertEqual(True, vol[\u0027multiattach\u0027])"},{"line_number":1895,"context_line":"        self.assertEqual(\u0027attached\u0027, attachment2[\u0027attach_status\u0027])"},{"line_number":1896,"context_line":"        self.assertEqual(mountpoint2, attachment2[\u0027mountpoint\u0027])"},{"line_number":1897,"context_line":"        self.assertEqual(instance2_uuid, attachment2[\u0027instance_uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_d0e9e4e6","line":1894,"updated":"2015-03-10 10:16:41.000000000","message":"Use assertTrue instead?","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":1891,"context_line":"                                                mountpoint2, \u0027ro\u0027)"},{"line_number":1892,"context_line":"        vol \u003d db.volume_get(context.get_admin_context(), volume_id)"},{"line_number":1893,"context_line":"        self.assertEqual(\u0027in-use\u0027, vol[\u0027status\u0027])"},{"line_number":1894,"context_line":"        self.assertEqual(True, vol[\u0027multiattach\u0027])"},{"line_number":1895,"context_line":"        self.assertEqual(\u0027attached\u0027, attachment2[\u0027attach_status\u0027])"},{"line_number":1896,"context_line":"        self.assertEqual(mountpoint2, attachment2[\u0027mountpoint\u0027])"},{"line_number":1897,"context_line":"        self.assertEqual(instance2_uuid, attachment2[\u0027instance_uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_d0ab9273","line":1894,"in_reply_to":"9a80dd14_d0e9e4e6","updated":"2015-03-10 15:37:34.000000000","message":"I think this is fine.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c6cab07c544a0d9d33533012abb3e952dd7e32c2","unresolved":false,"context_lines":[{"line_number":1937,"context_line":"                                               mountpoint, \u0027ro\u0027)"},{"line_number":1938,"context_line":"        vol \u003d db.volume_get(context.get_admin_context(), volume_id)"},{"line_number":1939,"context_line":"        self.assertEqual(\u0027in-use\u0027, vol[\u0027status\u0027])"},{"line_number":1940,"context_line":"        self.assertEqual(False, vol[\u0027multiattach\u0027])"},{"line_number":1941,"context_line":"        self.assertEqual(\u0027attached\u0027, attachment[\u0027attach_status\u0027])"},{"line_number":1942,"context_line":"        self.assertEqual(mountpoint, attachment[\u0027mountpoint\u0027])"},{"line_number":1943,"context_line":"        self.assertEqual(instance_uuid, attachment[\u0027instance_uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_70c03850","line":1940,"updated":"2015-03-10 10:16:41.000000000","message":"Use assertFalse instead?","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":1937,"context_line":"                                               mountpoint, \u0027ro\u0027)"},{"line_number":1938,"context_line":"        vol \u003d db.volume_get(context.get_admin_context(), volume_id)"},{"line_number":1939,"context_line":"        self.assertEqual(\u0027in-use\u0027, vol[\u0027status\u0027])"},{"line_number":1940,"context_line":"        self.assertEqual(False, vol[\u0027multiattach\u0027])"},{"line_number":1941,"context_line":"        self.assertEqual(\u0027attached\u0027, attachment[\u0027attach_status\u0027])"},{"line_number":1942,"context_line":"        self.assertEqual(mountpoint, attachment[\u0027mountpoint\u0027])"},{"line_number":1943,"context_line":"        self.assertEqual(instance_uuid, attachment[\u0027instance_uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_10b52ad0","line":1940,"in_reply_to":"9a80dd14_70c03850","updated":"2015-03-10 15:37:34.000000000","message":"I think this is fine.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c6cab07c544a0d9d33533012abb3e952dd7e32c2","unresolved":false,"context_lines":[{"line_number":1995,"context_line":"        self.assertEqual(mountpoint, attachment[\u0027mountpoint\u0027])"},{"line_number":1996,"context_line":"        self.assertIsNone(attachment[\u0027instance_uuid\u0027])"},{"line_number":1997,"context_line":"        # sanitized, conforms to RFC-952 and RFC-1123 specs."},{"line_number":1998,"context_line":"        self.assertEqual(attachment[\u0027attached_host\u0027], \u0027fake-host\u0027)"},{"line_number":1999,"context_line":"        admin_metadata \u003d vol[\u0027volume_admin_metadata\u0027]"},{"line_number":2000,"context_line":"        self.assertEqual(2, len(admin_metadata))"},{"line_number":2001,"context_line":"        expected \u003d dict(readonly\u003d\u0027False\u0027, attached_mode\u003d\u0027rw\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_10c7fc64","line":1998,"updated":"2015-03-10 10:16:41.000000000","message":"Swap the expected value and actual value?","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":1995,"context_line":"        self.assertEqual(mountpoint, attachment[\u0027mountpoint\u0027])"},{"line_number":1996,"context_line":"        self.assertIsNone(attachment[\u0027instance_uuid\u0027])"},{"line_number":1997,"context_line":"        # sanitized, conforms to RFC-952 and RFC-1123 specs."},{"line_number":1998,"context_line":"        self.assertEqual(attachment[\u0027attached_host\u0027], \u0027fake-host\u0027)"},{"line_number":1999,"context_line":"        admin_metadata \u003d vol[\u0027volume_admin_metadata\u0027]"},{"line_number":2000,"context_line":"        self.assertEqual(2, len(admin_metadata))"},{"line_number":2001,"context_line":"        expected \u003d dict(readonly\u003d\u0027False\u0027, attached_mode\u003d\u0027rw\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_b09e1e53","line":1998,"in_reply_to":"9a80dd14_10c7fc64","updated":"2015-03-10 15:37:34.000000000","message":"That only matters if you are comparing 2 dictionaries.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c6cab07c544a0d9d33533012abb3e952dd7e32c2","unresolved":false,"context_lines":[{"line_number":2037,"context_line":"                                               \u0027fake_host\u0027, mountpoint, \u0027rw\u0027)"},{"line_number":2038,"context_line":"        vol \u003d db.volume_get(context.get_admin_context(), volume_id)"},{"line_number":2039,"context_line":"        self.assertEqual(\u0027in-use\u0027, vol[\u0027status\u0027])"},{"line_number":2040,"context_line":"        self.assertEqual(True, vol[\u0027multiattach\u0027])"},{"line_number":2041,"context_line":"        self.assertEqual(\u0027attached\u0027, attachment[\u0027attach_status\u0027])"},{"line_number":2042,"context_line":"        self.assertEqual(mountpoint, attachment[\u0027mountpoint\u0027])"},{"line_number":2043,"context_line":"        self.assertIsNone(attachment[\u0027instance_uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_508b341e","line":2040,"updated":"2015-03-10 10:16:41.000000000","message":"Use assertTrue instead?","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":2037,"context_line":"                                               \u0027fake_host\u0027, mountpoint, \u0027rw\u0027)"},{"line_number":2038,"context_line":"        vol \u003d db.volume_get(context.get_admin_context(), volume_id)"},{"line_number":2039,"context_line":"        self.assertEqual(\u0027in-use\u0027, vol[\u0027status\u0027])"},{"line_number":2040,"context_line":"        self.assertEqual(True, vol[\u0027multiattach\u0027])"},{"line_number":2041,"context_line":"        self.assertEqual(\u0027attached\u0027, attachment[\u0027attach_status\u0027])"},{"line_number":2042,"context_line":"        self.assertEqual(mountpoint, attachment[\u0027mountpoint\u0027])"},{"line_number":2043,"context_line":"        self.assertIsNone(attachment[\u0027instance_uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_b0c53e3f","line":2040,"in_reply_to":"9a80dd14_508b341e","updated":"2015-03-10 15:37:34.000000000","message":"I think this is fine.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c6cab07c544a0d9d33533012abb3e952dd7e32c2","unresolved":false,"context_lines":[{"line_number":2073,"context_line":"                          volume_id)"},{"line_number":2074,"context_line":"        self.volume.detach_volume(self.context, volume_id, attachment[\u0027id\u0027])"},{"line_number":2075,"context_line":"        vol \u003d db.volume_get(self.context, volume_id)"},{"line_number":2076,"context_line":"        self.assertEqual(vol[\u0027status\u0027], \"in-use\")"},{"line_number":2077,"context_line":""},{"line_number":2078,"context_line":"        self.volume.detach_volume(self.context, volume_id, attachment2[\u0027id\u0027])"},{"line_number":2079,"context_line":"        vol \u003d db.volume_get(self.context, volume_id)"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_f0a0a891","line":2076,"updated":"2015-03-10 10:16:41.000000000","message":"Swap expected value and actual value?","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":2073,"context_line":"                          volume_id)"},{"line_number":2074,"context_line":"        self.volume.detach_volume(self.context, volume_id, attachment[\u0027id\u0027])"},{"line_number":2075,"context_line":"        vol \u003d db.volume_get(self.context, volume_id)"},{"line_number":2076,"context_line":"        self.assertEqual(vol[\u0027status\u0027], \"in-use\")"},{"line_number":2077,"context_line":""},{"line_number":2078,"context_line":"        self.volume.detach_volume(self.context, volume_id, attachment2[\u0027id\u0027])"},{"line_number":2079,"context_line":"        vol \u003d db.volume_get(self.context, volume_id)"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_30e14ed1","line":2076,"in_reply_to":"9a80dd14_f0a0a891","updated":"2015-03-10 15:37:34.000000000","message":"only matters if you are comparing 2 dictionaries, not strings.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c6cab07c544a0d9d33533012abb3e952dd7e32c2","unresolved":false,"context_lines":[{"line_number":2077,"context_line":""},{"line_number":2078,"context_line":"        self.volume.detach_volume(self.context, volume_id, attachment2[\u0027id\u0027])"},{"line_number":2079,"context_line":"        vol \u003d db.volume_get(self.context, volume_id)"},{"line_number":2080,"context_line":"        self.assertEqual(vol[\u0027status\u0027], \"available\")"},{"line_number":2081,"context_line":""},{"line_number":2082,"context_line":"        self.volume.delete_volume(self.context, volume_id)"},{"line_number":2083,"context_line":"        self.assertRaises(exception.VolumeNotFound,"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_10ac5c8b","line":2080,"updated":"2015-03-10 10:16:41.000000000","message":"Swap expected value and actual value?","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c6cab07c544a0d9d33533012abb3e952dd7e32c2","unresolved":false,"context_lines":[{"line_number":2099,"context_line":"                                               \u0027fake_host\u0027, mountpoint, \u0027rw\u0027)"},{"line_number":2100,"context_line":"        vol \u003d db.volume_get(context.get_admin_context(), volume_id)"},{"line_number":2101,"context_line":"        self.assertEqual(\u0027in-use\u0027, vol[\u0027status\u0027])"},{"line_number":2102,"context_line":"        self.assertEqual(False, vol[\u0027multiattach\u0027])"},{"line_number":2103,"context_line":"        self.assertEqual(\u0027attached\u0027, attachment[\u0027attach_status\u0027])"},{"line_number":2104,"context_line":"        self.assertEqual(mountpoint, attachment[\u0027mountpoint\u0027])"},{"line_number":2105,"context_line":"        self.assertIsNone(attachment[\u0027instance_uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_16e454aa","line":2102,"updated":"2015-03-10 10:16:41.000000000","message":"Use assertFalse?","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c6cab07c544a0d9d33533012abb3e952dd7e32c2","unresolved":false,"context_lines":[{"line_number":4423,"context_line":"                                         self.image_meta)"},{"line_number":4424,"context_line":""},{"line_number":4425,"context_line":"        volume \u003d db.volume_get(self.context, self.volume_id)"},{"line_number":4426,"context_line":"        self.assertEqual(volume[\u0027status\u0027], \u0027available\u0027)"},{"line_number":4427,"context_line":""},{"line_number":4428,"context_line":"    def test_copy_volume_to_image_exception(self):"},{"line_number":4429,"context_line":"        self.image_meta[\u0027id\u0027] \u003d FAKE_UUID"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_cd0eaf3a","line":4426,"updated":"2015-03-10 10:16:41.000000000","message":"Swap the expected value and actual value?","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"}],"cinder/volume/api.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"372f8ccf28075d2ff29121e0f2a349f07ae5d57f","unresolved":false,"context_lines":[{"line_number":349,"context_line":"    def check_attach(self, volume):"},{"line_number":350,"context_line":"        # TODO(vish): abstract status checking?"},{"line_number":351,"context_line":"        # TODO(walter-boring) I don\u0027t think this code"},{"line_number":352,"context_line":"        # is used anywhere???? remove??"},{"line_number":353,"context_line":"        if (volume[\u0027status\u0027] !\u003d \"available\" or"},{"line_number":354,"context_line":"           volume[\u0027status\u0027] !\u003d \"in-use\"):"},{"line_number":355,"context_line":"            msg \u003d _(\"status must be available or in-use\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2Fy7A%3D","line":352,"updated":"2014-04-27 06:39:03.000000000","message":"If it\u0027s really not used, remove.  But it seems the behavior of the new code you have here is different than the original.","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2361df31c0c3bc1825d2e762dec2f17096fa53d5","unresolved":false,"context_lines":[{"line_number":349,"context_line":"    def check_attach(self, volume):"},{"line_number":350,"context_line":"        # TODO(vish): abstract status checking?"},{"line_number":351,"context_line":"        # TODO(walter-boring) I don\u0027t think this code"},{"line_number":352,"context_line":"        # is used anywhere???? remove??"},{"line_number":353,"context_line":"        if (volume[\u0027status\u0027] !\u003d \"available\" or"},{"line_number":354,"context_line":"           volume[\u0027status\u0027] !\u003d \"in-use\"):"},{"line_number":355,"context_line":"            msg \u003d _(\"status must be available or in-use\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2Fybc%3D","line":352,"in_reply_to":"AAAAXX%2F%2Fy7A%3D","updated":"2014-04-27 15:19:59.000000000","message":"I\u0027m pretty sure this isn\u0027t used anywhere.  I just wanted others to give their feedback in the review.  I\u0027m ok with removing it.","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d2e19867717288db019686f1a06f3c9a63001cc4","unresolved":false,"context_lines":[{"line_number":349,"context_line":"    def check_attach(self, volume):"},{"line_number":350,"context_line":"        # TODO(vish): abstract status checking?"},{"line_number":351,"context_line":"        # TODO(walter-boring) I don\u0027t think this code"},{"line_number":352,"context_line":"        # is used anywhere???? remove??"},{"line_number":353,"context_line":"        if (volume[\u0027status\u0027] !\u003d \"available\" or"},{"line_number":354,"context_line":"           volume[\u0027status\u0027] !\u003d \"in-use\"):"},{"line_number":355,"context_line":"            msg \u003d _(\"status must be available or in-use\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FyQ4%3D","line":352,"in_reply_to":"AAAAXX%2F%2Fybc%3D","updated":"2014-04-27 17:17:22.000000000","message":"Done","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"372f8ccf28075d2ff29121e0f2a349f07ae5d57f","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        #explicitly get updated ref and check"},{"line_number":369,"context_line":"        volume \u003d self.db.volume_get(context, volume[\u0027id\u0027])"},{"line_number":370,"context_line":"        if (volume[\u0027status\u0027] \u003d\u003d \u0027available\u0027 or"},{"line_number":371,"context_line":"           volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027):"},{"line_number":372,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":373,"context_line":"        else:"},{"line_number":374,"context_line":"            msg \u003d _(\"Volume status must be available to reserve\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2Fy64%3D","line":371,"updated":"2014-04-27 06:39:03.000000000","message":"i think it should be an error if the volume is in-use but not share-able?","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2361df31c0c3bc1825d2e762dec2f17096fa53d5","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        #explicitly get updated ref and check"},{"line_number":369,"context_line":"        volume \u003d self.db.volume_get(context, volume[\u0027id\u0027])"},{"line_number":370,"context_line":"        if (volume[\u0027status\u0027] \u003d\u003d \u0027available\u0027 or"},{"line_number":371,"context_line":"           volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027):"},{"line_number":372,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":373,"context_line":"        else:"},{"line_number":374,"context_line":"            msg \u003d _(\"Volume status must be available to reserve\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FybQ%3D","line":371,"in_reply_to":"AAAAXX%2F%2Fy64%3D","updated":"2014-04-27 15:19:59.000000000","message":"I\u0027ll add that check.","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d2e19867717288db019686f1a06f3c9a63001cc4","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        #explicitly get updated ref and check"},{"line_number":369,"context_line":"        volume \u003d self.db.volume_get(context, volume[\u0027id\u0027])"},{"line_number":370,"context_line":"        if (volume[\u0027status\u0027] \u003d\u003d \u0027available\u0027 or"},{"line_number":371,"context_line":"           volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027):"},{"line_number":372,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":373,"context_line":"        else:"},{"line_number":374,"context_line":"            msg \u003d _(\"Volume status must be available to reserve\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FyQ8%3D","line":371,"in_reply_to":"AAAAXX%2F%2FybQ%3D","updated":"2014-04-27 17:17:22.000000000","message":"Done","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        #NOTE(jdg): check for Race condition bug 1096983"},{"line_number":443,"context_line":"        #explicitly get updated ref and check"},{"line_number":444,"context_line":"        volume \u003d self.db.volume_get(context, volume[\u0027id\u0027])"},{"line_number":445,"context_line":"        if (volume[\u0027status\u0027] \u003d\u003d \u0027available\u0027):"},{"line_number":446,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":447,"context_line":"        elif volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027:"},{"line_number":448,"context_line":"            if volume[\u0027shareable\u0027]:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_3a3e132a","line":445,"updated":"2015-01-05 07:07:17.000000000","message":"Seems that () is not needed here.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        #NOTE(jdg): check for Race condition bug 1096983"},{"line_number":443,"context_line":"        #explicitly get updated ref and check"},{"line_number":444,"context_line":"        volume \u003d self.db.volume_get(context, volume[\u0027id\u0027])"},{"line_number":445,"context_line":"        if (volume[\u0027status\u0027] \u003d\u003d \u0027available\u0027):"},{"line_number":446,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":447,"context_line":"        elif volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027:"},{"line_number":448,"context_line":"            if volume[\u0027shareable\u0027]:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_0bcc99ba","line":445,"in_reply_to":"3a961159_3a3e132a","updated":"2015-01-15 16:23:58.000000000","message":"Done","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"9d53c8b1e346d9d244b53f28148aff2e30eb72b3","unresolved":false,"context_lines":[{"line_number":446,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":447,"context_line":"        elif volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027:"},{"line_number":448,"context_line":"            if volume[\u0027shareable\u0027]:"},{"line_number":449,"context_line":"                self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":450,"context_line":"            else:"},{"line_number":451,"context_line":"                msg \u003d _(\"Volume status must be shareable to reserve again.\")"},{"line_number":452,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_82da4ae7","line":449,"updated":"2015-01-03 16:41:32.000000000","message":"I\u0027d like to see a new status like status\u003d\u0027additional_attachment\u0027\n\nWell... that\u0027s probably not a good choice, but something to indicate that the volume is attached somewhere already and being attached again.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":446,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":447,"context_line":"        elif volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027:"},{"line_number":448,"context_line":"            if volume[\u0027shareable\u0027]:"},{"line_number":449,"context_line":"                self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":450,"context_line":"            else:"},{"line_number":451,"context_line":"                msg \u003d _(\"Volume status must be shareable to reserve again.\")"},{"line_number":452,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_ebc66d9b","line":449,"in_reply_to":"3a961159_82da4ae7","updated":"2015-01-15 16:23:58.000000000","message":"I\u0027m not sure what the value of adding yet another attaching status is here.  As far as I know only nova is really using this api call to try and ensure it can do the initialize_connection call later, effectively locking this volume out from other actions that tests against \u0027attaching\u0027.   We would have to go throughout everywhere else and test for attaching or \u0027additional_attaching\u0027.  \n\nThe caller can find out if the volume is attached already by the attachments that exist in the volume ref when they fetch the volume, prior to calling reserve_volume.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"9d53c8b1e346d9d244b53f28148aff2e30eb72b3","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                                                mode)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    @wrap_check_policy"},{"line_number":521,"context_line":"    def detach(self, context, volume, attachment_id):"},{"line_number":522,"context_line":"        return self.volume_rpcapi.detach_volume(context, volume,"},{"line_number":523,"context_line":"                                                attachment_id)"},{"line_number":524,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_02c73a13","line":521,"updated":"2015-01-03 16:41:32.000000000","message":"How about setting a deault atachment_id of \"all\" here, that way we don\u0027t disrupt any existing behaviors, and we offer an easy way to detach all current attaches.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                                                mode)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    @wrap_check_policy"},{"line_number":521,"context_line":"    def detach(self, context, volume, attachment_id):"},{"line_number":522,"context_line":"        return self.volume_rpcapi.detach_volume(context, volume,"},{"line_number":523,"context_line":"                                                attachment_id)"},{"line_number":524,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_0b7019a3","line":521,"in_reply_to":"3a961159_02c73a13","updated":"2015-01-15 16:23:58.000000000","message":"I believe I currently have a default set to None elsewhere, which then throws an exception saying it needs an attachment_id for a volume that\u0027s attached more than once.   I wasn\u0027t sure what the \u0027best\u0027 thing to do with respect to that.   I can change the behavior to detach ALL by default if you think that\u0027s best.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"d8d7c0024b7b71f1f9871d6190c6e653a9213a49","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                LOG.error(msg)"},{"line_number":453,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":454,"context_line":"        else:"},{"line_number":455,"context_line":"            msg \u003d _(\"Volume status must be available to reserve\")"},{"line_number":456,"context_line":"            LOG.error(msg)"},{"line_number":457,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":458,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_ea2b14e9","line":455,"updated":"2015-01-22 12:54:58.000000000","message":"Or in-use and shareable\n\nwhy not this:\n if available or (in-use and shareable):\n     set attaching\n else:\n     error - cannot attach in current state %s % volume[\u0027status\u0027]","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"d8d7c0024b7b71f1f9871d6190c6e653a9213a49","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    @wrap_check_policy"},{"line_number":496,"context_line":"    def attach(self, context, volume, instance_uuid, host_name,"},{"line_number":497,"context_line":"               mountpoint, mode):"},{"line_number":498,"context_line":"        if not host_name:"},{"line_number":499,"context_line":"            host_name \u003d volume[\u0027host\u0027]"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"        volume_metadata \u003d self.get_volume_admin_metadata(context.elevated(),"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_0a66a051","line":498,"updated":"2015-01-22 12:54:58.000000000","message":"Where did this come from?  Is this for multi-attach, or a bug fix?","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bc1c547230e591137cad6d9f77e97b959bf70945","unresolved":false,"context_lines":[{"line_number":155,"context_line":"               availability_zone\u003dNone, source_volume\u003dNone,"},{"line_number":156,"context_line":"               scheduler_hints\u003dNone,"},{"line_number":157,"context_line":"               source_replica\u003dNone, consistencygroup\u003dNone,"},{"line_number":158,"context_line":"               multiattach\u003dFalse):"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # NOTE(jdg): we can have a create without size if we\u0027re"},{"line_number":161,"context_line":"        # doing a create from snap or volume.  Currently"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_d2349ffd","line":158,"updated":"2015-02-26 03:27:16.000000000","message":"Any reason we have to include it in the create call as an option?  Seems like there\u0027s no reason this is something that has to be known/decided ahead of time.  I know we talked about this at one point to be explicit about file-systems etc, but thinking about it I\u0027m pretty sure one of the first requests/complaints we\u0027ll hear is \"why can\u0027t I make it multi-attach after the fact\".\n\nScheduler doesn\u0027t do anything here, so placement doesn\u0027t matter; and what\u0027s worse is that you can specify it and have it be set but it won\u0027t \"do\" anything.  At least if we made it a separate call we could check and make sure it\u0027s functional/implemented.\n\nIf I\u0027m missing something let me know.","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"018828c00b90c1bb69b37a15c2e8c6e83e930c54","unresolved":false,"context_lines":[{"line_number":155,"context_line":"               availability_zone\u003dNone, source_volume\u003dNone,"},{"line_number":156,"context_line":"               scheduler_hints\u003dNone,"},{"line_number":157,"context_line":"               source_replica\u003dNone, consistencygroup\u003dNone,"},{"line_number":158,"context_line":"               multiattach\u003dFalse):"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # NOTE(jdg): we can have a create without size if we\u0027re"},{"line_number":161,"context_line":"        # doing a create from snap or volume.  Currently"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_007e85e4","line":158,"in_reply_to":"ba7be1f8_5dc977ab","updated":"2015-02-27 19:46:52.000000000","message":"it\u0027s a bit of a grey area I think.   bootable flag is similar.  You can set it on a volume, but it doesn\u0027t do anything really.     I have a follow up patch to this one that adds filtering to the scheduler based on the multiattach flag and driver capability reporting.  \n\nhttps://review.openstack.org/#/c/159650/","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"00effedc6efad514170ec6dbcaac4b73e4a7ccd8","unresolved":false,"context_lines":[{"line_number":155,"context_line":"               availability_zone\u003dNone, source_volume\u003dNone,"},{"line_number":156,"context_line":"               scheduler_hints\u003dNone,"},{"line_number":157,"context_line":"               source_replica\u003dNone, consistencygroup\u003dNone,"},{"line_number":158,"context_line":"               multiattach\u003dFalse):"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # NOTE(jdg): we can have a create without size if we\u0027re"},{"line_number":161,"context_line":"        # doing a create from snap or volume.  Currently"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_5dc977ab","line":158,"in_reply_to":"ba7be1f8_aefa4a72","updated":"2015-02-26 22:09:33.000000000","message":"Fair argument, but the fact remains; there\u0027s a create argument that really doesn\u0027t \"mean\" anything.  It sets a flag in the DB but it doesn\u0027t mean multi-attach will work.  See my middle sentence above about \"won\u0027t do anything\"\n\nIf it\u0027s going to be a capability (which I think it should) then we need to make it a capability.  Just make that a dependent patch no?","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cd5f64bf5b34ecd076d23ea96d53aafe4429469f","unresolved":false,"context_lines":[{"line_number":155,"context_line":"               availability_zone\u003dNone, source_volume\u003dNone,"},{"line_number":156,"context_line":"               scheduler_hints\u003dNone,"},{"line_number":157,"context_line":"               source_replica\u003dNone, consistencygroup\u003dNone,"},{"line_number":158,"context_line":"               multiattach\u003dFalse):"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # NOTE(jdg): we can have a create without size if we\u0027re"},{"line_number":161,"context_line":"        # doing a create from snap or volume.  Currently"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_aefa4a72","line":158,"in_reply_to":"ba7be1f8_d2349ffd","updated":"2015-02-26 17:25:36.000000000","message":"After working through the suggestions from Duncan, having the flag here at create time makes a lot more sense.  I have a follow up patch that I\u0027m going to add to this:\n\nhttps://gist.github.com/WaltHP/583e6d937f8a15cf4433\n\nIt basically injects the testing of the multiattach to extra specs, so that the scheduler can make sure the backend can handle it.   Some backends don\u0027t support multiattach, and by default will be set to False.   We\u0027ll add a follow up patch to add the multiattach: True/False to driver capabilities, so the scheduler can filter based on it.\n\nAlso, The plan was to add a follow up patch later that allows users/admins to set/change the multiattach flag, post create.","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bc1c547230e591137cad6d9f77e97b959bf70945","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":469,"context_line":"        elif volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027:"},{"line_number":470,"context_line":"            if volume[\u0027multiattach\u0027]:"},{"line_number":471,"context_line":"                self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":472,"context_line":"            else:"},{"line_number":473,"context_line":"                msg \u003d _(\"Volume status must be multiattach to reserve again.\")"},{"line_number":474,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_cd024409","line":471,"updated":"2015-02-26 03:27:16.000000000","message":"I think we\u0027re going to need something different here.  Changing the status from in-use back to attaching and then in-use again isn\u0027t very helpful IMHO.\n\nI\u0027d suggest (as awful as it sounds) a new status like \"multi-attaching\" that went to \"mutli-attached\"; or something like that that so it was pretty clear and explicit.","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"00effedc6efad514170ec6dbcaac4b73e4a7ccd8","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":469,"context_line":"        elif volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027:"},{"line_number":470,"context_line":"            if volume[\u0027multiattach\u0027]:"},{"line_number":471,"context_line":"                self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":472,"context_line":"            else:"},{"line_number":473,"context_line":"                msg \u003d _(\"Volume status must be multiattach to reserve again.\")"},{"line_number":474,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_5d6df7cb","line":471,"in_reply_to":"ba7be1f8_0e71960b","updated":"2015-02-26 22:09:33.000000000","message":"Hmm... yeah, that\u0027s a valid point.  And I forget, do we have some way of showing that the volume is multi-attached?","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"018828c00b90c1bb69b37a15c2e8c6e83e930c54","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":469,"context_line":"        elif volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027:"},{"line_number":470,"context_line":"            if volume[\u0027multiattach\u0027]:"},{"line_number":471,"context_line":"                self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":472,"context_line":"            else:"},{"line_number":473,"context_line":"                msg \u003d _(\"Volume status must be multiattach to reserve again.\")"},{"line_number":474,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_40031d73","line":471,"in_reply_to":"ba7be1f8_5d6df7cb","updated":"2015-02-27 19:46:52.000000000","message":"yah, the cinder client shows all of the attachments from the shell.   Gary Smith has a patch for horizon that allows horizon to do multiple attachments if the multiattach flag is set.  The horizon patch also shows all of the attachments in the volumes view as well.","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cd5f64bf5b34ecd076d23ea96d53aafe4429469f","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":469,"context_line":"        elif volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027:"},{"line_number":470,"context_line":"            if volume[\u0027multiattach\u0027]:"},{"line_number":471,"context_line":"                self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":472,"context_line":"            else:"},{"line_number":473,"context_line":"                msg \u003d _(\"Volume status must be multiattach to reserve again.\")"},{"line_number":474,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba7be1f8_0e71960b","line":471,"in_reply_to":"ba7be1f8_cd024409","updated":"2015-02-26 17:25:36.000000000","message":"So, we can, but this approach is backwards compatible with Nova.   I\u0027m not sure what the actual issue is.  The volume is in attaching state, regardless of the nth attach or not.","commit_id":"0fed2e7db41e49b2badbd5e08203fcac2aa70126"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"0eae429e13eb9be5baeb3d8e8fd65b9aaa2cbf2f","unresolved":false,"context_lines":[{"line_number":533,"context_line":"    def attach(self, context, volume, instance_uuid, host_name,"},{"line_number":534,"context_line":"               mountpoint, mode):"},{"line_number":535,"context_line":"        if not host_name:"},{"line_number":536,"context_line":"            host_name \u003d volume[\u0027host\u0027]"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        volume_metadata \u003d self.get_volume_admin_metadata(context.elevated(),"},{"line_number":539,"context_line":"                                                         volume)"}],"source_content_type":"text/x-python","patch_set":45,"id":"9a80dd14_baf1cb6c","line":536,"updated":"2015-03-09 17:34:06.000000000","message":"So I set this here to provide a value for the host, since the cinderclient NEVER passes in host_name in the attach call.   I\u0027ll remove this, so that the existing behavior happens.  this means the attached_host will always be None again.","commit_id":"7f52890c4f1cd38fcbe022fed2a9a0d66b0e8927"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c6cab07c544a0d9d33533012abb3e952dd7e32c2","unresolved":false,"context_lines":[{"line_number":485,"context_line":"            if volume[\u0027multiattach\u0027]:"},{"line_number":486,"context_line":"                self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":487,"context_line":"            else:"},{"line_number":488,"context_line":"                msg \u003d _(\"Volume status must be multiattach to reserve again.\")"},{"line_number":489,"context_line":"                LOG.error(msg)"},{"line_number":490,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":491,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_d679dcc8","line":488,"updated":"2015-03-10 10:16:41.000000000","message":"It would be more helpful if you add details such as which volume and which status triggered the error.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":485,"context_line":"            if volume[\u0027multiattach\u0027]:"},{"line_number":486,"context_line":"                self.update(context, volume, {\"status\": \"attaching\"})"},{"line_number":487,"context_line":"            else:"},{"line_number":488,"context_line":"                msg \u003d _(\"Volume status must be multiattach to reserve again.\")"},{"line_number":489,"context_line":"                LOG.error(msg)"},{"line_number":490,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":491,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_5ba42308","line":488,"in_reply_to":"9a80dd14_d679dcc8","updated":"2015-03-10 15:37:34.000000000","message":"We don\u0027t log the volume id here for the other exceptions that already exist.  the volume id is in the logging anyway.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"970996067f6b71f1ddc378dedf1766e466e7028a","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @wrap_check_policy"},{"line_number":555,"context_line":"    def detach(self, context, volume, attachment_id):"},{"line_number":556,"context_line":"        return self.volume_rpcapi.detach_volume(context, volume,"},{"line_number":557,"context_line":"                                                attachment_id)"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    @wrap_check_policy"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_0787cdb5","line":556,"updated":"2015-03-10 05:54:09.000000000","message":"Nothing appears to validate the attachment_id being valid for admin_actions and volume_actions. Also the manager does not validate the if the attachment_id is valid, so it would just stack trace.","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d548fc49f8789601ce020f89d58590c977b8845","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @wrap_check_policy"},{"line_number":555,"context_line":"    def detach(self, context, volume, attachment_id):"},{"line_number":556,"context_line":"        return self.volume_rpcapi.detach_volume(context, volume,"},{"line_number":557,"context_line":"                                                attachment_id)"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    @wrap_check_policy"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_3b7dafe8","line":556,"in_reply_to":"9a80dd14_0787cdb5","updated":"2015-03-10 15:37:34.000000000","message":"Added some validation in the volume manager.  Thanks Mike","commit_id":"689c7457658615b6314d8ca1d1ceb3949b5557aa"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"272dcbceaca6925a18898bd6d96546d29495374c","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            \u0027optional_args\u0027: {\u0027is_quota_committed\u0027: False},"},{"line_number":238,"context_line":"            \u0027consistencygroup\u0027: consistencygroup,"},{"line_number":239,"context_line":"            \u0027cgsnapshot\u0027: cgsnapshot,"},{"line_number":240,"context_line":"            \u0027multiattach\u0027: multiattach,"},{"line_number":241,"context_line":"        }"},{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            if cgsnapshot:"}],"source_content_type":"text/x-python","patch_set":47,"id":"9a80dd14_cc7204ad","line":240,"updated":"2015-03-11 01:16:58.000000000","message":"Still have the same question I asked earlier about whether we really want to make this a requirement at create time or not.  Seems like we are just introducing more burden on the end user.\n\nThat being said I\u0027m ok with moving forward with this approach and discussing in person to get your take on it.  I know at one point we decided this was a good way to go for some reasons, just not sure it still holds true.","commit_id":"10d54216871fde27172fbcb1a3c9bfec59b824c2"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"8602d0e0ffb464cf975fe294838c0c08fbe67be1","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            \u0027optional_args\u0027: {\u0027is_quota_committed\u0027: False},"},{"line_number":238,"context_line":"            \u0027consistencygroup\u0027: consistencygroup,"},{"line_number":239,"context_line":"            \u0027cgsnapshot\u0027: cgsnapshot,"},{"line_number":240,"context_line":"            \u0027multiattach\u0027: multiattach,"},{"line_number":241,"context_line":"        }"},{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            if cgsnapshot:"}],"source_content_type":"text/x-python","patch_set":47,"id":"9a80dd14_6d08162e","line":240,"in_reply_to":"9a80dd14_960489c7","updated":"2015-03-11 15:36:39.000000000","message":"@Duncan\nCompletely fair and valid, I would like to brainstorm on other ways to be \"safe\", but if the flag turns out to be the best way that\u0027s absolutely fine with me.  I get your concerns about protection at the attach call, that\u0027s a non-negotiable item IMO (in other words you\u0027re absolutely right).","commit_id":"10d54216871fde27172fbcb1a3c9bfec59b824c2"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"a52068ce8dbde4e88a694e8d41166523502f19a1","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            \u0027optional_args\u0027: {\u0027is_quota_committed\u0027: False},"},{"line_number":238,"context_line":"            \u0027consistencygroup\u0027: consistencygroup,"},{"line_number":239,"context_line":"            \u0027cgsnapshot\u0027: cgsnapshot,"},{"line_number":240,"context_line":"            \u0027multiattach\u0027: multiattach,"},{"line_number":241,"context_line":"        }"},{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            if cgsnapshot:"}],"source_content_type":"text/x-python","patch_set":47,"id":"9a80dd14_960489c7","line":240,"in_reply_to":"9a80dd14_cc7204ad","updated":"2015-03-11 10:45:46.000000000","message":"Yes, I\u0027m absolutely sure we want to make this a requirement at create time. Multi-attach is a niche use-case, most people don\u0027t want the possibility of attaching the same volume twice. It is much, much better to put the hard work on the unusual case to keep the 99.99999% safer. \n\nHaving it specified at create time also means you know when it is safe to do certain optimisations, such as client side caching or client-side cow layering.\n\nI argued very strongly for adding this flag to create, and I really want it to stay.","commit_id":"10d54216871fde27172fbcb1a3c9bfec59b824c2"}],"cinder/volume/drivers/san/hp/hp_3par_common.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"372f8ccf28075d2ff29121e0f2a349f07ae5d57f","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def _create_3par_vlun(self, volume, hostname, nsp):"},{"line_number":345,"context_line":"        try:"},{"line_number":346,"context_line":"            location \u003d None"},{"line_number":347,"context_line":"            if nsp is None:"},{"line_number":348,"context_line":"                location \u003d self.client.createVLUN(volume, hostname\u003dhostname,"},{"line_number":349,"context_line":"                                                  auto\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FzBM%3D","line":346,"updated":"2014-04-27 06:39:03.000000000","message":"Please submit 3par changes separately","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2361df31c0c3bc1825d2e762dec2f17096fa53d5","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def _create_3par_vlun(self, volume, hostname, nsp):"},{"line_number":345,"context_line":"        try:"},{"line_number":346,"context_line":"            location \u003d None"},{"line_number":347,"context_line":"            if nsp is None:"},{"line_number":348,"context_line":"                location \u003d self.client.createVLUN(volume, hostname\u003dhostname,"},{"line_number":349,"context_line":"                                                  auto\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FybA%3D","line":346,"in_reply_to":"AAAAXX%2F%2FzBM%3D","updated":"2014-04-27 15:19:59.000000000","message":"I\u0027ll have to pull this out and submit a separate patch.","commit_id":"3e1d8c8fd8c6a30654d772268d72082bf306bd14"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8dc3de13fc5e9190fee273484bd4d858697a5555","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def _create_3par_vlun(self, volume, hostname, nsp):"},{"line_number":345,"context_line":"        try:"},{"line_number":346,"context_line":"            location \u003d None"},{"line_number":347,"context_line":"            if nsp is None:"},{"line_number":348,"context_line":"                location \u003d self.client.createVLUN(volume, hostname\u003dhostname,"},{"line_number":349,"context_line":"                                                  auto\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXX%2F%2FyLo%3D","line":346,"updated":"2014-04-27 17:59:47.000000000","message":"Remove hp3par code","commit_id":"b156827ab61eaa9831a240091f3cb6c70fdba115"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"d34ed7e1ea1985b2e949a6b72b1508376bfc8053","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        2.0.31 - Removed usage of host name cache #1398914"},{"line_number":163,"context_line":"        2.0.32 - Update LOG usage to fix translations.  bug #1384312"},{"line_number":164,"context_line":"        2.0.33 - Fix host persona to match WSAPI mapping bug #1403997"},{"line_number":165,"context_line":"        2.0.34 - Added support for updated detach_volume atachment."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    \"\"\""},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a930d6b_6413be0d","line":165,"updated":"2015-01-22 19:47:27.000000000","message":"attachment... or make the comments the same as the other hp files \"Added optional attachment to detach_volume\", currently all three are different","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"fff66a9a3db18bf57dfe41756f737bbfc7c8cfb5","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        2.0.31 - Removed usage of host name cache #1398914"},{"line_number":163,"context_line":"        2.0.32 - Update LOG usage to fix translations.  bug #1384312"},{"line_number":164,"context_line":"        2.0.33 - Fix host persona to match WSAPI mapping bug #1403997"},{"line_number":165,"context_line":"        2.0.34 - Added support for updated detach_volume atachment."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    \"\"\""},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a930d6b_db6fc8c3","line":165,"in_reply_to":"1a930d6b_6413be0d","updated":"2015-01-23 16:36:17.000000000","message":"Done","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d2708326981cce075d2eb4e27d527db64ab64d5","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"           TODO: add support for multi-attach"},{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"        \"\"\""},{"line_number":1447,"context_line":"        LOG.debug(\"Attach Volume\\n%s\" % pprint.pformat(volume))"},{"line_number":1448,"context_line":"        try:"},{"line_number":1449,"context_line":"            self.update_volume_key_value_pair(volume,"},{"line_number":1450,"context_line":"                                              \u0027HPQ-CS-instance_uuid\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_fe61f2d3","line":1447,"updated":"2015-02-10 03:27:29.000000000","message":"This should be \",\" instead of \"%\".  The change on the left is correct.  Seems the change got lost due to rebase.","commit_id":"4b38d5c024fbc08fc51463461a2cd6f4d710d328"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a8fffc1583c71b48e66d77dc530f3d6afe2f459f","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"           TODO: add support for multi-attach"},{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"        \"\"\""},{"line_number":1447,"context_line":"        LOG.debug(\"Attach Volume\\n%s\" % pprint.pformat(volume))"},{"line_number":1448,"context_line":"        try:"},{"line_number":1449,"context_line":"            self.update_volume_key_value_pair(volume,"},{"line_number":1450,"context_line":"                                              \u0027HPQ-CS-instance_uuid\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_6fe7f340","line":1447,"in_reply_to":"da86d52c_fe61f2d3","updated":"2015-02-10 15:50:48.000000000","message":"Done","commit_id":"4b38d5c024fbc08fc51463461a2cd6f4d710d328"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d2708326981cce075d2eb4e27d527db64ab64d5","unresolved":false,"context_lines":[{"line_number":1459,"context_line":"           TODO: add support for multi-attach."},{"line_number":1460,"context_line":""},{"line_number":1461,"context_line":"        \"\"\""},{"line_number":1462,"context_line":"        LOG.debug(\"Detach Volume\\n%s\" % pprint.pformat(volume))"},{"line_number":1463,"context_line":"        try:"},{"line_number":1464,"context_line":"            self.clear_volume_key_value_pair(volume, \u0027HPQ-CS-instance_uuid\u0027)"},{"line_number":1465,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_5e9e7eb9","line":1462,"updated":"2015-02-10 03:27:29.000000000","message":"Here too. Should be \",\" instead of \"%\".","commit_id":"4b38d5c024fbc08fc51463461a2cd6f4d710d328"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a8fffc1583c71b48e66d77dc530f3d6afe2f459f","unresolved":false,"context_lines":[{"line_number":1459,"context_line":"           TODO: add support for multi-attach."},{"line_number":1460,"context_line":""},{"line_number":1461,"context_line":"        \"\"\""},{"line_number":1462,"context_line":"        LOG.debug(\"Detach Volume\\n%s\" % pprint.pformat(volume))"},{"line_number":1463,"context_line":"        try:"},{"line_number":1464,"context_line":"            self.clear_volume_key_value_pair(volume, \u0027HPQ-CS-instance_uuid\u0027)"},{"line_number":1465,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_8fe2672d","line":1462,"in_reply_to":"da86d52c_5e9e7eb9","updated":"2015-02-10 15:50:48.000000000","message":"Done","commit_id":"4b38d5c024fbc08fc51463461a2cd6f4d710d328"}],"cinder/volume/drivers/solidfire.py":[{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"1585e1670c90371f9df26d04561b357fe8f70b9e","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                msg \u003d _(\"Failed to create SolidFire Image-Volume\")"},{"line_number":604,"context_line":"                raise exception.SolidFireAPIException(msg)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    def clone_image(self, context,"},{"line_number":607,"context_line":"                    volume, image_location,"},{"line_number":608,"context_line":"                    image_meta, image_service):"},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a930d6b_5acbe052","line":606,"updated":"2015-01-23 12:00:49.000000000","message":"You sure clone_image should be added in this patch?","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3ef0c5b787ae88e99058b6f49d42f13b788c370d","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                msg \u003d _(\"Failed to create SolidFire Image-Volume\")"},{"line_number":604,"context_line":"                raise exception.SolidFireAPIException(msg)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    def clone_image(self, context,"},{"line_number":607,"context_line":"                    volume, image_location,"},{"line_number":608,"context_line":"                    image_meta, image_service):"},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a930d6b_ba73e413","line":606,"in_reply_to":"1a930d6b_5acbe052","updated":"2015-01-23 12:05:16.000000000","message":"I don\u0027t understand this question...","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"fff66a9a3db18bf57dfe41756f737bbfc7c8cfb5","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                msg \u003d _(\"Failed to create SolidFire Image-Volume\")"},{"line_number":604,"context_line":"                raise exception.SolidFireAPIException(msg)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    def clone_image(self, context,"},{"line_number":607,"context_line":"                    volume, image_location,"},{"line_number":608,"context_line":"                    image_meta, image_service):"},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a930d6b_b830429f","line":606,"in_reply_to":"1a930d6b_5acbe052","updated":"2015-01-23 16:36:17.000000000","message":"this wasn\u0027t added in this patch.   You are mistaken.","commit_id":"8c6d7891ba49fbc84ea9a63ddd0a1a0e265615a3"}],"cinder/volume/flows/api/create_volume.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"9d53c8b1e346d9d244b53f28148aff2e30eb72b3","unresolved":false,"context_lines":[{"line_number":487,"context_line":"            \u0027display_description\u0027: kwargs.pop(\u0027description\u0027),"},{"line_number":488,"context_line":"            \u0027display_name\u0027: kwargs.pop(\u0027name\u0027),"},{"line_number":489,"context_line":"            \u0027replication_status\u0027: \u0027disabled\u0027,"},{"line_number":490,"context_line":"            \u0027shareable\u0027: kwargs.pop(\u0027shareable\u0027),"},{"line_number":491,"context_line":"        }"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        # Merge in the other required arguments which should provide the rest"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_a2d586b8","line":490,"updated":"2015-01-03 16:41:32.000000000","message":"Would it be better to make this an option/api call after the fact rather than requiring it at create time?\n\nIn other words \"volume-enable-sharing\"","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":487,"context_line":"            \u0027display_description\u0027: kwargs.pop(\u0027description\u0027),"},{"line_number":488,"context_line":"            \u0027display_name\u0027: kwargs.pop(\u0027name\u0027),"},{"line_number":489,"context_line":"            \u0027replication_status\u0027: \u0027disabled\u0027,"},{"line_number":490,"context_line":"            \u0027shareable\u0027: kwargs.pop(\u0027shareable\u0027),"},{"line_number":491,"context_line":"        }"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        # Merge in the other required arguments which should provide the rest"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_eb3d8d8f","line":490,"in_reply_to":"3a961159_a2d586b8","updated":"2015-01-15 16:23:58.000000000","message":"I think that can be done later if we want to add tweaking the shareable flag.   I see that as something that could be used for live-migration.","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"394dcdca72de54b119595f8e9d68b6d32eee41eb","unresolved":false,"context_lines":[{"line_number":487,"context_line":"            \u0027display_description\u0027: kwargs.pop(\u0027description\u0027),"},{"line_number":488,"context_line":"            \u0027display_name\u0027: kwargs.pop(\u0027name\u0027),"},{"line_number":489,"context_line":"            \u0027replication_status\u0027: \u0027disabled\u0027,"},{"line_number":490,"context_line":"            \u0027shareable\u0027: kwargs.pop(\u0027shareable\u0027),"},{"line_number":491,"context_line":"        }"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        # Merge in the other required arguments which should provide the rest"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_4cd1d455","line":490,"updated":"2015-01-19 15:41:59.000000000","message":"I don\u0027t think this line is required because of the update line below.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ade835a9c4be7b5a31ccc9384ffc5b22b2105f0f","unresolved":false,"context_lines":[{"line_number":487,"context_line":"            \u0027display_description\u0027: kwargs.pop(\u0027description\u0027),"},{"line_number":488,"context_line":"            \u0027display_name\u0027: kwargs.pop(\u0027name\u0027),"},{"line_number":489,"context_line":"            \u0027replication_status\u0027: \u0027disabled\u0027,"},{"line_number":490,"context_line":"            \u0027shareable\u0027: kwargs.pop(\u0027shareable\u0027),"},{"line_number":491,"context_line":"        }"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        # Merge in the other required arguments which should provide the rest"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_69f49488","line":490,"in_reply_to":"3a961159_4cd1d455","updated":"2015-01-21 05:28:12.000000000","message":"It is required.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"8073f73626a56e9356ebc616188744ee59009349","unresolved":false,"context_lines":[{"line_number":487,"context_line":"            \u0027display_description\u0027: kwargs.pop(\u0027description\u0027),"},{"line_number":488,"context_line":"            \u0027display_name\u0027: kwargs.pop(\u0027name\u0027),"},{"line_number":489,"context_line":"            \u0027replication_status\u0027: \u0027disabled\u0027,"},{"line_number":490,"context_line":"            \u0027shareable\u0027: kwargs.pop(\u0027shareable\u0027),"},{"line_number":491,"context_line":"        }"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        # Merge in the other required arguments which should provide the rest"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a930d6b_2062c6d8","line":490,"in_reply_to":"3a961159_69f49488","updated":"2015-01-21 09:23:54.000000000","message":"The key name in volume_properties matches that in kwargs so shareable will automatically get added by line 495. The shareable kwarg is required, this line isn\u0027t.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"}],"cinder/volume/manager.py":[{"author":{"_account_id":10973,"name":"Trump.Zhang","email":"zhangleiqiang@huawei.com","username":"trump.zhang"},"change_message_id":"df2efcee4bf144f738d966ff0fabd38e2eb62478","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    If a volume operation uses this decorator, it will block until the named"},{"line_number":138,"context_line":"    lock is free. This is used to protect concurrent operations on the same"},{"line_number":139,"context_line":"    volume e.g. delete VolA while create volume VolB from VolA is in progress."},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":"    def ldo_inner1(inst, context, volume_id, attachment_id, **kwargs):"},{"line_number":142,"context_line":"        @utils.synchronized(\"%s-%s\" % (volume_id, f.__name__), external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXX%2F%2Fwys%3D","line":139,"updated":"2014-04-28 07:10:44.000000000","message":"The docstring here needs to be updated.","commit_id":"b156827ab61eaa9831a240091f3cb6c70fdba115"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f73e6a403e5041262fb66e46208b92294433e030","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    If a volume operation uses this decorator, it will block until the named"},{"line_number":138,"context_line":"    lock is free. This is used to protect concurrent operations on the same"},{"line_number":139,"context_line":"    volume e.g. delete VolA while create volume VolB from VolA is in progress."},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":"    def ldo_inner1(inst, context, volume_id, attachment_id, **kwargs):"},{"line_number":142,"context_line":"        @utils.synchronized(\"%s-%s\" % (volume_id, f.__name__), external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXX%2F%2FsXM%3D","line":139,"in_reply_to":"AAAAXX%2F%2Fwys%3D","updated":"2014-04-28 19:57:19.000000000","message":"Done","commit_id":"b156827ab61eaa9831a240091f3cb6c70fdba115"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a492565dec36e16c5494add030e122f19a4bf71","unresolved":false,"context_lines":[{"line_number":767,"context_line":"            if len(attachments) \u003e 1:"},{"line_number":768,"context_line":"                # There are more than 1 attachments for this volume"},{"line_number":769,"context_line":"                # we have to have an attachment id."},{"line_number":770,"context_line":"                msg \u003d _(\"Volume %(id)s is attached to more than once instance\""},{"line_number":771,"context_line":"                        \".  A valid attachment_id must be passed to detach\""},{"line_number":772,"context_line":"                        \" this volume\") % {\u0027id\u0027: volume_id}"},{"line_number":773,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_9a1aa7c4","line":770,"updated":"2015-01-05 07:07:17.000000000","message":"once -\u003e one","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":767,"context_line":"            if len(attachments) \u003e 1:"},{"line_number":768,"context_line":"                # There are more than 1 attachments for this volume"},{"line_number":769,"context_line":"                # we have to have an attachment id."},{"line_number":770,"context_line":"                msg \u003d _(\"Volume %(id)s is attached to more than once instance\""},{"line_number":771,"context_line":"                        \".  A valid attachment_id must be passed to detach\""},{"line_number":772,"context_line":"                        \" this volume\") % {\u0027id\u0027: volume_id}"},{"line_number":773,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_0b5ad9f1","line":770,"in_reply_to":"3a961159_9a1aa7c4","updated":"2015-01-15 16:23:58.000000000","message":"Done","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"1477a26d834634eabc442502173d7c3d1186d45f","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"                                     attachment[\u0027mountpoint\u0027],"},{"line_number":1205,"context_line":"                                     \u0027rw\u0027)"},{"line_number":1206,"context_line":""},{"line_number":1207,"context_line":"            #rpcapi.attach_volume(ctxt,"},{"line_number":1208,"context_line":"            #                     volume,"},{"line_number":1209,"context_line":"            #                     volume[\u0027instance_uuid\u0027],"},{"line_number":1210,"context_line":"            #                     volume[\u0027attached_host\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_17293a89","line":1207,"updated":"2015-01-03 07:02:09.000000000","message":"Remove the commented code?","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2909688509fa093c8e2e8c8b382ac9f5250f6820","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"                                     attachment[\u0027mountpoint\u0027],"},{"line_number":1205,"context_line":"                                     \u0027rw\u0027)"},{"line_number":1206,"context_line":""},{"line_number":1207,"context_line":"            #rpcapi.attach_volume(ctxt,"},{"line_number":1208,"context_line":"            #                     volume,"},{"line_number":1209,"context_line":"            #                     volume[\u0027instance_uuid\u0027],"},{"line_number":1210,"context_line":"            #                     volume[\u0027attached_host\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_ab0545c3","line":1207,"in_reply_to":"3a961159_17293a89","updated":"2015-01-15 16:23:58.000000000","message":"Done","commit_id":"42f1a089c1e235d29759e148340b2feafbb53fd4"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b67a353c6d9f6e06e8dfa7b28a9345399fab1c23","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                    msg \u003d _(\"being attached by different mode\")"},{"line_number":686,"context_line":"                    raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"            if (volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027 and not volume[\u0027shareable\u0027]):"},{"line_number":689,"context_line":"                msg \u003d _(\"volume is already attached\")"},{"line_number":690,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":691,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_83ce9e58","line":688,"updated":"2015-01-06 09:06:56.000000000","message":"shouldn\u0027t consider to add \"not volume[\u0027migration_status\u0027]\"?\n\nlike: if (not volume[\u0027migration_status\u0027] and (volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027 and not volume[\u0027shareable\u0027])","commit_id":"d20afc787dbea225c1b2b7158560612b17d22083"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"55ac7bc7d90db57010136564c05e3c5a14ff383d","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                    msg \u003d _(\"being attached by different mode\")"},{"line_number":686,"context_line":"                    raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"            if (volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027 and not volume[\u0027shareable\u0027]):"},{"line_number":689,"context_line":"                msg \u003d _(\"volume is already attached\")"},{"line_number":690,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":691,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_ac160da5","line":688,"in_reply_to":"3a961159_83ce9e58","updated":"2015-01-15 16:47:20.000000000","message":"Done","commit_id":"d20afc787dbea225c1b2b7158560612b17d22083"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"b00a04184f70929ecc7f2bb40afc106f99019cc1","unresolved":false,"context_lines":[{"line_number":791,"context_line":"            # and the volume status updated."},{"line_number":792,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":793,"context_line":""},{"line_number":794,"context_line":"            self.driver.detach_volume(context, volume)"},{"line_number":795,"context_line":"        except Exception:"},{"line_number":796,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":797,"context_line":"                self.db.volume_attachment_update("}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_8c4f47bf","line":794,"updated":"2015-01-19 10:04:02.000000000","message":"I\u0027m a bit confused ... The driver detach_volume doesn\u0027t know whether the volume is being shared, or which attachment is being detached? How could the driver and the backend storage correctly handle volumes being shared?","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ade835a9c4be7b5a31ccc9384ffc5b22b2105f0f","unresolved":false,"context_lines":[{"line_number":791,"context_line":"            # and the volume status updated."},{"line_number":792,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":793,"context_line":""},{"line_number":794,"context_line":"            self.driver.detach_volume(context, volume)"},{"line_number":795,"context_line":"        except Exception:"},{"line_number":796,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":797,"context_line":"                self.db.volume_attachment_update("}],"source_content_type":"text/x-python","patch_set":19,"id":"1a930d6b_9f7683d7","line":794,"in_reply_to":"3a961159_8c4f47bf","updated":"2015-01-21 05:28:12.000000000","message":"Added the attachment being passed in to detach_volume.  driver\u0027s can decide what to do for that particular detach call.  None will be the default to maintain backwards compatibility.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"394dcdca72de54b119595f8e9d68b6d32eee41eb","unresolved":false,"context_lines":[{"line_number":796,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":797,"context_line":"                self.db.volume_attachment_update("},{"line_number":798,"context_line":"                    context, attachment.get(\u0027id\u0027),"},{"line_number":799,"context_line":"                    {\u0027attach_statis\u0027: \u0027error_detaching\u0027})"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        self.db.volume_detached(context.elevated(), volume_id,"},{"line_number":802,"context_line":"                                attachment.get(\u0027id\u0027))"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_49054678","line":799,"updated":"2015-01-19 15:41:59.000000000","message":"attach_status?","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ade835a9c4be7b5a31ccc9384ffc5b22b2105f0f","unresolved":false,"context_lines":[{"line_number":796,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":797,"context_line":"                self.db.volume_attachment_update("},{"line_number":798,"context_line":"                    context, attachment.get(\u0027id\u0027),"},{"line_number":799,"context_line":"                    {\u0027attach_statis\u0027: \u0027error_detaching\u0027})"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        self.db.volume_detached(context.elevated(), volume_id,"},{"line_number":802,"context_line":"                                attachment.get(\u0027id\u0027))"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_8938e03c","line":799,"in_reply_to":"3a961159_49054678","updated":"2015-01-21 05:28:12.000000000","message":"thanks!","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":10851,"name":"Tobias Engelbert","email":"tobias.engelbert@ericsson.com","username":"Tobi"},"change_message_id":"c3b03fc2d0d3cbfe917bc785e9cdbc8a7455240c","unresolved":false,"context_lines":[{"line_number":993,"context_line":"                access_mode \u003d (\u0027ro\u0027"},{"line_number":994,"context_line":"                               if volume_metadata.get(\u0027readonly\u0027) \u003d\u003d \u0027True\u0027"},{"line_number":995,"context_line":"                               else \u0027rw\u0027)"},{"line_number":996,"context_line":"            conn_info[\u0027data\u0027][\u0027access_mode\u0027] \u003d access_mode"},{"line_number":997,"context_line":""},{"line_number":998,"context_line":"        return conn_info"},{"line_number":999,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_57e930b6","line":996,"updated":"2015-01-20 17:14:53.000000000","message":"Can you add\n\nif volume.get(\u0027shareable\u0027,False):\n            conn_info[\u0027shareable\u0027] \u003d True\n\nthen this can be used later on by libvirt to set the sharable into the xml.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ade835a9c4be7b5a31ccc9384ffc5b22b2105f0f","unresolved":false,"context_lines":[{"line_number":993,"context_line":"                access_mode \u003d (\u0027ro\u0027"},{"line_number":994,"context_line":"                               if volume_metadata.get(\u0027readonly\u0027) \u003d\u003d \u0027True\u0027"},{"line_number":995,"context_line":"                               else \u0027rw\u0027)"},{"line_number":996,"context_line":"            conn_info[\u0027data\u0027][\u0027access_mode\u0027] \u003d access_mode"},{"line_number":997,"context_line":""},{"line_number":998,"context_line":"        return conn_info"},{"line_number":999,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a930d6b_d43392f4","line":996,"in_reply_to":"3a961159_57e930b6","updated":"2015-01-21 05:28:12.000000000","message":"Don\u0027t you already have the volume object in nova/libvirt at this point?  It will have the shareable flag as part of the volume object.","commit_id":"c50e6cb7256a5de77e9f2968bb4bcfc75234b77c"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"b48238292a8cb29c25889bb8e619a2955731b41f","unresolved":false,"context_lines":[{"line_number":795,"context_line":"            # and the volume status updated."},{"line_number":796,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"            self.driver.detach_volume(context, volume, attachment)"},{"line_number":799,"context_line":"        except Exception:"},{"line_number":800,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":801,"context_line":"                self.db.volume_attachment_update("}],"source_content_type":"text/x-python","patch_set":27,"id":"1a930d6b_47b39f97","line":798,"updated":"2015-01-27 13:24:54.000000000","message":"Are there any out of tree drivers that we don\u0027t want to break by changing the driver API? This may not be a real concern for Cinder folks.","commit_id":"4b1d54acc12229cca02f435c87d84efe51c828d1"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d3755fca3b771c45e14c3c209b9894b97e5421ef","unresolved":false,"context_lines":[{"line_number":795,"context_line":"            # and the volume status updated."},{"line_number":796,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"            self.driver.detach_volume(context, volume, attachment)"},{"line_number":799,"context_line":"        except Exception:"},{"line_number":800,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":801,"context_line":"                self.db.volume_attachment_update("}],"source_content_type":"text/x-python","patch_set":27,"id":"fa81d914_de19e523","line":798,"in_reply_to":"1a930d6b_47b39f97","updated":"2015-01-27 20:25:59.000000000","message":"We can\u0027t control what people do out of tree.","commit_id":"4b1d54acc12229cca02f435c87d84efe51c828d1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d04ed06de2217e2981bc4258cf1c3f190dff53cf","unresolved":false,"context_lines":[{"line_number":781,"context_line":"                # we have to have an attachment id."},{"line_number":782,"context_line":"                msg \u003d _(\"Volume %(id)s is attached to more than one instance\""},{"line_number":783,"context_line":"                        \".  A valid attachment_id must be passed to detach\""},{"line_number":784,"context_line":"                        \" this volume\") % {\u0027id\u0027: volume_id}"},{"line_number":785,"context_line":"                LOG.error(msg)"},{"line_number":786,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":787,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_e580baf9","line":784,"updated":"2015-02-13 22:12:32.000000000","message":"Suggest \u0027.\u0027 here","commit_id":"e7ff04298d1ae04150f42aa917c175cf3445fea3"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"872d8879667957085b579b745182f4ba285c5b8d","unresolved":false,"context_lines":[{"line_number":781,"context_line":"                # we have to have an attachment id."},{"line_number":782,"context_line":"                msg \u003d _(\"Volume %(id)s is attached to more than one instance\""},{"line_number":783,"context_line":"                        \".  A valid attachment_id must be passed to detach\""},{"line_number":784,"context_line":"                        \" this volume\") % {\u0027id\u0027: volume_id}"},{"line_number":785,"context_line":"                LOG.error(msg)"},{"line_number":786,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":787,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_851b7ec9","line":784,"in_reply_to":"da86d52c_e580baf9","updated":"2015-02-13 23:11:13.000000000","message":"Done","commit_id":"e7ff04298d1ae04150f42aa917c175cf3445fea3"},{"author":{"_account_id":9176,"name":"Tomoki Sekiyama","email":"tomoki.sekiyama@gmail.com","username":"tsekiyama"},"change_message_id":"8ad62be5938f36d62758d692cab879e223286a9b","unresolved":false,"context_lines":[{"line_number":1149,"context_line":"                    instance_uuid \u003d attachment[\u0027instance_uuid\u0027]"},{"line_number":1150,"context_line":"                    nova_api.update_server_volume(ctxt, instance_uuid,"},{"line_number":1151,"context_line":"                                                  volume[\u0027id\u0027],"},{"line_number":1152,"context_line":"                                                  new_volume[\u0027id\u0027])"},{"line_number":1153,"context_line":"        except Exception:"},{"line_number":1154,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1155,"context_line":"                msg \u003d _(\"Failed to copy volume %(vol1)s to %(vol2)s\")"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a80dd14_7de89110","line":1152,"updated":"2015-03-06 00:44:07.000000000","message":"This will break data in the volume when multiple active instances are attaching the volume and they copy the volume data at the same time. Also migrate_volume_completion will be called multiple time, which may confuse cinder too.\n\nSo far, we should abort live volume migration when there are multiple attachments.","commit_id":"67151a008940f2e55380731d21e8f6a2b2b1680d"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8dc3de13fc5e9190fee273484bd4d858697a5555","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        1.13 - Adds create_export."},{"line_number":51,"context_line":"        1.14 - Adds reservation parameter to extend_volume()."},{"line_number":52,"context_line":"        1.15 - Adds manage_existing and unmanage_only flag to delete_volume."},{"line_number":53,"context_line":"        1.16 - Removes create_export."},{"line_number":54,"context_line":"    \u0027\u0027\u0027"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXX%2F%2FyLw%3D","line":53,"updated":"2014-04-27 17:59:47.000000000","message":"Need to bump the version number for your change, and also bump it in manager.py","commit_id":"b156827ab61eaa9831a240091f3cb6c70fdba115"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f73e6a403e5041262fb66e46208b92294433e030","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        1.13 - Adds create_export."},{"line_number":51,"context_line":"        1.14 - Adds reservation parameter to extend_volume()."},{"line_number":52,"context_line":"        1.15 - Adds manage_existing and unmanage_only flag to delete_volume."},{"line_number":53,"context_line":"        1.16 - Removes create_export."},{"line_number":54,"context_line":"    \u0027\u0027\u0027"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXX%2F%2FsVk%3D","line":53,"in_reply_to":"AAAAXX%2F%2FyLw%3D","updated":"2014-04-28 19:57:19.000000000","message":"Done","commit_id":"b156827ab61eaa9831a240091f3cb6c70fdba115"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"d8d7c0024b7b71f1f9871d6190c6e653a9213a49","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def detach_volume(self, ctxt, volume, attachment_id):"},{"line_number":151,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.20\u0027)"},{"line_number":153,"context_line":"        return cctxt.call(ctxt, \u0027detach_volume\u0027, volume_id\u003dvolume[\u0027id\u0027],"},{"line_number":154,"context_line":"                          attachment_id\u003dattachment_id)"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_6adba4ed","line":152,"updated":"2015-01-22 12:54:58.000000000","message":"Do we need to worry about backward compatibility here?","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"dbf0ba1acc93b7b655b3c269d86633d194b9c7fa","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def detach_volume(self, ctxt, volume, attachment_id):"},{"line_number":151,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.20\u0027)"},{"line_number":153,"context_line":"        return cctxt.call(ctxt, \u0027detach_volume\u0027, volume_id\u003dvolume[\u0027id\u0027],"},{"line_number":154,"context_line":"                          attachment_id\u003dattachment_id)"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_55275264","line":152,"in_reply_to":"1a930d6b_6adba4ed","updated":"2015-01-22 17:44:05.000000000","message":"The attachment_id is defaulted to None elsewhere in the code, and I account for it later on.   So it should be backwards compatible.","commit_id":"d4ea422e6aaab2beed972d961d968aaf931fb729"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e8b6112d03a7e61bdf4a5c44168c0a58dccc919b","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def detach_volume(self, ctxt, volume, attachment_id):"},{"line_number":176,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":177,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.20\u0027)"},{"line_number":178,"context_line":"        return cctxt.call(ctxt, \u0027detach_volume\u0027, volume_id\u003dvolume[\u0027id\u0027],"},{"line_number":179,"context_line":"                          attachment_id\u003dattachment_id)"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9a80dd14_ab01ba39","line":177,"updated":"2015-03-06 19:39:20.000000000","message":"Should this be changed to 1.23 now?","commit_id":"2ecdea6a65e0a22f4228ddd3c62c3895658383db"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"8068af9c1a1bc80d48c8fdcf950c8cca60ba958d","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def detach_volume(self, ctxt, volume, attachment_id):"},{"line_number":176,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":177,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.20\u0027)"},{"line_number":178,"context_line":"        return cctxt.call(ctxt, \u0027detach_volume\u0027, volume_id\u003dvolume[\u0027id\u0027],"},{"line_number":179,"context_line":"                          attachment_id\u003dattachment_id)"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9a80dd14_d9931f59","line":177,"in_reply_to":"9a80dd14_ab01ba39","updated":"2015-03-06 22:43:03.000000000","message":"Done","commit_id":"2ecdea6a65e0a22f4228ddd3c62c3895658383db"}],"cinder/volume/utils.py":[{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"394dcdca72de54b119595f8e9d68b6d32eee41eb","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    usage_info \u003d dict(tenant_id\u003dvolume_ref[\u0027project_id\u0027],"},{"line_number":46,"context_line":"                      host\u003dvolume_ref[\u0027host\u0027],"},{"line_number":47,"context_line":"                      user_id\u003dvolume_ref[\u0027user_id\u0027],"},{"line_number":48,"context_line":"                      instance_uuid\u003dvolume_ref[\u0027instance_uuid\u0027],"},{"line_number":49,"context_line":"                      availability_zone\u003dvolume_ref[\u0027availability_zone\u0027],"},{"line_number":50,"context_line":"                      volume_id\u003dvolume_ref[\u0027id\u0027],"},{"line_number":51,"context_line":"                      volume_type\u003dvolume_ref[\u0027volume_type_id\u0027],"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_8ca65c0e","side":"PARENT","line":48,"updated":"2015-01-19 15:41:59.000000000","message":"Does changing this cause problems for ceilometer? Or does it not matter exactly want data is sent?","commit_id":"657a06e086f9db0b53ff5ee8979c1c9fe970456b"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"d8d7c0024b7b71f1f9871d6190c6e653a9213a49","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    usage_info \u003d dict(tenant_id\u003dvolume_ref[\u0027project_id\u0027],"},{"line_number":46,"context_line":"                      host\u003dvolume_ref[\u0027host\u0027],"},{"line_number":47,"context_line":"                      user_id\u003dvolume_ref[\u0027user_id\u0027],"},{"line_number":48,"context_line":"                      instance_uuid\u003dvolume_ref[\u0027instance_uuid\u0027],"},{"line_number":49,"context_line":"                      availability_zone\u003dvolume_ref[\u0027availability_zone\u0027],"},{"line_number":50,"context_line":"                      volume_id\u003dvolume_ref[\u0027id\u0027],"},{"line_number":51,"context_line":"                      volume_type\u003dvolume_ref[\u0027volume_type_id\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_b9c5e45c","side":"PARENT","line":48,"updated":"2015-01-22 12:54:58.000000000","message":"Do we want to replace this with per-attachment info?","commit_id":"055ba7ab92409ac3596c7b68aa20651c5167f292"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"dbf0ba1acc93b7b655b3c269d86633d194b9c7fa","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    usage_info \u003d dict(tenant_id\u003dvolume_ref[\u0027project_id\u0027],"},{"line_number":46,"context_line":"                      host\u003dvolume_ref[\u0027host\u0027],"},{"line_number":47,"context_line":"                      user_id\u003dvolume_ref[\u0027user_id\u0027],"},{"line_number":48,"context_line":"                      instance_uuid\u003dvolume_ref[\u0027instance_uuid\u0027],"},{"line_number":49,"context_line":"                      availability_zone\u003dvolume_ref[\u0027availability_zone\u0027],"},{"line_number":50,"context_line":"                      volume_id\u003dvolume_ref[\u0027id\u0027],"},{"line_number":51,"context_line":"                      volume_type\u003dvolume_ref[\u0027volume_type_id\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a930d6b_95e7fa11","side":"PARENT","line":48,"in_reply_to":"1a930d6b_b9c5e45c","updated":"2015-01-22 17:44:05.000000000","message":"yes, the instance_uuid is in the attachments for the volume.\n\nShould I add the attachment list here?","commit_id":"055ba7ab92409ac3596c7b68aa20651c5167f292"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"c6cab07c544a0d9d33533012abb3e952dd7e32c2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    usage_info \u003d dict(tenant_id\u003dvolume_ref[\u0027project_id\u0027],"},{"line_number":47,"context_line":"                      host\u003dvolume_ref[\u0027host\u0027],"},{"line_number":48,"context_line":"                      user_id\u003dvolume_ref[\u0027user_id\u0027],"},{"line_number":49,"context_line":"                      instance_uuid\u003dvolume_ref[\u0027instance_uuid\u0027],"},{"line_number":50,"context_line":"                      availability_zone\u003dvolume_ref[\u0027availability_zone\u0027],"},{"line_number":51,"context_line":"                      volume_id\u003dvolume_ref[\u0027id\u0027],"},{"line_number":52,"context_line":"                      volume_type\u003dvolume_ref[\u0027volume_type_id\u0027],"}],"source_content_type":"text/x-python","patch_set":46,"id":"9a80dd14_6195cc31","side":"PARENT","line":49,"updated":"2015-03-10 10:16:41.000000000","message":"After we add multi attach support, do we also need to add the usage info for volume attachment?","commit_id":"490f03b48a231d9dfdf4c351f8fba72982e46a70"}]}
