)]}'
{"cinderclient/exceptions.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ecd07f46c61c3729015b06cca93e1109e724286e","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"class DetachVolumeFailedNoAttachments(BadRequest):"},{"line_number":167,"context_line":"    err_pattern \u003d (\u0027.*Detach volume failed, because there are currently no \u0027"},{"line_number":168,"context_line":"                   \u0027active attachments.$\u0027)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"_err_pattern_map \u003d dict("}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_bd56b2cc","line":168,"updated":"2015-08-07 22:14:07.000000000","message":"So this relies on the error message. This is thrown in detach_volume in volume manager and caught by the os-detach volume action. If this error message is changed, we can\u0027t find a match any more. I wonder if we should create a specific exception for this in cinder/exception.py and add the exception name in the error message and search for that instead, but someone could still remove it and break the match.\n\nIf we are going to fix it this way, we\u0027ll have to make sure everyone is on the same page so we won\u0027t break the client by changing the error messages.","commit_id":"9ae50342739fa996add6193a05b1a9217197e307"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"c76c84ee37e8e067bc98ed2747985a89b887a3f6","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"class DetachVolumeFailedNoAttachments(BadRequest):"},{"line_number":167,"context_line":"    err_pattern \u003d (\u0027.*Detach volume failed, because there are currently no \u0027"},{"line_number":168,"context_line":"                   \u0027active attachments.$\u0027)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"_err_pattern_map \u003d dict("}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_fdfd95b1","line":168,"in_reply_to":"1a4dcd0f_59ea9e75","updated":"2015-08-11 17:34:29.000000000","message":"wouldn\u0027t that be an \"API Change ?\"","commit_id":"9ae50342739fa996add6193a05b1a9217197e307"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5e9e21482708f50313aa2fa91b975a9ba4099773","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"class DetachVolumeFailedNoAttachments(BadRequest):"},{"line_number":167,"context_line":"    err_pattern \u003d (\u0027.*Detach volume failed, because there are currently no \u0027"},{"line_number":168,"context_line":"                   \u0027active attachments.$\u0027)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"_err_pattern_map \u003d dict("}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_59ea9e75","line":168,"in_reply_to":"1a4dcd0f_bd56b2cc","updated":"2015-08-11 17:23:29.000000000","message":"Yeah, it\u0027s definitely brittle.  I originally thought about creating a specific exception in cinder.exceptions for this error message and then putting a big fat comment next to it that says basically, \u0027don\u0027t change this since cinderclient keys off it\u0027.  I could still do that if you think it\u0027s a good addition.","commit_id":"9ae50342739fa996add6193a05b1a9217197e307"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d93570c299b10c31b4b663d5fd8957c6b9d766bd","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"class DetachVolumeFailedNoAttachments(BadRequest):"},{"line_number":167,"context_line":"    err_pattern \u003d (\u0027.*Detach volume failed, because there are currently no \u0027"},{"line_number":168,"context_line":"                   \u0027active attachments.$\u0027)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"_err_pattern_map \u003d dict("}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_8f93e95a","line":168,"in_reply_to":"1a4dcd0f_fdfd95b1","updated":"2015-08-12 01:35:02.000000000","message":"I\u0027m honestly not sure, I don\u0027t think I\u0027ve ever seen someone define a user-facing error message change as an API change, but if you have client code parsing it, then I guess you could argue that it is.  I\u0027ve definitely seen it as a string freeze issue during string freeze, but that\u0027s different, that\u0027s just for translation.\n\nLong-term there is some work going on in the API working group to define unique codes for errors so that the client can key off a hash that doesn\u0027t change rather than the error message.  That\u0027s what we\u0027d eventually want to be using but I think that policy getting defined and agreed upon is going to take awhile.","commit_id":"9ae50342739fa996add6193a05b1a9217197e307"}]}
