)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"22aa8bfad099813d9e431ea4c8b2a5a90897d341","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Amy Fong \u003camy.fong@windriver.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-03 14:27:53 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Modify force-delete to query nova for attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Failures in communication between nova and cinder and result in an"},{"line_number":10,"context_line":"instance being deleted but the attached volume is not properly marked"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba5da102_be33f312","line":7,"updated":"2016-11-03 18:33:00.000000000","message":"Nova is not queried here, need to update the summary.","commit_id":"1e82c5e0a3595c9ee448e7385b30348f2c36a73b"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"bac5fc127dbdb31e6c4e74abd2aa6b2431e58913","unresolved":false,"context_lines":[{"line_number":3257,"context_line":"                                           attach_status \u003d \u0027attached\u0027)"},{"line_number":3258,"context_line":""},{"line_number":3259,"context_line":"        # delete with force"},{"line_number":3260,"context_line":"        self.volume_api.delete(self.context, volume, force\u003dTrue)"},{"line_number":3261,"context_line":""},{"line_number":3262,"context_line":"        # status is deleting"},{"line_number":3263,"context_line":"        volume \u003d objects.Volume.get_by_id(self.context, volume.id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5da102_82eae20d","line":3260,"updated":"2016-10-31 12:54:16.000000000","message":"Where does nova.API().get_server() is mocked in those unit test ?","commit_id":"c37a81544111b30e88cc9d3991cfaa18a9935add"}],"cinder/volume/api.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"d1625bd9cea7d4c27f225fd8a113ea767682e5c5","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                               \u0027id\u0027: volume.id})"},{"line_number":395,"context_line":"            return"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        if volume[\u0027attach_status\u0027] \u003d\u003d \"attached\":"},{"line_number":398,"context_line":"            # Volume is still attached, need to detach it first"},{"line_number":399,"context_line":"            # In some cases, the nova instance is deleted, but the message"},{"line_number":400,"context_line":"            # doesn\u0027t reach cinder and the volume thinks it\u0027s still attached."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_e0cf44ae","line":397,"range":{"start_line":397,"start_character":7,"end_line":397,"end_character":49},"updated":"2016-10-28 07:13:51.000000000","message":"I would like to move the logic to an independent method to make it readable and easy to test","commit_id":"43bf99da9743af131c694afc9b1c5ef9c0607e6c"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"1ca88ebd1bba0bd7d6196cce02b5479a91a47419","unresolved":false,"context_lines":[{"line_number":403,"context_line":"            # continues only if nova return that the instance is actually gone."},{"line_number":404,"context_line":"            # For any other exception, we cancel the deletion."},{"line_number":405,"context_line":"            if force:"},{"line_number":406,"context_line":"                LOG.info(_LI(\u0027Forcing volume deletion on id %s. \u0027"},{"line_number":407,"context_line":"                             \u0027Checking if the volume is still \u0027"},{"line_number":408,"context_line":"                             \u0027attached to nova instances.\u0027),"},{"line_number":409,"context_line":"                         volume.id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_4d0108ae","line":406,"updated":"2016-10-28 08:22:43.000000000","message":"nit: s/Forcing volume deletion on id %s/Forcing deletion on volume %s/","commit_id":"43bf99da9743af131c694afc9b1c5ef9c0607e6c"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"1ca88ebd1bba0bd7d6196cce02b5479a91a47419","unresolved":false,"context_lines":[{"line_number":405,"context_line":"            if force:"},{"line_number":406,"context_line":"                LOG.info(_LI(\u0027Forcing volume deletion on id %s. \u0027"},{"line_number":407,"context_line":"                             \u0027Checking if the volume is still \u0027"},{"line_number":408,"context_line":"                             \u0027attached to nova instances.\u0027),"},{"line_number":409,"context_line":"                         volume.id)"},{"line_number":410,"context_line":"                attachments \u003d volume[\u0027volume_attachment\u0027]"},{"line_number":411,"context_line":"                volume_can_be_deleted \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_cd46f822","line":408,"updated":"2016-10-28 08:22:43.000000000","message":"nit: s/to nova instance/to a nova instance/","commit_id":"43bf99da9743af131c694afc9b1c5ef9c0607e6c"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"1ca88ebd1bba0bd7d6196cce02b5479a91a47419","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                    except exception.APITimeout:"},{"line_number":423,"context_line":"                        volume_can_be_deleted \u003d False"},{"line_number":424,"context_line":"                        LOG.error(_LE(\u0027Nova API Timeout \u0027"},{"line_number":425,"context_line":"                                      \u0027for instance %s.\u0027),"},{"line_number":426,"context_line":"                                  instance_uuid)"},{"line_number":427,"context_line":"                    except Exception as e:"},{"line_number":428,"context_line":"                        LOG.error(_LE(\u0027Nova API exception. \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_2df214d3","line":425,"updated":"2016-10-28 08:22:43.000000000","message":"Should also printout the volume id here.","commit_id":"43bf99da9743af131c694afc9b1c5ef9c0607e6c"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"1ca88ebd1bba0bd7d6196cce02b5479a91a47419","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                        volume_can_be_deleted \u003d False"},{"line_number":432,"context_line":"                if not volume_can_be_deleted:"},{"line_number":433,"context_line":"                    LOG.info(_LI(\u0027Volume %s is still attached \u0027"},{"line_number":434,"context_line":"                                 \u0027or could not get instances\u0027),"},{"line_number":435,"context_line":"                             volume.id)"},{"line_number":436,"context_line":"                    raise exception.VolumeAttached(volume_id\u003dvolume.id)"},{"line_number":437,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_0dcc7088","line":434,"updated":"2016-10-28 08:22:43.000000000","message":"nit: s/instances/instance/","commit_id":"43bf99da9743af131c694afc9b1c5ef9c0607e6c"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"0ced5f6243db6a8ab1cd193e19b66aa2d8e40509","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        # instance is actually present"},{"line_number":358,"context_line":"        may_have_instance \u003d False"},{"line_number":359,"context_line":"        attachments \u003d volume[\u0027volume_attachment\u0027]"},{"line_number":360,"context_line":"        for attachment in attachments:"},{"line_number":361,"context_line":"            instance_uuid \u003d attachment[\u0027instance_uuid\u0027]"},{"line_number":362,"context_line":"            try:"},{"line_number":363,"context_line":"                nova.API().get_server(context, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5da102_a87d0eb3","line":360,"range":{"start_line":360,"start_character":8,"end_line":360,"end_character":38},"updated":"2016-10-31 10:29:54.000000000","message":"maybe we should use for - else construction with break instead of using flag? if we already change may_have_instance flag to True state, why do we need to look through the other attachments? Or we need it just to log every attachment state?","commit_id":"c37a81544111b30e88cc9d3991cfaa18a9935add"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"0bedd680db0a5438346d569eeb7d1116e51d6b90","unresolved":false,"context_lines":[{"line_number":361,"context_line":"            instance_uuid \u003d attachment[\u0027instance_uuid\u0027]"},{"line_number":362,"context_line":"            try:"},{"line_number":363,"context_line":"                nova.API().get_server(context, instance_uuid)"},{"line_number":364,"context_line":"                may_have_instance \u003d True"},{"line_number":365,"context_line":"                break"},{"line_number":366,"context_line":"            except exception.ServerNotFound:"},{"line_number":367,"context_line":"                LOG.info(_LI(\u0027Nova instance %(uuid)s \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_f7704842","line":364,"range":{"start_line":364,"start_character":16,"end_line":364,"end_character":40},"updated":"2016-11-03 10:03:27.000000000","message":"if you use for/else construction, you don\u0027t need this flag.\nhttp://book.pythontips.com/en/latest/for_-_else.html","commit_id":"5c9482d0f597c56fe6f280c0fab3332da067db39"}]}
