)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"7405c5e3f46f7f1636f9c34d23b457ab4906f707","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0887377d_dc5a0d7a","updated":"2026-01-28 19:54:51.000000000","message":"I\u0027m not sure whether this can be properly tested without running an actual uWSGI server :/","commit_id":"359a0b8fe7e90df55eaca8dfcc6af6b5cc07365e"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"0bb1e348e87af01355d7c816a4770afd9be7afec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ef3748bb_b9def92c","updated":"2026-01-28 22:18:32.000000000","message":"recheck unrelated tempest failure","commit_id":"359a0b8fe7e90df55eaca8dfcc6af6b5cc07365e"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"234c1ad54fb45bbbf805df9443a676bc7d5b202b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2e85038d_40df6d4f","updated":"2026-02-05 13:53:59.000000000","message":"Looks good!!!","commit_id":"2cb83e3dbd4fe1f05495d5168c0e93886f70b8a6"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e5bbcecd938d30477ca5a5e8a56b417704314cec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5aa4abed_c06829db","updated":"2026-02-05 07:14:17.000000000","message":"Looks good, just one suggestion inline.\nAlso verified it is working with manual image-download with caching enabled.","commit_id":"2cb83e3dbd4fe1f05495d5168c0e93886f70b8a6"}],"glance/api/common.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5872827732e35ad40b94ca07b4928eab59ea4c7a","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def size_checked_iter(response, image_meta, expected_size, image_iter,"},{"line_number":36,"context_line":"                      notifier):"},{"line_number":37,"context_line":"    image_id \u003d image_meta[\u0027id\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    class ImageIterator:"},{"line_number":40,"context_line":"        def __init__(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5d6cbfea_6cf3290b","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":31},"updated":"2026-01-29 03:00:21.000000000","message":"Can we add this to an ImageIterator instance, instead of allowing it to access a variable outside of its definition ?\n\n```\ndef size_checked_iter(response, image_meta, expected_size, image_iter,\n                      notifier):\n\n    class ImageIterator:\n        def __init__(self, image_id):\n            self.image_id \u003d image_id\n            self.bytes_written \u003d 0\n            self.iterator \u003d iter(image_iter)\n\n\n    ...\n    \n    return ImageIterator(image_id\u003dimage_meta[\u0027id\u0027])\n```","commit_id":"359a0b8fe7e90df55eaca8dfcc6af6b5cc07365e"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"6fa8c66d1dedd9c8193580b689d533831f154998","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def size_checked_iter(response, image_meta, expected_size, image_iter,"},{"line_number":36,"context_line":"                      notifier):"},{"line_number":37,"context_line":"    image_id \u003d image_meta[\u0027id\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    class ImageIterator:"},{"line_number":40,"context_line":"        def __init__(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"682dc18a_f0f39ce8","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":31},"in_reply_to":"3cd3a71d_4c185f91","updated":"2026-02-05 13:47:12.000000000","message":"Done","commit_id":"359a0b8fe7e90df55eaca8dfcc6af6b5cc07365e"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"cb75556139614cd6f10cf23cedb8efaa859aae61","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def size_checked_iter(response, image_meta, expected_size, image_iter,"},{"line_number":36,"context_line":"                      notifier):"},{"line_number":37,"context_line":"    image_id \u003d image_meta[\u0027id\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    class ImageIterator:"},{"line_number":40,"context_line":"        def __init__(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3cd3a71d_4c185f91","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":31},"in_reply_to":"5d6cbfea_6cf3290b","updated":"2026-01-29 05:10:16.000000000","message":"+1","commit_id":"359a0b8fe7e90df55eaca8dfcc6af6b5cc07365e"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e5bbcecd938d30477ca5a5e8a56b417704314cec","unresolved":true,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        def close(self):"},{"line_number":73,"context_line":"            \"\"\"Called by WSGI server when response is complete.\"\"\""},{"line_number":74,"context_line":"            image_send_notification(self.bytes_written, expected_size,"},{"line_number":75,"context_line":"                                    image_meta, response.request,"},{"line_number":76,"context_line":"                                    notifier)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    return ImageIterator(image_meta[\u0027id\u0027])"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"6fadb72a_43baa79f","line":76,"range":{"start_line":74,"start_character":12,"end_line":76,"end_character":45},"updated":"2026-02-05 07:14:17.000000000","message":"I think we should wrap this in try block and catch generic exception and LOG error as this method is called after the HTTP response is sent. If it fails, we should log the error and not let it propagate, since the response is already complete and notification is a non-critical side effect.","commit_id":"2cb83e3dbd4fe1f05495d5168c0e93886f70b8a6"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"234c1ad54fb45bbbf805df9443a676bc7d5b202b","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        def close(self):"},{"line_number":73,"context_line":"            \"\"\"Called by WSGI server when response is complete.\"\"\""},{"line_number":74,"context_line":"            image_send_notification(self.bytes_written, expected_size,"},{"line_number":75,"context_line":"                                    image_meta, response.request,"},{"line_number":76,"context_line":"                                    notifier)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    return ImageIterator(image_meta[\u0027id\u0027])"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"31e32b59_d8389705","line":76,"range":{"start_line":74,"start_character":12,"end_line":76,"end_character":45},"in_reply_to":"0bcce5a7_3df6b06b","updated":"2026-02-05 13:53:59.000000000","message":"Ohh yes, I didn\u0027t looked at that.","commit_id":"2cb83e3dbd4fe1f05495d5168c0e93886f70b8a6"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"6fa8c66d1dedd9c8193580b689d533831f154998","unresolved":true,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        def close(self):"},{"line_number":73,"context_line":"            \"\"\"Called by WSGI server when response is complete.\"\"\""},{"line_number":74,"context_line":"            image_send_notification(self.bytes_written, expected_size,"},{"line_number":75,"context_line":"                                    image_meta, response.request,"},{"line_number":76,"context_line":"                                    notifier)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    return ImageIterator(image_meta[\u0027id\u0027])"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"0bcce5a7_3df6b06b","line":76,"range":{"start_line":74,"start_character":12,"end_line":76,"end_character":45},"in_reply_to":"6fadb72a_43baa79f","updated":"2026-02-05 13:47:12.000000000","message":"The content of image_send_notification is already wrapped in a try/except that logs the error and prevents it from propagating, so I think it\u0027s not necessary to add a try/except block here?","commit_id":"2cb83e3dbd4fe1f05495d5168c0e93886f70b8a6"}]}
