)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"248e8ed06d20120df61d39b7977088a7c21d132a","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: I57631d3deddb2d7cd244584e82206ee17fe2dd78"},{"line_number":16,"context_line":"Depends-On: I3b28d2cb89a8d81c7cdec425f355c78bfdfe3450"},{"line_number":17,"context_line":"Depends-On: I9de10bb5188ad778f06bb59e7f08f2b49089c1da"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Ia2102f1d47a764819c86972866efcfd1c2be7d0d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7f287b81_22d01a1f","line":17,"updated":"2017-09-07 14:28:51.000000000","message":"Thank you for all these, super useful, looks like we are all good dependency wise.","commit_id":"31b8202b636d94503f73d7b8fc5cb82f5b38b262"}],"nova/tests/unit/volume/test_cinder.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"be751b58ce5342393960052e0dda59e2dfe77da7","unresolved":false,"context_lines":[{"line_number":467,"context_line":"    def test_attachment_complete_unsupported_api_version(self,"},{"line_number":468,"context_line":"                                                         mock_cinderclient):"},{"line_number":469,"context_line":"        \"\"\"Tests that CinderAPIVersionNotAvailable is passed back through"},{"line_number":470,"context_line":"        if 3.27 isn\u0027t available."},{"line_number":471,"context_line":"        \"\"\""},{"line_number":472,"context_line":"        self.assertRaises(exception.CinderAPIVersionNotAvailable,"},{"line_number":473,"context_line":"                          self.api.attachment_complete,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f287b81_9abe75d2","line":470,"updated":"2017-09-04 16:00:13.000000000","message":"We had a stretch of nit picky patches a while back cleaning this up - but according to the docs docstrings should either be one line, or a single shorter summary line, followed by a blank line, then more detailed documentation.\n\nI only mention it because there was some effort to get this cleaned up and standardized, so I wouldn\u0027t feel right just letting it creep back in. :]","commit_id":"3783fef4a98584651b8ccf4a1e2017cf529b599d"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"366c98c8d75922ab88e845932e5ae3b4bd6c7b1e","unresolved":false,"context_lines":[{"line_number":467,"context_line":"    def test_attachment_complete_unsupported_api_version(self,"},{"line_number":468,"context_line":"                                                         mock_cinderclient):"},{"line_number":469,"context_line":"        \"\"\"Tests that CinderAPIVersionNotAvailable is passed back through"},{"line_number":470,"context_line":"        if 3.27 isn\u0027t available."},{"line_number":471,"context_line":"        \"\"\""},{"line_number":472,"context_line":"        self.assertRaises(exception.CinderAPIVersionNotAvailable,"},{"line_number":473,"context_line":"                          self.api.attachment_complete,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f287b81_6dec2e8f","line":470,"in_reply_to":"7f287b81_9abe75d2","updated":"2017-09-04 23:06:48.000000000","message":"And 3.27 is not even correct here... :D\n\nDo we have docs strings in tests or would it make more sense if I convert this into a comment rather?","commit_id":"3783fef4a98584651b8ccf4a1e2017cf529b599d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"450c51dc80a5f88ed1691022c67fd05cd7ee8456","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    @mock.patch(\u0027nova.volume.cinder.LOG\u0027)"},{"line_number":450,"context_line":"    @mock.patch(\u0027nova.volume.cinder.cinderclient\u0027)"},{"line_number":451,"context_line":"    def test_attachment_complete_failed(self, mock_cinderclient, mock_log):"},{"line_number":452,"context_line":"        mock_cinderclient.return_value.attachments.complete.side_effect \u003d ("},{"line_number":453,"context_line":"                cinder_exception.NotFound(404, \u0027404\u0027))"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_6e70a6dd","line":451,"range":{"start_line":451,"start_character":65,"end_line":451,"end_character":73},"updated":"2017-09-12 22:15:22.000000000","message":"it seems to be it is not used and the test passes without this mock for me.","commit_id":"3ebe41277a34c43114a8ff81835c5b786ce452b9"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"38c980fa05197580855777e9755e868bc0611353","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    @mock.patch(\u0027nova.volume.cinder.LOG\u0027)"},{"line_number":450,"context_line":"    @mock.patch(\u0027nova.volume.cinder.cinderclient\u0027)"},{"line_number":451,"context_line":"    def test_attachment_complete_failed(self, mock_cinderclient, mock_log):"},{"line_number":452,"context_line":"        mock_cinderclient.return_value.attachments.complete.side_effect \u003d ("},{"line_number":453,"context_line":"                cinder_exception.NotFound(404, \u0027404\u0027))"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_1f7ee018","line":451,"range":{"start_line":451,"start_character":65,"end_line":451,"end_character":73},"in_reply_to":"5f2577a7_6e70a6dd","updated":"2017-09-13 02:47:32.000000000","message":"Copy-paste issue, thanks for catching it.","commit_id":"3ebe41277a34c43114a8ff81835c5b786ce452b9"}],"nova/volume/cinder.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b55709f627178452c7e806ae7b568d3a5f556ad5","unresolved":false,"context_lines":[{"line_number":611,"context_line":"                    attachment_id)"},{"line_number":612,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":613,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":614,"context_line":"                LOG.error((\u0027Complete attachment failed for attachment \u0027"},{"line_number":615,"context_line":"                           \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027),"},{"line_number":616,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":617,"context_line":"                           \u0027msg\u0027: six.text_type(ex),"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_3a6d3304","line":614,"range":{"start_line":614,"start_character":26,"end_line":614,"end_character":27},"updated":"2017-08-24 16:05:12.000000000","message":"Nit: This set of parenthesis not needed.","commit_id":"e0b3c9219caab92c8ac54989a38822f9adef625d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b55709f627178452c7e806ae7b568d3a5f556ad5","unresolved":false,"context_lines":[{"line_number":614,"context_line":"                LOG.error((\u0027Complete attachment failed for attachment \u0027"},{"line_number":615,"context_line":"                           \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027),"},{"line_number":616,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":617,"context_line":"                           \u0027msg\u0027: six.text_type(ex),"},{"line_number":618,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_9a7b07bd","line":617,"range":{"start_line":617,"start_character":34,"end_line":617,"end_character":47},"updated":"2017-08-24 16:05:12.000000000","message":"The logger handles this internally, so this conversion should not explicitly be done beforehand.","commit_id":"e0b3c9219caab92c8ac54989a38822f9adef625d"},{"author":{"_account_id":17386,"name":"Steve Noyes","email":"steve.noyes@oracle.com","username":"ssn1ssn"},"change_message_id":"c562641f04e2260e5697e500448ac3e95411f5ea","unresolved":false,"context_lines":[{"line_number":604,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    @translate_attachment_exception"},{"line_number":607,"context_line":"    def attachment_complete(self, context, attachment_id):"},{"line_number":608,"context_line":"        try:"},{"line_number":609,"context_line":"            cinderclient("},{"line_number":610,"context_line":"                context, \u00273.44\u0027, skip_version_check\u003dTrue).attachments.complete("}],"source_content_type":"text/x-python","patch_set":7,"id":"7f287b81_ced42dbe","line":607,"updated":"2017-09-05 13:03:35.000000000","message":"It would be nice to have a comment here describing what complete does and when complete should be called.","commit_id":"3783fef4a98584651b8ccf4a1e2017cf529b599d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b98b9fb37a87d50cee14d39c15c2ae7c0cfdd43e","unresolved":false,"context_lines":[{"line_number":604,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    @translate_attachment_exception"},{"line_number":607,"context_line":"    def attachment_complete(self, context, attachment_id):"},{"line_number":608,"context_line":"        try:"},{"line_number":609,"context_line":"            cinderclient("},{"line_number":610,"context_line":"                context, \u00273.44\u0027, skip_version_check\u003dTrue).attachments.complete("}],"source_content_type":"text/x-python","patch_set":7,"id":"7f287b81_7e3968a1","line":607,"in_reply_to":"7f287b81_ced42dbe","updated":"2017-09-05 14:21:41.000000000","message":"Good call. Part of what we are trying to solve with a lot of this is misunderstandings that crept in by consumers not understanding what the various calls were for. It would be great if we had a docstring or comments that explained what this is for.","commit_id":"3783fef4a98584651b8ccf4a1e2017cf529b599d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"be751b58ce5342393960052e0dda59e2dfe77da7","unresolved":false,"context_lines":[{"line_number":611,"context_line":"                    attachment_id)"},{"line_number":612,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":613,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":614,"context_line":"                LOG.error((\u0027Complete attachment failed for attachment \u0027"},{"line_number":615,"context_line":"                           \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027),"},{"line_number":616,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":617,"context_line":"                           \u0027msg\u0027: six.text_type(ex),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f287b81_bad25133","line":614,"range":{"start_line":614,"start_character":26,"end_line":614,"end_character":27},"updated":"2017-09-04 16:00:13.000000000","message":"This set of parenthesis not needed.","commit_id":"3783fef4a98584651b8ccf4a1e2017cf529b599d"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d4925decc24f62d4dda20f2ffbf77c0af00696a3","unresolved":false,"context_lines":[{"line_number":611,"context_line":"                    attachment_id)"},{"line_number":612,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":613,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":614,"context_line":"                LOG.error((\u0027Complete attachment failed for attachment \u0027"},{"line_number":615,"context_line":"                           \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027),"},{"line_number":616,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":617,"context_line":"                           \u0027msg\u0027: six.text_type(ex),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f287b81_f170e9dc","line":614,"range":{"start_line":614,"start_character":26,"end_line":614,"end_character":27},"in_reply_to":"7f287b81_4d03b243","updated":"2017-09-05 15:08:34.000000000","message":"As this appears multiple times I will upload a separate patch to fix it in the whole file, similar for the one below.","commit_id":"3783fef4a98584651b8ccf4a1e2017cf529b599d"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"366c98c8d75922ab88e845932e5ae3b4bd6c7b1e","unresolved":false,"context_lines":[{"line_number":611,"context_line":"                    attachment_id)"},{"line_number":612,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":613,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":614,"context_line":"                LOG.error((\u0027Complete attachment failed for attachment \u0027"},{"line_number":615,"context_line":"                           \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027),"},{"line_number":616,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":617,"context_line":"                           \u0027msg\u0027: six.text_type(ex),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f287b81_4d03b243","line":614,"range":{"start_line":614,"start_character":26,"end_line":614,"end_character":27},"in_reply_to":"7f287b81_bad25133","updated":"2017-09-04 23:06:48.000000000","message":"The joy of copy and paste. :)","commit_id":"3783fef4a98584651b8ccf4a1e2017cf529b599d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"be751b58ce5342393960052e0dda59e2dfe77da7","unresolved":false,"context_lines":[{"line_number":614,"context_line":"                LOG.error((\u0027Complete attachment failed for attachment \u0027"},{"line_number":615,"context_line":"                           \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027),"},{"line_number":616,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":617,"context_line":"                           \u0027msg\u0027: six.text_type(ex),"},{"line_number":618,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f287b81_3a21c14e","line":617,"range":{"start_line":617,"start_character":34,"end_line":617,"end_character":47},"updated":"2017-09-04 16:00:13.000000000","message":"String conversion should not be done in the logger calls. The logger internally will do this if needed.","commit_id":"3783fef4a98584651b8ccf4a1e2017cf529b599d"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"366c98c8d75922ab88e845932e5ae3b4bd6c7b1e","unresolved":false,"context_lines":[{"line_number":614,"context_line":"                LOG.error((\u0027Complete attachment failed for attachment \u0027"},{"line_number":615,"context_line":"                           \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027),"},{"line_number":616,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":617,"context_line":"                           \u0027msg\u0027: six.text_type(ex),"},{"line_number":618,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f287b81_2dfe2638","line":617,"range":{"start_line":617,"start_character":34,"end_line":617,"end_character":47},"in_reply_to":"7f287b81_3a21c14e","updated":"2017-09-04 23:06:48.000000000","message":"Likewise... :)","commit_id":"3783fef4a98584651b8ccf4a1e2017cf529b599d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"248e8ed06d20120df61d39b7977088a7c21d132a","unresolved":false,"context_lines":[{"line_number":550,"context_line":"            compatible connection_info dict"},{"line_number":551,"context_line":"        \"\"\""},{"line_number":552,"context_line":"        try:"},{"line_number":553,"context_line":"            attachment_ref \u003d cinderclient(context, \u00273.27\u0027).attachments.create("},{"line_number":554,"context_line":"                volume_id, connector, instance_id)"},{"line_number":555,"context_line":"            return _translate_attachment_ref(attachment_ref)"},{"line_number":556,"context_line":"        except cinder_exception.ClientException as ex:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_82890e76","line":553,"range":{"start_line":553,"start_character":51,"end_line":553,"end_character":57},"updated":"2017-09-07 14:28:51.000000000","message":"I think it would be best to bump all of these to 3.44, just so we don\u0027t get failures where attachment_create works by the attachment_complete fails? Or is the another case we want to support here?","commit_id":"31b8202b636d94503f73d7b8fc5cb82f5b38b262"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"049fcbfc918e81187d69d16b87485175ad9d9a0f","unresolved":false,"context_lines":[{"line_number":550,"context_line":"            compatible connection_info dict"},{"line_number":551,"context_line":"        \"\"\""},{"line_number":552,"context_line":"        try:"},{"line_number":553,"context_line":"            attachment_ref \u003d cinderclient(context, \u00273.27\u0027).attachments.create("},{"line_number":554,"context_line":"                volume_id, connector, instance_id)"},{"line_number":555,"context_line":"            return _translate_attachment_ref(attachment_ref)"},{"line_number":556,"context_line":"        except cinder_exception.ClientException as ex:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_5f941837","line":553,"range":{"start_line":553,"start_character":51,"end_line":553,"end_character":57},"in_reply_to":"7f287b81_82890e76","updated":"2017-09-07 20:16:40.000000000","message":"I was just about to comment the same. We really need to be at the highest minimum we require now before we start the whole attach flow, and that\u0027s 3.44 at this point.","commit_id":"31b8202b636d94503f73d7b8fc5cb82f5b38b262"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"049fcbfc918e81187d69d16b87485175ad9d9a0f","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        \"\"\""},{"line_number":617,"context_line":"        try:"},{"line_number":618,"context_line":"            cinderclient("},{"line_number":619,"context_line":"                context, \u00273.44\u0027, skip_version_check\u003dTrue).attachments.complete("},{"line_number":620,"context_line":"                    attachment_id)"},{"line_number":621,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":622,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_1f9a1061","line":619,"range":{"start_line":619,"start_character":33,"end_line":619,"end_character":56},"updated":"2017-09-07 20:16:40.000000000","message":"This is wrong. skip_version_check is True for update/delete because we\u0027d only call those if attachment_create passed and 3.27 was available, but that\u0027s not the same for attachment_complete which is a newer microversion.","commit_id":"31b8202b636d94503f73d7b8fc5cb82f5b38b262"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"939414e8d25eca05a5950a6c8876ea93bd079acc","unresolved":false,"context_lines":[{"line_number":537,"context_line":"    @translate_volume_exception"},{"line_number":538,"context_line":"    def attachment_create(self, context, volume_id, instance_id,"},{"line_number":539,"context_line":"                          connector\u003dNone):"},{"line_number":540,"context_line":"        \"\"\"Create a volume attachment. This requires microversion \u003e\u003d 3.44."},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        :param context: The nova request context."},{"line_number":543,"context_line":"        :param volume_id: UUID of the volume on which to create the attachment."}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_50e36906","line":540,"updated":"2017-09-11 19:23:31.000000000","message":"This might be confusing if anyone ever realizes a year from now that actually \u003e\u003d 3.27 is what\u0027s the minimum requirement, but meh.","commit_id":"3ebe41277a34c43114a8ff81835c5b786ce452b9"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"663129b153ca4a170c497dee6dc04039eb84b976","unresolved":false,"context_lines":[{"line_number":537,"context_line":"    @translate_volume_exception"},{"line_number":538,"context_line":"    def attachment_create(self, context, volume_id, instance_id,"},{"line_number":539,"context_line":"                          connector\u003dNone):"},{"line_number":540,"context_line":"        \"\"\"Create a volume attachment. This requires microversion \u003e\u003d 3.44."},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        :param context: The nova request context."},{"line_number":543,"context_line":"        :param volume_id: UUID of the volume on which to create the attachment."}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_b37df76f","line":540,"in_reply_to":"5f2577a7_50e36906","updated":"2017-09-11 19:48:56.000000000","message":"I have a few bits and pieces to clean up in this file as formatting, so I can write a longer prose to clarify that we need attachment_complete which results in limiting to \u00273.44\u0027 when I do that.","commit_id":"3ebe41277a34c43114a8ff81835c5b786ce452b9"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"38c980fa05197580855777e9755e868bc0611353","unresolved":false,"context_lines":[{"line_number":537,"context_line":"    @translate_volume_exception"},{"line_number":538,"context_line":"    def attachment_create(self, context, volume_id, instance_id,"},{"line_number":539,"context_line":"                          connector\u003dNone):"},{"line_number":540,"context_line":"        \"\"\"Create a volume attachment. This requires microversion \u003e\u003d 3.44."},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        :param context: The nova request context."},{"line_number":543,"context_line":"        :param volume_id: UUID of the volume on which to create the attachment."}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_7fbba4c3","line":540,"in_reply_to":"5f2577a7_b37df76f","updated":"2017-09-13 02:47:32.000000000","message":"Done","commit_id":"3ebe41277a34c43114a8ff81835c5b786ce452b9"}]}
