)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c86c003e422b8f1601fd4229ff5c3752aae78b14","unresolved":false,"context_lines":[{"line_number":3381,"context_line":"                except exception.ImageInUse:"},{"line_number":3382,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s because \""},{"line_number":3383,"context_line":"                             \"it is still in use\", {\u0027image_id\u0027: image_id},"},{"line_number":3384,"context_line":"                             instance\u003dinstance)"},{"line_number":3385,"context_line":""},{"line_number":3386,"context_line":"    @wrap_exception()"},{"line_number":3387,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_8b73c8e7","line":3384,"range":{"start_line":3384,"start_character":46,"end_line":3384,"end_character":47},"updated":"2017-12-04 14:29:03.000000000","message":"can we catch all other exception also in case anything else being raised from glance side, which make sure we log and delete the other images.\n\nexcept Exception:","commit_id":"fed4712df12aa33f376dace7469a1cf9ff59723a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"715c08420390d0742090cb716ce2f3a17494b2bc","unresolved":false,"context_lines":[{"line_number":3379,"context_line":"                             \"delete\", {\u0027image_id\u0027: image_id},"},{"line_number":3380,"context_line":"                             instance\u003dinstance)"},{"line_number":3381,"context_line":"                except exception.ImageDeleteConflict as exc:"},{"line_number":3382,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s because \""},{"line_number":3383,"context_line":"                             \"it is conflicted to delete %(exc)s\","},{"line_number":3384,"context_line":"                             {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"},{"line_number":3385,"context_line":"                             instance\u003dinstance)"},{"line_number":3386,"context_line":"                except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_0ce572a8","line":3383,"range":{"start_line":3382,"start_character":30,"end_line":3383,"end_character":64},"updated":"2017-12-05 13:08:43.000000000","message":"will this become \nFailed to delete image xxx because it is conflicted to delete Conflict deleting image xxx ?\n\nmaybe make it better format?","commit_id":"0bc9e1cf721c6023e69813509c1a987cd68dffae"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8be7dac8499458ea87b75070b7b1cbdfa676f330","unresolved":false,"context_lines":[{"line_number":3379,"context_line":"                             \"delete\", {\u0027image_id\u0027: image_id},"},{"line_number":3380,"context_line":"                             instance\u003dinstance)"},{"line_number":3381,"context_line":"                except exception.ImageDeleteConflict:"},{"line_number":3382,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s because it \""},{"line_number":3383,"context_line":"                             \"is conflicted to delete\", {\u0027image_id\u0027: image_id},"},{"line_number":3384,"context_line":"                             instance\u003dinstance)"},{"line_number":3385,"context_line":"                except Exception as exc:"},{"line_number":3386,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s because \""},{"line_number":3387,"context_line":"                             \"%(exc)s\", {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_8f787d2a","line":3384,"range":{"start_line":3382,"start_character":28,"end_line":3384,"end_character":47},"updated":"2017-12-06 08:15:59.000000000","message":"we should log glance\u0027s exception error message which tells whether conflict if due to inUse or HasSnapshot.","commit_id":"d338c32690692aedad060d2ba3ab17a3f3c74290"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"671818a47d499b08b1545083e7c13f5f4ae7288d","unresolved":false,"context_lines":[{"line_number":3379,"context_line":"                             \"delete\", {\u0027image_id\u0027: image_id},"},{"line_number":3380,"context_line":"                             instance\u003dinstance)"},{"line_number":3381,"context_line":"                except exception.ImageDeleteConflict as exc:"},{"line_number":3382,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s because \""},{"line_number":3383,"context_line":"                             \"%(exc)s\", {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"},{"line_number":3384,"context_line":"                             instance\u003dinstance)"},{"line_number":3385,"context_line":"                except Exception as exc:"},{"line_number":3386,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s because \""},{"line_number":3387,"context_line":"                             \"%(exc)s\", {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_74a13694","line":3384,"range":{"start_line":3382,"start_character":20,"end_line":3384,"end_character":47},"updated":"2017-12-07 01:45:17.000000000","message":"we can make it more better something like below-\n\nLOG.info(\"Failed to delete image during deleting \"\n         \"excess backups. Continuing for next image.. \"\n         \"%(exc)s\", {\u0027exc\u0027: exc},\n         instance\u003dinstance)","commit_id":"0e9670cba3b3103f8fb657dcb0064a99182c32c6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"671818a47d499b08b1545083e7c13f5f4ae7288d","unresolved":false,"context_lines":[{"line_number":3383,"context_line":"                             \"%(exc)s\", {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"},{"line_number":3384,"context_line":"                             instance\u003dinstance)"},{"line_number":3385,"context_line":"                except Exception as exc:"},{"line_number":3386,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s because \""},{"line_number":3387,"context_line":"                             \"%(exc)s\", {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"},{"line_number":3388,"context_line":"                             instance\u003dinstance)"},{"line_number":3389,"context_line":""},{"line_number":3390,"context_line":"    @wrap_exception()"},{"line_number":3391,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_94e4fae1","line":3388,"range":{"start_line":3386,"start_character":0,"end_line":3388,"end_character":47},"updated":"2017-12-07 01:45:17.000000000","message":"ditto-\n\n\nLOG.info(\"Failed to delete image %(image_id)s during deleting \"\n         \"excess backups. Continuing for next image.. \"\n         \"%(exc)s\", {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},\n         instance\u003dinstance)","commit_id":"0e9670cba3b3103f8fb657dcb0064a99182c32c6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"018c14dd10ee4970fd8c0957c90a57bd18ab06c0","unresolved":false,"context_lines":[{"line_number":3399,"context_line":"                    LOG.info(\"Failed to find image %(image_id)s to \""},{"line_number":3400,"context_line":"                             \"delete\", {\u0027image_id\u0027: image_id},"},{"line_number":3401,"context_line":"                             instance\u003dinstance)"},{"line_number":3402,"context_line":"                except exception.ImageDeleteConflict as exc:"},{"line_number":3403,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s \""},{"line_number":3404,"context_line":"                             \"during deleting excess backups. \""},{"line_number":3405,"context_line":"                             \"Continuing for next image.. %(exc)s\","},{"line_number":3406,"context_line":"                             {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"},{"line_number":3407,"context_line":"                             instance\u003dinstance)"},{"line_number":3408,"context_line":"                except Exception as exc:"},{"line_number":3409,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s \""},{"line_number":3410,"context_line":"                             \"during deleting excess backups. \""},{"line_number":3411,"context_line":"                             \"Continuing for next image.. %(exc)s\","},{"line_number":3412,"context_line":"                             {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"},{"line_number":3413,"context_line":"                             instance\u003dinstance)"},{"line_number":3414,"context_line":""},{"line_number":3415,"context_line":"    @wrap_exception()"},{"line_number":3416,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf8cb3f7_b6bfe3f9","line":3413,"range":{"start_line":3402,"start_character":0,"end_line":3413,"end_character":47},"updated":"2017-12-27 09:02:50.000000000","message":"This two except block can be squashed to a single block as both has the same body; like:\n\n    except (exception.ImageDeleteConflict, Exception) as exc:\n        # the common body\n\nYou can even drop \u0027exception.ImageDeleteConflict\u0027 from the exception type list as exception.ImageDeleteConflict derives from Exception","commit_id":"1117645cd30a44a470c9820c49b2d8ba3a693f80"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8b55411cf20cc7632df0a3236a7c99e44799a02f","unresolved":false,"context_lines":[{"line_number":3399,"context_line":"                    LOG.info(\"Failed to find image %(image_id)s to \""},{"line_number":3400,"context_line":"                             \"delete\", {\u0027image_id\u0027: image_id},"},{"line_number":3401,"context_line":"                             instance\u003dinstance)"},{"line_number":3402,"context_line":"                except exception.ImageDeleteConflict as exc:"},{"line_number":3403,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s \""},{"line_number":3404,"context_line":"                             \"during deleting excess backups. \""},{"line_number":3405,"context_line":"                             \"Continuing for next image.. %(exc)s\","},{"line_number":3406,"context_line":"                             {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"},{"line_number":3407,"context_line":"                             instance\u003dinstance)"},{"line_number":3408,"context_line":"                except Exception as exc:"},{"line_number":3409,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s \""},{"line_number":3410,"context_line":"                             \"during deleting excess backups. \""},{"line_number":3411,"context_line":"                             \"Continuing for next image.. %(exc)s\","},{"line_number":3412,"context_line":"                             {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"},{"line_number":3413,"context_line":"                             instance\u003dinstance)"},{"line_number":3414,"context_line":""},{"line_number":3415,"context_line":"    @wrap_exception()"},{"line_number":3416,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf8cb3f7_3699936d","line":3413,"range":{"start_line":3402,"start_character":0,"end_line":3413,"end_character":47},"in_reply_to":"bf8cb3f7_b6bfe3f9","updated":"2017-12-27 09:18:57.000000000","message":"or we should provide a dedicated message for catch exception.ImageDeleteConflict.","commit_id":"1117645cd30a44a470c9820c49b2d8ba3a693f80"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"67e801af78c021d8cc5edcd2baa79c91d9d9ca26","unresolved":false,"context_lines":[{"line_number":3401,"context_line":"                             instance\u003dinstance)"},{"line_number":3402,"context_line":"                except exception.ImageDeleteConflict as exc:"},{"line_number":3403,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s during \""},{"line_number":3404,"context_line":"                             \"deleting excess backups, probably because \""},{"line_number":3405,"context_line":"                             \"image is in use or has snapshot in backend. \""},{"line_number":3406,"context_line":"                             \"Continuing for next image.. %(exc)s\","},{"line_number":3407,"context_line":"                             {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"},{"line_number":3408,"context_line":"                             instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_09e4b6ab","line":3405,"range":{"start_line":3404,"start_character":55,"end_line":3405,"end_character":72},"updated":"2018-01-01 05:17:05.000000000","message":"i would like to avoid this as %(exc)s print the detailed info. \n\nI like the gibi idea to merge both and let %(exc)s show the detail.\n\nExample Exception with msg: \n\nDec 10 12:12:23 openstack-nti-7 nova-compute[2648]: INFO nova.compute.manager [None req-f277dbb2-a82b-4b1d-a483-0e94f7610616 admin admin] [instance: f56fa4fc-7fe8-492c-b8f5-d2e38e239ed2] Failed to delete image 2d0d8825-dd86-4b8f-a311-f59879f1d248 during deleting excess backups. Continuing for next image.. Conflict deleting image. Reason: 409 Conflict: Image 2d0d8825-dd86-4b8f-a311-f59879f1d248 could not be deleted because it is in use: The image cannot be deleted because it is in use through the backend store outside of Glance. (HTTP 409).","commit_id":"7a3cba2c3231fb30dd6278a60187ebd5e1fe0f68"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"df734853b0da3f4a35085c6f6e5b17eb45479bfa","unresolved":false,"context_lines":[{"line_number":3408,"context_line":"                             instance\u003dinstance)"},{"line_number":3409,"context_line":"                except Exception as exc:"},{"line_number":3410,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s during \""},{"line_number":3411,"context_line":"                             \"deleting excess backups because of unknown \""},{"line_number":3412,"context_line":"                             \"exception. Continuing for next image.. %(exc)s\","},{"line_number":3413,"context_line":"                             {\u0027image_id\u0027: image_id, \u0027exc\u0027: exc},"},{"line_number":3414,"context_line":"                             instance\u003dinstance)"},{"line_number":3415,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_b39d1068","line":3412,"range":{"start_line":3411,"start_character":53,"end_line":3412,"end_character":40},"updated":"2017-12-28 09:25:28.000000000","message":"You can drop this as %(exc)s is printed as well making the actual exception known.","commit_id":"7a3cba2c3231fb30dd6278a60187ebd5e1fe0f68"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b0ec00c76f76a03fa02479bfe38342ff220d0cfb","unresolved":false,"context_lines":[{"line_number":3401,"context_line":"                    LOG.info(\"Failed to find image %(image_id)s to \""},{"line_number":3402,"context_line":"                             \"delete\", {\u0027image_id\u0027: image_id},"},{"line_number":3403,"context_line":"                             instance\u003dinstance)"},{"line_number":3404,"context_line":"                except (exception.ImageDeleteConflict, Exception) as exc:"},{"line_number":3405,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s during \""},{"line_number":3406,"context_line":"                             \"deleting excess backups. \""},{"line_number":3407,"context_line":"                             \"Continuing for next image.. %(exc)s\","}],"source_content_type":"text/x-python","patch_set":14,"id":"df7087c5_cd26c0b8","line":3404,"range":{"start_line":3404,"start_character":24,"end_line":3404,"end_character":64},"updated":"2018-03-08 14:02:34.000000000","message":"What is the point in handling ImageDeleteConflict explicitly if we\u0027re just going to also handle the generic Exception?","commit_id":"3e766e5bd429c6119c077b8be02360ae1e1ec8bd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d97d2c97dcd84e809e94862abf819bf5277c1509","unresolved":false,"context_lines":[{"line_number":3401,"context_line":"                    LOG.info(\"Failed to find image %(image_id)s to \""},{"line_number":3402,"context_line":"                             \"delete\", {\u0027image_id\u0027: image_id},"},{"line_number":3403,"context_line":"                             instance\u003dinstance)"},{"line_number":3404,"context_line":"                except (exception.ImageDeleteConflict, Exception) as exc:"},{"line_number":3405,"context_line":"                    LOG.info(\"Failed to delete image %(image_id)s during \""},{"line_number":3406,"context_line":"                             \"deleting excess backups. \""},{"line_number":3407,"context_line":"                             \"Continuing for next image.. %(exc)s\","}],"source_content_type":"text/x-python","patch_set":14,"id":"df7087c5_aadd2443","line":3404,"range":{"start_line":3404,"start_character":24,"end_line":3404,"end_character":64},"in_reply_to":"df7087c5_cd26c0b8","updated":"2018-03-12 18:57:03.000000000","message":"Yeah, I think this should just be Exception. We must not have noticed it after the last cleanup rev.","commit_id":"3e766e5bd429c6119c077b8be02360ae1e1ec8bd"}],"nova/exception.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"715c08420390d0742090cb716ce2f3a17494b2bc","unresolved":false,"context_lines":[{"line_number":654,"context_line":""},{"line_number":655,"context_line":"class ImageDeleteConflict(NovaException):"},{"line_number":656,"context_line":"    msg_fmt \u003d _(\"Conflict deleting image %(image_id)s.\")"},{"line_number":657,"context_line":"    code \u003d 409"},{"line_number":658,"context_line":""},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"class PreserveEphemeralNotSupported(Invalid):"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_6cd67ec6","line":657,"range":{"start_line":657,"start_character":3,"end_line":657,"end_character":14},"updated":"2017-12-05 13:08:43.000000000","message":"as you don\u0027t expose this to outside nova, this code seems useless","commit_id":"0bc9e1cf721c6023e69813509c1a987cd68dffae"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"671818a47d499b08b1545083e7c13f5f4ae7288d","unresolved":false,"context_lines":[{"line_number":653,"context_line":""},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"class ImageDeleteConflict(NovaException):"},{"line_number":656,"context_line":"    msg_fmt \u003d _(\"Conflict deleting image %(image_id)s.\")"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"class PreserveEphemeralNotSupported(Invalid):"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_74e5b608","line":656,"range":{"start_line":656,"start_character":16,"end_line":656,"end_character":55},"updated":"2017-12-07 01:45:17.000000000","message":"can we make it to accept the complete message what glance is returning. \nsomething like this:\n\"Conflict deleting image. Reason: %(reason)s.\"","commit_id":"0e9670cba3b3103f8fb657dcb0064a99182c32c6"}],"nova/image/glance.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1b93091a060995da24efe72711ac1512fa059742","unresolved":false,"context_lines":[{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        :raises: ImageNotFound if the image does not exist."},{"line_number":553,"context_line":"        :raises: NotAuthorized if the user is not an owner."},{"line_number":554,"context_line":"        :raises: ImageNotAuthorized if the user is not authorized."},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        \"\"\""},{"line_number":557,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff82abbf_f67c1d73","line":554,"updated":"2017-11-28 19:07:04.000000000","message":"nit: need to update here for ImageInUse.","commit_id":"d545a05ab4a34836108dbf51712455f8f071c304"},{"author":{"_account_id":26651,"name":"Wangpan","email":"wangpan@yunrongtech.com","username":"Wangpan"},"change_message_id":"d39c2cd91049ac758d8c801a53a109eb83da005b","unresolved":false,"context_lines":[{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        :raises: ImageNotFound if the image does not exist."},{"line_number":553,"context_line":"        :raises: NotAuthorized if the user is not an owner."},{"line_number":554,"context_line":"        :raises: ImageNotAuthorized if the user is not authorized."},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        \"\"\""},{"line_number":557,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff82abbf_ff9dcabb","line":554,"in_reply_to":"ff82abbf_f67c1d73","updated":"2017-11-29 01:18:07.000000000","message":"Done","commit_id":"d545a05ab4a34836108dbf51712455f8f071c304"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"32cb1be2b0f893abb73e2472abc5c83474015fad","unresolved":false,"context_lines":[{"line_number":561,"context_line":"            raise exception.ImageNotFound(image_id\u003dimage_id)"},{"line_number":562,"context_line":"        except glanceclient.exc.HTTPForbidden:"},{"line_number":563,"context_line":"            raise exception.ImageNotAuthorized(image_id\u003dimage_id)"},{"line_number":564,"context_line":"        except glanceclient.exc.HTTPConflict:"},{"line_number":565,"context_line":"            raise exception.ImageInUse(image_id\u003dimage_id)"},{"line_number":566,"context_line":"        return True"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_0bcc9833","line":565,"range":{"start_line":564,"start_character":0,"end_line":565,"end_character":57},"updated":"2017-12-04 14:25:00.000000000","message":"HTTPConflict can be raised if exception HasSnapshot occur during image delete [1]\n\nWe should raise some more generic one like \u0027ImageConflict\u0027 and use the error message returned from glance which take care of both cases (inUse and HasSnapshot)\n\n..1 https://github.com/openstack/glance/blob/044f6f8488e0d1c9f164fd7414916e6fd3e4e903/glance/api/v2/images.py#L290","commit_id":"fed4712df12aa33f376dace7469a1cf9ff59723a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"671818a47d499b08b1545083e7c13f5f4ae7288d","unresolved":false,"context_lines":[{"line_number":561,"context_line":"            raise exception.ImageNotFound(image_id\u003dimage_id)"},{"line_number":562,"context_line":"        except glanceclient.exc.HTTPForbidden:"},{"line_number":563,"context_line":"            raise exception.ImageNotAuthorized(image_id\u003dimage_id)"},{"line_number":564,"context_line":"        except glanceclient.exc.HTTPConflict:"},{"line_number":565,"context_line":"            raise exception.ImageDeleteConflict(image_id\u003dimage_id)"},{"line_number":566,"context_line":"        return True"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_344f2e35","line":565,"range":{"start_line":564,"start_character":0,"end_line":565,"end_character":66},"updated":"2017-12-07 01:45:17.000000000","message":"to get glance error message in manager.py, you need to get exc here and pass the exc.format_message() in ImageDeleteConflict. \n\nimage_id is not needed to pass as that will be embedded in exc from glance.\n\nwe can do something like-\n        except glanceclient.exc.HTTPConflict as exc:\n            raise exception.ImageDeleteConflict(reason\u003dexc.format_message())\n\nBut please test the generated error message in case we missed anything.","commit_id":"0e9670cba3b3103f8fb657dcb0064a99182c32c6"},{"author":{"_account_id":26651,"name":"Wangpan","email":"wangpan@yunrongtech.com","username":"Wangpan"},"change_message_id":"e4c3e1be6f27b16e6be42f43a03cd79d5783c665","unresolved":false,"context_lines":[{"line_number":561,"context_line":"            raise exception.ImageNotFound(image_id\u003dimage_id)"},{"line_number":562,"context_line":"        except glanceclient.exc.HTTPForbidden:"},{"line_number":563,"context_line":"            raise exception.ImageNotAuthorized(image_id\u003dimage_id)"},{"line_number":564,"context_line":"        except glanceclient.exc.HTTPConflict:"},{"line_number":565,"context_line":"            raise exception.ImageDeleteConflict(image_id\u003dimage_id)"},{"line_number":566,"context_line":"        return True"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_9a75fccd","line":565,"range":{"start_line":564,"start_character":0,"end_line":565,"end_character":66},"in_reply_to":"df87a7cf_344f2e35","updated":"2017-12-07 09:21:03.000000000","message":"Thanks a lot for help.\n\nFYI: I found glanceclient.exc.HTTPConflict does not have method \u0027format_message\u0027, but a \u0027__str__\u0027 instead, so I use str(exc) here.","commit_id":"0e9670cba3b3103f8fb657dcb0064a99182c32c6"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"5d3f743d55893b8beadf68a07e566de815532805","unresolved":false,"context_lines":[{"line_number":3645,"context_line":""},{"line_number":3646,"context_line":"        mock_get_all_images.return_value \u003d fake_images"},{"line_number":3647,"context_line":""},{"line_number":3648,"context_line":"        mock_delete.side_effect \u003d (Exception("},{"line_number":3649,"context_line":"                                   \u0027fake image deleting exception\u0027), None)"},{"line_number":3650,"context_line":""},{"line_number":3651,"context_line":"        self.compute._rotate_backups(self.context, instance\u003dinstance,"},{"line_number":3652,"context_line":"                                     backup_type\u003d\u0027daily\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_58f4855b","line":3649,"range":{"start_line":3648,"start_character":7,"end_line":3649,"end_character":74},"updated":"2017-12-06 03:04:57.000000000","message":"guess this is the only difference of this case and upper case? \ncan we use \ndef _test_xxx()\n\nand for each case then call it to avoid too much duplicate?\nand I think we need assert the log call as well because that\u0027s the only difference for different exceptions.","commit_id":"8b2d5ce4d1f70154ad1acfa528129b99a247a587"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"018c14dd10ee4970fd8c0957c90a57bd18ab06c0","unresolved":false,"context_lines":[{"line_number":3646,"context_line":"                raise Exception(\u0027fake %s delete exception\u0027 % image_id)"},{"line_number":3647,"context_line":"            if image_id \u003d\u003d uuids.image_id_3:"},{"line_number":3648,"context_line":"                raise exception.ImageDeleteConflict(image_id\u003dimage_id)"},{"line_number":3649,"context_line":""},{"line_number":3650,"context_line":"        with mock.patch.object(nova.image.api.API, \u0027delete\u0027,"},{"line_number":3651,"context_line":"                               side_effect\u003d_check_image_id) as mock_delete:"},{"line_number":3652,"context_line":"            self.compute._rotate_backups(self.context, instance\u003dinstance,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf8cb3f7_166faf92","line":3649,"updated":"2017-12-27 09:02:50.000000000","message":"I might add one more backup after image_id_3 to see that the deletion loop continues after exception.ImageDeleteConflict was raised","commit_id":"1117645cd30a44a470c9820c49b2d8ba3a693f80"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"df734853b0da3f4a35085c6f6e5b17eb45479bfa","unresolved":false,"context_lines":[{"line_number":3664,"context_line":""},{"line_number":3665,"context_line":"        with mock.patch.object(nova.image.api.API, \u0027delete\u0027,"},{"line_number":3666,"context_line":"                               side_effect\u003d_check_image_id) as mock_delete:"},{"line_number":3667,"context_line":"            # Fake images 4,3,2 should be rotated in sequence"},{"line_number":3668,"context_line":"            self.compute._rotate_backups(self.context, instance\u003dinstance,"},{"line_number":3669,"context_line":"                                         backup_type\u003d\u0027daily\u0027,"},{"line_number":3670,"context_line":"                                         rotation\u003d1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_4ee17bfe","line":3667,"updated":"2017-12-28 09:25:28.000000000","message":"So it is done in reverse order, that helps explaining the test.","commit_id":"7a3cba2c3231fb30dd6278a60187ebd5e1fe0f68"}],"nova/tests/unit/image/test_glance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"018c14dd10ee4970fd8c0957c90a57bd18ab06c0","unresolved":false,"context_lines":[{"line_number":1583,"context_line":"            expected \u003d (\u0027Conflict deleting image. Reason: %s \u0027"},{"line_number":1584,"context_line":"                        \u0027(HTTP 409).\u0027 % fake_details)"},{"line_number":1585,"context_line":"            self.assertEqual(expected, six.text_type(exc))"},{"line_number":1586,"context_line":""},{"line_number":1587,"context_line":""},{"line_number":1588,"context_line":"class TestGlanceApiServers(test.NoDBTestCase):"},{"line_number":1589,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf8cb3f7_5612170b","line":1586,"updated":"2017-12-27 09:02:50.000000000","message":"This will report false positive result if the client catches the HTTPConflict but does not raise any exception. Please use  self.assertRaises() to verify that the exception is raised.","commit_id":"1117645cd30a44a470c9820c49b2d8ba3a693f80"}]}
