)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9b25ef3ef20a52aa752e7a282ebe93c78d15e419","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0f334329_c27b7051","updated":"2026-04-02 09:08:26.000000000","message":"I think this patch requires a release note with a fixes entry and an upgrade entry (upgrade is used to mention that the amphora image needs to be rebuilt)","commit_id":"d3abdc276e1d82607f915666e8d9db5999847d0c"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"f95720bd14d3cb60b5fa72152991852456b929ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4f667ea8_804ca156","updated":"2026-04-02 08:40:06.000000000","message":"I\u0027m concerned about catching all exception may have unintended side effects\n\nReviewed with assistance from Claude Code","commit_id":"d3abdc276e1d82607f915666e8d9db5999847d0c"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"344c5ca79633e655f4d0242c6e1b89b2cdaaa884","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4777f473_e9023ab9","in_reply_to":"0f334329_c27b7051","updated":"2026-04-05 13:35:32.000000000","message":"I added a release note as per your feedback, let me know what you think.","commit_id":"d3abdc276e1d82607f915666e8d9db5999847d0c"},{"author":{"_account_id":38360,"name":"Zachary Mark Raines","display_name":"Zachary Raines","email":"zachary.raines@canonical.com","username":"raineszm","status":"Sustaining Engineer @ Canonical"},"change_message_id":"dbb46f0c0a3691ef1ca54f2dc1b64e05c2dd1525","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ae1e98ed_4440ec17","updated":"2026-04-07 22:33:33.000000000","message":"This seems like a good idea to me. Just a few commit message/release note nits.\n\nThe commit message should probably be updated to reflect the fact that we\u0027re now returning information about all exceptions. Maybe just a short explanation of when this change kicks in (if the exception did not already provide a response) and what is returned (the string of the exception), focusing on providing richer feedback from server errors.","commit_id":"8b10db44c7a1a53e4946913cbbdd20b876e0996b"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"499e9a34e77f50261def0697812a436c47fda29c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a72c12b6_af26eb8b","updated":"2026-04-05 23:04:34.000000000","message":"recheck octavia-v2-dsvm-scenario-non-traffic-ops-jobboard timed out","commit_id":"8b10db44c7a1a53e4946913cbbdd20b876e0996b"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"dada26383f4f9661c6c589adeaa87c2b47abea9e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"55852234_5c41380c","in_reply_to":"ae1e98ed_4440ec17","updated":"2026-04-08 19:38:26.000000000","message":"Thanks for the review, I\u0027ve updated the commit message and release note, let me know what you think.","commit_id":"8b10db44c7a1a53e4946913cbbdd20b876e0996b"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"4dd9ed46549ddf9cae674a354d79930adf75b498","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c9d91321_1fe978f0","updated":"2026-04-09 08:13:27.000000000","message":"LGTM","commit_id":"3b2f20159c5281adb87c3efa494cca22a892b6e0"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"30594c02dda808800b203cf5fadf9b9caac761e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"746baf65_f1f6d506","updated":"2026-04-10 14:01:20.000000000","message":"There\u0027s 1 unit test left to update, but once that is fixed it should be good to go","commit_id":"3b2f20159c5281adb87c3efa494cca22a892b6e0"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"ed72435015ac9f24867f406a99408248e7dfafeb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1e111ba5_d26ac614","updated":"2026-06-12 17:50:39.000000000","message":"LGTM","commit_id":"57f528515f6503b55abb0ccf175c6a583558b683"}],"octavia/amphorae/backends/agent/api_server/server.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"f95720bd14d3cb60b5fa72152991852456b929ba","unresolved":true,"context_lines":[{"line_number":158,"context_line":"    def upload_haproxy_config(self, amphora_id, lb_id):"},{"line_number":159,"context_line":"        try:"},{"line_number":160,"context_line":"            return self._loadbalancer.upload_haproxy_config(amphora_id, lb_id)"},{"line_number":161,"context_line":"        except Exception as e:"},{"line_number":162,"context_line":"            return make_json_error("},{"line_number":163,"context_line":"                ex\u003de, message\u003d\u0027Unable to upload haproxy configuration\u0027)"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"c01449ec_e3f73015","line":161,"updated":"2026-04-02 08:40:06.000000000","message":"We\u0027re changing all of the exception handling here which isn\u0027t ideal. IMO these should be limited to OSErrror and IOError since those were the excdeptions causing problems. Same goes for all the other exceptions","commit_id":"d3abdc276e1d82607f915666e8d9db5999847d0c"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"344c5ca79633e655f4d0242c6e1b89b2cdaaa884","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    def upload_haproxy_config(self, amphora_id, lb_id):"},{"line_number":159,"context_line":"        try:"},{"line_number":160,"context_line":"            return self._loadbalancer.upload_haproxy_config(amphora_id, lb_id)"},{"line_number":161,"context_line":"        except Exception as e:"},{"line_number":162,"context_line":"            return make_json_error("},{"line_number":163,"context_line":"                ex\u003de, message\u003d\u0027Unable to upload haproxy configuration\u0027)"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"c5056a1a_cb3c1ced","line":161,"in_reply_to":"a09ec7f1_a1c9fb9e","updated":"2026-04-05 13:35:32.000000000","message":"This changes the exception handling but only for exceptions that doesn\u0027t define their own response. When a `HTTPException` is raised if the code has set it\u0027s own `HTTPException.response` to a `webob.Response` that is used to preserve existing behavior, otherwise instead of just raising a HTTP 500 Internal Server Error with no additional message it defines a new error response format by updating the make_json_error method there.\n\nThat allows operators to just check the error in the controller worker log instead of having to login to amphorae and troubleshoot manually due to the generic \"HTTP 500 Internal Server Error\" response, you\u0027d see it directly in the logs instead in the control plane. We don\u0027t need to be especially careful here since it\u0027s operator facing.","commit_id":"d3abdc276e1d82607f915666e8d9db5999847d0c"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9b25ef3ef20a52aa752e7a282ebe93c78d15e419","unresolved":true,"context_lines":[{"line_number":158,"context_line":"    def upload_haproxy_config(self, amphora_id, lb_id):"},{"line_number":159,"context_line":"        try:"},{"line_number":160,"context_line":"            return self._loadbalancer.upload_haproxy_config(amphora_id, lb_id)"},{"line_number":161,"context_line":"        except Exception as e:"},{"line_number":162,"context_line":"            return make_json_error("},{"line_number":163,"context_line":"                ex\u003de, message\u003d\u0027Unable to upload haproxy configuration\u0027)"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"a09ec7f1_a1c9fb9e","line":161,"in_reply_to":"c01449ec_e3f73015","updated":"2026-04-02 09:08:26.000000000","message":"this is what Flask does internally, except that it only returns an \"Internal server error\" that is not really helpful.\nCatching all the exceptions will help admins to figure out what happened in the amphora","commit_id":"d3abdc276e1d82607f915666e8d9db5999847d0c"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"30594c02dda808800b203cf5fadf9b9caac761e7","unresolved":true,"context_lines":[{"line_number":162,"context_line":"            return make_json_error("},{"line_number":163,"context_line":"                ex\u003de, message\u003d\u0027Unable to upload haproxy configuration\u0027)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def upload_lvs_listener_config(self, amphora_id, listener_id):"},{"line_number":166,"context_line":"        try:"},{"line_number":167,"context_line":"            return self._lvs_listener.upload_lvs_listener_config(listener_id)"},{"line_number":168,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bccf3e5c_302df94a","line":165,"updated":"2026-04-10 14:01:20.000000000","message":"There doesn\u0027t seem to be a unit test for the new exception in this function. The other methods all have tests so I this this one was missed","commit_id":"3b2f20159c5281adb87c3efa494cca22a892b6e0"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"0c7dfaad7337833d821c107ff7eaccaae89c10b4","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            return make_json_error("},{"line_number":163,"context_line":"                ex\u003de, message\u003d\u0027Unable to upload haproxy configuration\u0027)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def upload_lvs_listener_config(self, amphora_id, listener_id):"},{"line_number":166,"context_line":"        try:"},{"line_number":167,"context_line":"            return self._lvs_listener.upload_lvs_listener_config(listener_id)"},{"line_number":168,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":5,"id":"b160827c_972207ae","line":165,"in_reply_to":"bccf3e5c_302df94a","updated":"2026-06-12 15:09:36.000000000","message":"Done, there was no testing before it looks like.","commit_id":"3b2f20159c5281adb87c3efa494cca22a892b6e0"}],"releasenotes/notes/amphorae-return-exceptions-5d254f97e6607823.yaml":[{"author":{"_account_id":38360,"name":"Zachary Mark Raines","display_name":"Zachary Raines","email":"zachary.raines@canonical.com","username":"raineszm","status":"Sustaining Engineer @ Canonical"},"change_message_id":"dbb46f0c0a3691ef1ca54f2dc1b64e05c2dd1525","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The Amphora image needs to be rebuilt and rotated to get the benefits from the"},{"line_number":5,"context_line":"    fix to `bug #2085090 \u003chttps://bugs.launchpad.net/octavia/+bug/2085090\u003e`__ where"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"22093936_f9481172","line":2,"updated":"2026-04-07 22:33:33.000000000","message":"I\u0027d lead the description with what has actually changed (more information in the 500 responses) and then follow up with the what bug it fixes, maybe as a parenthetical. That way users get the most value out first and can read further for references.","commit_id":"8b10db44c7a1a53e4946913cbbdd20b876e0996b"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"dada26383f4f9661c6c589adeaa87c2b47abea9e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The Amphora image needs to be rebuilt and rotated to get the benefits from the"},{"line_number":5,"context_line":"    fix to `bug #2085090 \u003chttps://bugs.launchpad.net/octavia/+bug/2085090\u003e`__ where"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"0743479d_4b1e7b17","line":2,"in_reply_to":"22093936_f9481172","updated":"2026-04-08 19:38:26.000000000","message":"Done","commit_id":"8b10db44c7a1a53e4946913cbbdd20b876e0996b"}]}
