)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9e3edfe44f0fcb17a2f7aeb1f5d172af0eec1904","unresolved":true,"context_lines":[{"line_number":11,"context_line":"message status int."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The swift.proxy_logging_status hint may be used by other middlewares"},{"line_number":14,"context_line":"when the desired logged status is different from the wire_status_int."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Alistair Coles \u003calistairncoles@gmail.com\u003e"},{"line_number":17,"context_line":"Change-Id: I9b5cc6d5fb69a2957b8c4846ce1feed8c115e6b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1b1c2cbe_5f4f6c38","line":14,"updated":"2023-03-22 17:30:50.000000000","message":"Should we at least document this somewhere?","commit_id":"ac4b91b79766d5a9c3eef1331045e481aaf0d95b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bf8f9b4867a8226fcb1940171ae1987d0116dde8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"message status int."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The swift.proxy_logging_status hint may be used by other middlewares"},{"line_number":14,"context_line":"when the desired logged status is different from the wire_status_int."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Alistair Coles \u003calistairncoles@gmail.com\u003e"},{"line_number":17,"context_line":"Change-Id: I9b5cc6d5fb69a2957b8c4846ce1feed8c115e6b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"482ae244_baf59fc0","line":14,"in_reply_to":"1b1c2cbe_5f4f6c38","updated":"2023-05-17 16:06:34.000000000","message":"Done","commit_id":"ac4b91b79766d5a9c3eef1331045e481aaf0d95b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When logging a request, if the request environ has a"},{"line_number":10,"context_line":"swift.proxy_logging_status item then use its value for the log"},{"line_number":11,"context_line":"message status int."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The swift.proxy_logging_status hint may be used by other middlewares"},{"line_number":14,"context_line":"when the desired logged status is different from the wire_status_int."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"c3cef6a8_d0452789","line":11,"updated":"2023-10-27 03:30:44.000000000","message":"there\u0027s a pretty big caveat to this that gets described further down - but this is a reasonable tl;dr","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c4a30de1e70ede249c52f9cc9480c855c70d732d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When logging a request, if the request environ has a"},{"line_number":10,"context_line":"swift.proxy_logging_status item then use its value for the log"},{"line_number":11,"context_line":"message status int."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The swift.proxy_logging_status hint may be used by other middlewares"},{"line_number":14,"context_line":"when the desired logged status is different from the wire_status_int."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"4588ac0e_15282ed8","line":11,"in_reply_to":"c3cef6a8_d0452789","updated":"2024-01-25 19:31:29.000000000","message":"Acknowledged","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":true,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"  * client disconnect overrides swift.proxy_logging_status and the"},{"line_number":21,"context_line":"    response status"},{"line_number":22,"context_line":"  * swift.proxy_logging_status overrides the response status"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-By: Alistair Coles \u003calistairncoles@gmail.com\u003e"},{"line_number":25,"context_line":"Change-Id: I9b5cc6d5fb69a2957b8c4846ce1feed8c115e6b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"8e0d58e4_a0bab96b","line":22,"updated":"2023-10-27 03:30:44.000000000","message":"this seems totally defensible; I wonder if there\u0027s any other scenarios where it would make more sense for proxy logging to override this interface in spite of the middleware requesting we log it\u0027s clean/valid 5XX as 4XX or something similarlly benign?\n\nhttps://review.opendev.org/c/openstack/swift/+/899445","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":true,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"  * client disconnect overrides swift.proxy_logging_status and the"},{"line_number":21,"context_line":"    response status"},{"line_number":22,"context_line":"  * swift.proxy_logging_status overrides the response status"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-By: Alistair Coles \u003calistairncoles@gmail.com\u003e"},{"line_number":25,"context_line":"Change-Id: I9b5cc6d5fb69a2957b8c4846ce1feed8c115e6b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ed85b4bf_febe2fa7","line":22,"in_reply_to":"8e0d58e4_a0bab96b","updated":"2023-10-27 13:10:42.000000000","message":"thanks for those tests. modified so that 500 overrides proxy_logging_status","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c4a30de1e70ede249c52f9cc9480c855c70d732d","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"  * client disconnect overrides swift.proxy_logging_status and the"},{"line_number":21,"context_line":"    response status"},{"line_number":22,"context_line":"  * swift.proxy_logging_status overrides the response status"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-By: Alistair Coles \u003calistairncoles@gmail.com\u003e"},{"line_number":25,"context_line":"Change-Id: I9b5cc6d5fb69a2957b8c4846ce1feed8c115e6b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"0263c68b_b43b8c8c","line":22,"in_reply_to":"ed85b4bf_febe2fa7","updated":"2024-01-25 19:31:29.000000000","message":"Acknowledged","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"496d9334788b5db7ecbdff5108617ab95ee0fe03","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"18826b5b_3c7a27af","updated":"2023-03-15 19:12:54.000000000","message":"@Clay I revived and reduced the scope of this patch","commit_id":"584926d0e924557ccb1d9164c62a51e9e20f9d81"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"050f705d94162bc34801f8533cb6058ec4df5152","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"595c0084_eca89b01","updated":"2023-03-20 15:35:40.000000000","message":"this all seems reasonable enough, since it\u0027s a new interface I\u0027ll hold until I better understand the 499 translation case \n\nis the idea we\u0027re returning 503 to the client but don\u0027t want to LOG it as a server error if the generator gets a ChunkWriteTimeout?  We mostly return 499 on PUT right, do we really ever expect a 503 (with a proxy_logging_status 429) to have a generator body?","commit_id":"ac4b91b79766d5a9c3eef1331045e481aaf0d95b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"aa9f6bb082d9078511a15b9ca2fd1cd98b514de5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"131e91bb_2d709877","updated":"2023-05-24 18:56:21.000000000","message":"WDYT about something like https://paste.opendev.org/show/bU4gEisbGD8dGxu5QT9N/ ?","commit_id":"7b46fe05d8e42a5c8ad477c809ba3e488a368ff9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"69d8794c_ac4a846c","updated":"2023-10-27 03:30:44.000000000","message":"I know we want an interface like this for s3api!  i imagine it could be useful in other contexts as well.","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a63f284990f708b8587fe9705e0c3d2b203d9c58","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"e558b68a_1df8d086","updated":"2023-06-28 21:31:56.000000000","message":"recheck\n\nThe timed out job seemed to still be making progress -- I wonder if maybe we should up our timeouts...","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c4a30de1e70ede249c52f9cc9480c855c70d732d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"c1ed16b5_169ea7d8","updated":"2024-01-25 19:31:29.000000000","message":"just acking some of my useless chatter and resolved comments from previous patches - some of the remaining comments are probably also useless; but Tim had a question I couldn\u0027t answer that i hope shouldn\u0027t have been a blocker.","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"2307a503_ee7ad964","updated":"2024-01-25 19:28:41.000000000","message":"this rocks!\n\n906752: test: swift.proxy_logging_status is really lazy (in a good way!) | https://review.opendev.org/c/openstack/swift/+/906752","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"}],"doc/source/development_middleware.rst":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":true,"context_lines":[{"line_number":201,"context_line":"Middlewares can override the status integer that is logged by proxy_logging"},{"line_number":202,"context_line":"middleware by setting ``swift.proxy_logging_status`` in the request WSGI"},{"line_number":203,"context_line":"environment. The value should be an integer that will replace the default"},{"line_number":204,"context_line":"status integer in the log message."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"--------------"},{"line_number":207,"context_line":"Swift Metadata"}],"source_content_type":"text/x-rst","patch_set":6,"id":"0cec90ae_c31b7288","line":204,"updated":"2023-10-27 03:30:44.000000000","message":"Is this a new interface we\u0027re going to support going forward or just documenting an existing interface?","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":true,"context_lines":[{"line_number":201,"context_line":"Middlewares can override the status integer that is logged by proxy_logging"},{"line_number":202,"context_line":"middleware by setting ``swift.proxy_logging_status`` in the request WSGI"},{"line_number":203,"context_line":"environment. The value should be an integer that will replace the default"},{"line_number":204,"context_line":"status integer in the log message."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"--------------"},{"line_number":207,"context_line":"Swift Metadata"}],"source_content_type":"text/x-rst","patch_set":6,"id":"c7389e7a_98942748","line":204,"in_reply_to":"0cec90ae_c31b7288","updated":"2023-10-27 13:10:42.000000000","message":"this is what this patch adds","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[{"line_number":201,"context_line":"Middlewares can override the status integer that is logged by proxy_logging"},{"line_number":202,"context_line":"middleware by setting ``swift.proxy_logging_status`` in the request WSGI"},{"line_number":203,"context_line":"environment. The value should be an integer that will replace the default"},{"line_number":204,"context_line":"status integer in the log message."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"--------------"},{"line_number":207,"context_line":"Swift Metadata"}],"source_content_type":"text/x-rst","patch_set":6,"id":"76809692_32db6644","line":204,"in_reply_to":"c7389e7a_98942748","updated":"2024-01-25 19:28:41.000000000","message":"Acknowledged","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":203,"context_line":"environment. The value should be an integer. The value will replace the default"},{"line_number":204,"context_line":"status integer in the log message, unless the proxy_logging middleware detects"},{"line_number":205,"context_line":"a client disconnect or exception while handling the request, in which case"},{"line_number":206,"context_line":"``swift.proxy_logging_status`` is overridden by a 499 or 500 respectively."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"--------------"},{"line_number":209,"context_line":"Swift Metadata"}],"source_content_type":"text/x-rst","patch_set":9,"id":"41485915_030a5085","line":206,"updated":"2024-01-25 19:28:41.000000000","message":"sounds like a reasonable and useful hook!","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"}],"swift/common/middleware/proxy_logging.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"050f705d94162bc34801f8533cb6058ec4df5152","unresolved":true,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        def status_int_for_logging(start_status, client_disconnect\u003dFalse):"},{"line_number":390,"context_line":"            if \u0027swift.proxy_logging_status\u0027 in env:"},{"line_number":391,"context_line":"                return env[\u0027swift.proxy_logging_status\u0027]"},{"line_number":392,"context_line":"            # log disconnected clients as \u0027499\u0027 status code"},{"line_number":393,"context_line":"            if client_disconnect or input_proxy.client_disconnect:"},{"line_number":394,"context_line":"                return 499"}],"source_content_type":"text/x-python","patch_set":3,"id":"e295cdee_d0a1cfa6","line":391,"updated":"2023-03-20 15:35:40.000000000","message":"that\u0027s simple enough","commit_id":"ac4b91b79766d5a9c3eef1331045e481aaf0d95b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bf8f9b4867a8226fcb1940171ae1987d0116dde8","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        def status_int_for_logging(start_status, client_disconnect\u003dFalse):"},{"line_number":390,"context_line":"            if \u0027swift.proxy_logging_status\u0027 in env:"},{"line_number":391,"context_line":"                return env[\u0027swift.proxy_logging_status\u0027]"},{"line_number":392,"context_line":"            # log disconnected clients as \u0027499\u0027 status code"},{"line_number":393,"context_line":"            if client_disconnect or input_proxy.client_disconnect:"},{"line_number":394,"context_line":"                return 499"}],"source_content_type":"text/x-python","patch_set":3,"id":"49e9dbb5_f6f13a88","line":391,"in_reply_to":"63ef25c0_9c2a0756","updated":"2023-05-17 16:06:34.000000000","message":"I added a follow up patch that adds a ``log_ratelimit_as_client_error`` option to s3api https://review.opendev.org/c/openstack/swift/+/883415/1?usp\u003drelated-change","commit_id":"ac4b91b79766d5a9c3eef1331045e481aaf0d95b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9e3edfe44f0fcb17a2f7aeb1f5d172af0eec1904","unresolved":true,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        def status_int_for_logging(start_status, client_disconnect\u003dFalse):"},{"line_number":390,"context_line":"            if \u0027swift.proxy_logging_status\u0027 in env:"},{"line_number":391,"context_line":"                return env[\u0027swift.proxy_logging_status\u0027]"},{"line_number":392,"context_line":"            # log disconnected clients as \u0027499\u0027 status code"},{"line_number":393,"context_line":"            if client_disconnect or input_proxy.client_disconnect:"},{"line_number":394,"context_line":"                return 499"}],"source_content_type":"text/x-python","patch_set":3,"id":"63ef25c0_9c2a0756","line":391,"in_reply_to":"e295cdee_d0a1cfa6","updated":"2023-03-22 17:30:50.000000000","message":"It\u0027s a little weird that we add this lever then never pull it, though...\n\nMaybe it\u0027d be worth having a `log_ratelimit_as_client_error` option that can be used to log 429s while still returning 503s to clients? Though it might be weird if you have `log_ratelimit_as_client_error \u003d False` but `ratelimit_as_client_error \u003d True`","commit_id":"ac4b91b79766d5a9c3eef1331045e481aaf0d95b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"aa9f6bb082d9078511a15b9ca2fd1cd98b514de5","unresolved":true,"context_lines":[{"line_number":453,"context_line":"                    bytes_sent +\u003d len(chunk)"},{"line_number":454,"context_line":"                    yield chunk"},{"line_number":455,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":456,"context_line":"                client_disconnect \u003d True"},{"line_number":457,"context_line":"                raise"},{"line_number":458,"context_line":"            except Exception:"},{"line_number":459,"context_line":"                start_status \u003d 500"}],"source_content_type":"text/x-python","patch_set":5,"id":"df665d19_80a07ab5","line":456,"updated":"2023-05-24 18:56:21.000000000","message":"What if we had this do\n```\nenv[\u0027swift.proxy_logging_status\u0027] \u003d 499\n```\ninstead? And get some similar plumbing into `InputProxy`? I think we can reduce `status_int_for_logging` to just\n```\nreturn env.get(\u0027swift.proxy_logging_status\u0027, start_status)\n```","commit_id":"7b46fe05d8e42a5c8ad477c809ba3e488a368ff9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                    bytes_sent +\u003d len(chunk)"},{"line_number":454,"context_line":"                    yield chunk"},{"line_number":455,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":456,"context_line":"                client_disconnect \u003d True"},{"line_number":457,"context_line":"                raise"},{"line_number":458,"context_line":"            except Exception:"},{"line_number":459,"context_line":"                start_status \u003d 500"}],"source_content_type":"text/x-python","patch_set":5,"id":"82c3f253_bca70ca7","line":456,"in_reply_to":"df665d19_80a07ab5","updated":"2023-10-27 13:10:42.000000000","message":"heh, I went down that route and backed off because I was uncertain about changing the InputProxy constructor signature.\n\nre. your paste, it seems a little odd to call InputProxy(env[\u0027wsgi_input\u0027], env) rather than InputProxy(env) - curious why you chose that? AFAICT InputProxy is only used by proxy_logging, but as I said, I also got a little nervous about changing the constructor","commit_id":"7b46fe05d8e42a5c8ad477c809ba3e488a368ff9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":true,"context_lines":[{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        def status_int_for_logging(start_status, client_disconnect\u003dFalse):"},{"line_number":388,"context_line":"            # log disconnected clients as \u0027499\u0027 status code"},{"line_number":389,"context_line":"            if client_disconnect or input_proxy.client_disconnect:"},{"line_number":390,"context_line":"                return 499"},{"line_number":391,"context_line":"            return start_status"},{"line_number":392,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7fe42969_182a4156","side":"PARENT","line":389,"updated":"2023-10-27 03:30:44.000000000","message":"it seems like input_proxy already had an interface for notifying it\u0027s consumers about client_disconnect","commit_id":"39127fee5be6eb7733938d31e82bb6553ea9cbeb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":true,"context_lines":[{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        def status_int_for_logging(start_status, client_disconnect\u003dFalse):"},{"line_number":388,"context_line":"            # log disconnected clients as \u0027499\u0027 status code"},{"line_number":389,"context_line":"            if client_disconnect or input_proxy.client_disconnect:"},{"line_number":390,"context_line":"                return 499"},{"line_number":391,"context_line":"            return start_status"},{"line_number":392,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"8e4054c8_220179d2","side":"PARENT","line":389,"in_reply_to":"7fe42969_182a4156","updated":"2023-10-27 13:10:42.000000000","message":"yes. IIRC, somewhere in the history of this patch Tim suggested that we made the InputProxy a use case for the new proxy_logging_status, because otherwise I have no other upstream use case (I want to pass proxy_logging_status from a proprietary middleware).","commit_id":"39127fee5be6eb7733938d31e82bb6553ea9cbeb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        def status_int_for_logging(start_status, client_disconnect\u003dFalse):"},{"line_number":388,"context_line":"            # log disconnected clients as \u0027499\u0027 status code"},{"line_number":389,"context_line":"            if client_disconnect or input_proxy.client_disconnect:"},{"line_number":390,"context_line":"                return 499"},{"line_number":391,"context_line":"            return start_status"},{"line_number":392,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"d2e416c8_9f3ffd50","side":"PARENT","line":389,"in_reply_to":"8e4054c8_220179d2","updated":"2024-01-25 19:28:41.000000000","message":"ok, so then there\u0027s no use-case in tree (s3api\u0027s 503/429 thing already works differently somehow?)","commit_id":"39127fee5be6eb7733938d31e82bb6553ea9cbeb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c4a30de1e70ede249c52f9cc9480c855c70d732d","unresolved":true,"context_lines":[{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        def status_int_for_logging(start_status, client_disconnect\u003dFalse):"},{"line_number":388,"context_line":"            # log disconnected clients as \u0027499\u0027 status code"},{"line_number":389,"context_line":"            if client_disconnect or input_proxy.client_disconnect:"},{"line_number":390,"context_line":"                return 499"},{"line_number":391,"context_line":"            return start_status"},{"line_number":392,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da24553e_23fc70cd","side":"PARENT","line":389,"in_reply_to":"d2e416c8_9f3ffd50","updated":"2024-01-25 19:31:29.000000000","message":"actually, 883415: s3api: add option to log \u0027503 Slow Down\u0027 as 429 | https://review.opendev.org/c/openstack/swift/+/883415","commit_id":"39127fee5be6eb7733938d31e82bb6553ea9cbeb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":true,"context_lines":[{"line_number":40,"context_line":"  is used. Other middleware\u0027s may set ``swift.proxy_logging_status`` to"},{"line_number":41,"context_line":"  override the logging of ``status_int``. In either case, the logged"},{"line_number":42,"context_line":"  ``status_int`` value is forced to 499 if a client disconnect is detected"},{"line_number":43,"context_line":"  while this middleware is handling a request."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"* ``source`` (``swift.source`` in the WSGI environment) indicates the code"},{"line_number":46,"context_line":"  that generated the request, such as most middleware. (See below for"}],"source_content_type":"text/x-python","patch_set":6,"id":"73fe3284_43c8f525","line":43,"updated":"2023-10-27 03:30:44.000000000","message":"\"override the logging on status_int\" ... ON SUCCESS\n\n... might be a useful caveat.  I think if the client disconnects while we\u0027re returning the body or the applicatoin raises an error our 499/500 is more important than whatever games middleware wants to play with their stats.","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":false,"context_lines":[{"line_number":40,"context_line":"  is used. Other middleware\u0027s may set ``swift.proxy_logging_status`` to"},{"line_number":41,"context_line":"  override the logging of ``status_int``. In either case, the logged"},{"line_number":42,"context_line":"  ``status_int`` value is forced to 499 if a client disconnect is detected"},{"line_number":43,"context_line":"  while this middleware is handling a request."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"* ``source`` (``swift.source`` in the WSGI environment) indicates the code"},{"line_number":46,"context_line":"  that generated the request, such as most middleware. (See below for"}],"source_content_type":"text/x-python","patch_set":6,"id":"ef7a6ab9_ffc7efdf","line":43,"in_reply_to":"73fe3284_43c8f525","updated":"2023-10-27 13:10:42.000000000","message":"added text re 500s","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":true,"context_lines":[{"line_number":441,"context_line":"                    bytes_sent +\u003d len(chunk)"},{"line_number":442,"context_line":"                    yield chunk"},{"line_number":443,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":444,"context_line":"                env[\u0027swift.proxy_logging_status\u0027] \u003d 499"},{"line_number":445,"context_line":"                raise"},{"line_number":446,"context_line":"            except Exception:"},{"line_number":447,"context_line":"                start_status \u003d 500"}],"source_content_type":"text/x-python","patch_set":6,"id":"50f83f8c_400adafe","line":444,"updated":"2023-10-27 03:30:44.000000000","message":"I like that we overwrite whatever might have been set here.","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                    bytes_sent +\u003d len(chunk)"},{"line_number":442,"context_line":"                    yield chunk"},{"line_number":443,"context_line":"            except GeneratorExit:  # generator was closed before we finished"},{"line_number":444,"context_line":"                env[\u0027swift.proxy_logging_status\u0027] \u003d 499"},{"line_number":445,"context_line":"                raise"},{"line_number":446,"context_line":"            except Exception:"},{"line_number":447,"context_line":"                start_status \u003d 500"}],"source_content_type":"text/x-python","patch_set":6,"id":"088f2f4c_0e882c0b","line":444,"in_reply_to":"50f83f8c_400adafe","updated":"2023-10-27 13:10:42.000000000","message":"Ack","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":true,"context_lines":[{"line_number":448,"context_line":"                raise"},{"line_number":449,"context_line":"            finally:"},{"line_number":450,"context_line":"                status_int \u003d env.get(\u0027swift.proxy_logging_status\u0027,"},{"line_number":451,"context_line":"                                     start_status)"},{"line_number":452,"context_line":"                self.log_request("},{"line_number":453,"context_line":"                    req, status_int, input_proxy.bytes_received, bytes_sent,"},{"line_number":454,"context_line":"                    start_time, time.time(), resp_headers\u003dresp_headers,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5c681aac_8950f7b4","line":451,"updated":"2023-10-27 03:30:44.000000000","message":"seems reasonable.","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                raise"},{"line_number":449,"context_line":"            finally:"},{"line_number":450,"context_line":"                status_int \u003d env.get(\u0027swift.proxy_logging_status\u0027,"},{"line_number":451,"context_line":"                                     start_status)"},{"line_number":452,"context_line":"                self.log_request("},{"line_number":453,"context_line":"                    req, status_int, input_proxy.bytes_received, bytes_sent,"},{"line_number":454,"context_line":"                    start_time, time.time(), resp_headers\u003dresp_headers,"}],"source_content_type":"text/x-python","patch_set":6,"id":"25c949c6_3f1c2760","line":451,"in_reply_to":"5c681aac_8950f7b4","updated":"2023-10-27 13:10:42.000000000","message":"Ack","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":true,"context_lines":[{"line_number":459,"context_line":"            iterable \u003d self.app(env, my_start_response)"},{"line_number":460,"context_line":"        except Exception:"},{"line_number":461,"context_line":"            req \u003d Request(env)"},{"line_number":462,"context_line":"            status_int \u003d env.get(\u0027swift.proxy_logging_status\u0027, 500)"},{"line_number":463,"context_line":"            self.log_request("},{"line_number":464,"context_line":"                req, status_int, input_proxy.bytes_received, 0, start_time,"},{"line_number":465,"context_line":"                time.time())"}],"source_content_type":"text/x-python","patch_set":6,"id":"d5fc5c24_f49ef4ad","line":462,"updated":"2023-10-27 03:30:44.000000000","message":"if a mw wanted to log their 512 as a 497 and then raised an exception - can we trust it here?  Obvioulsy if the exception was a client_disconnect the 499 would be better!","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            iterable \u003d self.app(env, my_start_response)"},{"line_number":460,"context_line":"        except Exception:"},{"line_number":461,"context_line":"            req \u003d Request(env)"},{"line_number":462,"context_line":"            status_int \u003d env.get(\u0027swift.proxy_logging_status\u0027, 500)"},{"line_number":463,"context_line":"            self.log_request("},{"line_number":464,"context_line":"                req, status_int, input_proxy.bytes_received, 0, start_time,"},{"line_number":465,"context_line":"                time.time())"}],"source_content_type":"text/x-python","patch_set":6,"id":"9c58675f_04afcfb0","line":462,"in_reply_to":"9d93724a_10e23604","updated":"2024-01-25 19:28:41.000000000","message":"right, WSGI doesn\u0027t want apps to raise exceptions - if they need to return an error status they send it with start_response (and might want to change the logged status; which now they can!)\n\nmaybe I was just confused because swob supports raising HTTPError or w/e and __call__ will trap it return the exception as the response.","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":true,"context_lines":[{"line_number":459,"context_line":"            iterable \u003d self.app(env, my_start_response)"},{"line_number":460,"context_line":"        except Exception:"},{"line_number":461,"context_line":"            req \u003d Request(env)"},{"line_number":462,"context_line":"            status_int \u003d env.get(\u0027swift.proxy_logging_status\u0027, 500)"},{"line_number":463,"context_line":"            self.log_request("},{"line_number":464,"context_line":"                req, status_int, input_proxy.bytes_received, 0, start_time,"},{"line_number":465,"context_line":"                time.time())"}],"source_content_type":"text/x-python","patch_set":6,"id":"9d93724a_10e23604","line":462,"in_reply_to":"d5fc5c24_f49ef4ad","updated":"2023-10-27 13:10:42.000000000","message":"agree, the priority is probably wrong here: catching an exception should override whatever the mw thought it wanted logged.\n\nBut, middlewares shouldn\u0027t be *raising* HTTPClientDisconnect as an exception, right? So I\u0027m not sure we should be trying to get a status int from the exception here, and even if we should, I think that\u0027s beyond the scope of this change.","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"  override the logging of ``status_int``. In either case, the logged"},{"line_number":42,"context_line":"  ``status_int`` value is forced to 499 if a client disconnect is detected"},{"line_number":43,"context_line":"  while this middleware is handling a request, or 500 if an exception is caught"},{"line_number":44,"context_line":"  while handling a request."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"* ``source`` (``swift.source`` in the WSGI environment) indicates the code"},{"line_number":47,"context_line":"  that generated the request, such as most middleware. (See below for"}],"source_content_type":"text/x-python","patch_set":9,"id":"28382445_784f12d8","line":44,"updated":"2024-01-25 19:28:41.000000000","message":"sounds good.","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"  more detail.)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* ``log_info`` (``swift.log_info`` in the WSGI environment) is for additional"},{"line_number":51,"context_line":"  information that could prove quite useful, such as any ``x-delete-at``"},{"line_number":52,"context_line":"  value or other \"behind the scenes\" activity that might not"},{"line_number":53,"context_line":"  otherwise be detectable from the plain log information. Code that"},{"line_number":54,"context_line":"  wishes to add additional log information should use code like"}],"source_content_type":"text/x-python","patch_set":9,"id":"5b7d82a2_f9f5af5a","line":51,"updated":"2024-01-25 19:28:41.000000000","message":"kudos for the formatting fixes too!","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":56,"context_line":"  not disturb others\u0027 log information."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Values that are missing (e.g. due to a header not being present) or zero"},{"line_number":59,"context_line":"  are generally represented by a single hyphen (\u0027-\u0027)."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":".. note::"},{"line_number":62,"context_line":"   The message format may be configured using the ``log_msg_template`` option,"}],"source_content_type":"text/x-python","patch_set":9,"id":"238aa86a_35a2490a","line":59,"updated":"2024-01-25 19:28:41.000000000","message":"behavior or status_int None or False is documnted.","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":110,"context_line":"    def __init__(self, app, conf, logger\u003dNone):"},{"line_number":111,"context_line":"        self.app \u003d app"},{"line_number":112,"context_line":"        self.pid \u003d os.getpid()"},{"line_number":113,"context_line":"        self.log_formatter \u003d LogStringFormatter(default\u003d\u0027-\u0027, quote\u003dTrue)"},{"line_number":114,"context_line":"        self.log_msg_template \u003d conf.get("},{"line_number":115,"context_line":"            \u0027log_msg_template\u0027, ("},{"line_number":116,"context_line":"                \u0027{client_ip} {remote_addr} {end_time.datetime} {method} \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"f99eba8c_013de1dc","line":113,"updated":"2024-01-25 19:28:41.000000000","message":"interesting","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        def status_int_for_logging():"},{"line_number":402,"context_line":"            # log disconnected clients as \u0027499\u0027 status code"},{"line_number":403,"context_line":"            if input_proxy.client_disconnect:"},{"line_number":404,"context_line":"                return 499"},{"line_number":405,"context_line":"            return env.get(\u0027swift.proxy_logging_status\u0027)"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"34fe81c5_26d2ef02","line":403,"updated":"2024-01-25 19:28:41.000000000","message":"it was mabye kind of weird that this closure used some locals and had others passed in - this new signature is a little more obvoius IMHO - kudos!","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[{"line_number":455,"context_line":"                env[\u0027swift.proxy_logging_status\u0027] \u003d 499"},{"line_number":456,"context_line":"                raise"},{"line_number":457,"context_line":"            except Exception:"},{"line_number":458,"context_line":"                env[\u0027swift.proxy_logging_status\u0027] \u003d 500"},{"line_number":459,"context_line":"                raise"},{"line_number":460,"context_line":"            finally:"},{"line_number":461,"context_line":"                env.setdefault(\u0027swift.proxy_logging_status\u0027, wire_status_int)"}],"source_content_type":"text/x-python","patch_set":9,"id":"12873f01_e25c2466","line":458,"updated":"2024-01-25 19:28:41.000000000","message":"oh nice, that\u0027s bit more \"one obvious way to do it\" isn\u0027t it - kudos","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[{"line_number":458,"context_line":"                env[\u0027swift.proxy_logging_status\u0027] \u003d 500"},{"line_number":459,"context_line":"                raise"},{"line_number":460,"context_line":"            finally:"},{"line_number":461,"context_line":"                env.setdefault(\u0027swift.proxy_logging_status\u0027, wire_status_int)"},{"line_number":462,"context_line":"                status_int \u003d status_int_for_logging()"},{"line_number":463,"context_line":"                self.log_request("},{"line_number":464,"context_line":"                    req, status_int, input_proxy.bytes_received, bytes_sent,"}],"source_content_type":"text/x-python","patch_set":9,"id":"def28bff_9d43517a","line":461,"updated":"2024-01-25 19:28:41.000000000","message":"even better!  good riddence start_status","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            status_int \u003d status_int_for_logging()"},{"line_number":475,"context_line":"            self.log_request("},{"line_number":476,"context_line":"                req, status_int, input_proxy.bytes_received, 0, start_time,"},{"line_number":477,"context_line":"                time.time())"},{"line_number":478,"context_line":"            raise"},{"line_number":479,"context_line":"        else:"},{"line_number":480,"context_line":"            return iter_response(iterable)"}],"source_content_type":"text/x-python","patch_set":9,"id":"2ffaf0a5_0c6c835c","line":477,"updated":"2024-01-25 19:28:41.000000000","message":"ok, and no wire_status here since the app blew up before returning (so even if it called my_start_response or set swift.proxy_logging_status we\u0027re sending 500 and logging as such)","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":475,"context_line":"            self.log_request("},{"line_number":476,"context_line":"                req, status_int, input_proxy.bytes_received, 0, start_time,"},{"line_number":477,"context_line":"                time.time())"},{"line_number":478,"context_line":"            raise"},{"line_number":479,"context_line":"        else:"},{"line_number":480,"context_line":"            return iter_response(iterable)"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"66fa36c8_6a1ab413","line":478,"updated":"2024-01-25 19:28:41.000000000","message":"right, so we don\u0027t go making up http 500 responses - existing behavior couples this logged error status with HTTPServerError over in catch_errors.  got it.","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"465c08b5df2858bcdb8e6b3a9005103d4ab0cb6a","unresolved":true,"context_lines":[{"line_number":1400,"context_line":"        if status \u003d\u003d HTTP_SERVICE_UNAVAILABLE:"},{"line_number":1401,"context_line":"            raise ServiceUnavailable()"},{"line_number":1402,"context_line":"        if status in (HTTP_RATE_LIMITED, HTTP_TOO_MANY_REQUESTS):"},{"line_number":1403,"context_line":"            self.environ[\u0027swift.proxy_logging_status\u0027] \u003d 429"},{"line_number":1404,"context_line":"            raise SlowDown()"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"        raise InternalError(\u0027unexpected status code %d\u0027 % status)"}],"source_content_type":"text/x-python","patch_set":1,"id":"24471e8f_6d059cc9","line":1403,"updated":"2021-04-06 19:16:20.000000000","message":"I wonder if it\u0027d be even better to take it from the Swift response -- so this could log as either 429 or 498, depending on how the rest of the pipeline responded.","commit_id":"261659aa85e8847251287a2dce8dd9fd31992230"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":true,"context_lines":[{"line_number":3630,"context_line":"        try:"},{"line_number":3631,"context_line":"            line \u003d self.wsgi_input.readline(*args, **kwargs)"},{"line_number":3632,"context_line":"        except Exception:"},{"line_number":3633,"context_line":"            self.env[\u0027swift.proxy_logging_status\u0027] \u003d 499"},{"line_number":3634,"context_line":"            self.client_disconnect \u003d True"},{"line_number":3635,"context_line":"            raise"},{"line_number":3636,"context_line":"        self.bytes_received +\u003d len(line)"}],"source_content_type":"text/x-python","patch_set":6,"id":"154fc9a0_49db3ce6","line":3633,"updated":"2023-10-27 03:30:44.000000000","message":"i\u0027m a little surprised to see this middleware interface down here in a common.utils helper.","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":true,"context_lines":[{"line_number":3630,"context_line":"        try:"},{"line_number":3631,"context_line":"            line \u003d self.wsgi_input.readline(*args, **kwargs)"},{"line_number":3632,"context_line":"        except Exception:"},{"line_number":3633,"context_line":"            self.env[\u0027swift.proxy_logging_status\u0027] \u003d 499"},{"line_number":3634,"context_line":"            self.client_disconnect \u003d True"},{"line_number":3635,"context_line":"            raise"},{"line_number":3636,"context_line":"        self.bytes_received +\u003d len(line)"}],"source_content_type":"text/x-python","patch_set":6,"id":"a7d13fc7_2bd19c29","line":3633,"in_reply_to":"154fc9a0_49db3ce6","updated":"2023-10-27 13:10:42.000000000","message":"I\u0027m backing away from this change - it IS unfortunate bleeding of concerns","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c4a30de1e70ede249c52f9cc9480c855c70d732d","unresolved":false,"context_lines":[{"line_number":3630,"context_line":"        try:"},{"line_number":3631,"context_line":"            line \u003d self.wsgi_input.readline(*args, **kwargs)"},{"line_number":3632,"context_line":"        except Exception:"},{"line_number":3633,"context_line":"            self.env[\u0027swift.proxy_logging_status\u0027] \u003d 499"},{"line_number":3634,"context_line":"            self.client_disconnect \u003d True"},{"line_number":3635,"context_line":"            raise"},{"line_number":3636,"context_line":"        self.bytes_received +\u003d len(line)"}],"source_content_type":"text/x-python","patch_set":6,"id":"84886b8c_37370619","line":3633,"in_reply_to":"a7d13fc7_2bd19c29","updated":"2024-01-25 19:31:29.000000000","message":"Acknowledged","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f63f04a6a9e3d7ddb8252f04f75679f2ac85cc48","unresolved":true,"context_lines":[{"line_number":3631,"context_line":"            line \u003d self.wsgi_input.readline(*args, **kwargs)"},{"line_number":3632,"context_line":"        except Exception:"},{"line_number":3633,"context_line":"            self.env[\u0027swift.proxy_logging_status\u0027] \u003d 499"},{"line_number":3634,"context_line":"            self.client_disconnect \u003d True"},{"line_number":3635,"context_line":"            raise"},{"line_number":3636,"context_line":"        self.bytes_received +\u003d len(line)"},{"line_number":3637,"context_line":"        return line"}],"source_content_type":"text/x-python","patch_set":6,"id":"610eff23_33cb6800","line":3634,"updated":"2023-10-27 03:30:44.000000000","message":"does anyone still need *this* interface?  I didn\u0027t notice any failures in test/unit/swift/common when I pulled it out?","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c4a30de1e70ede249c52f9cc9480c855c70d732d","unresolved":false,"context_lines":[{"line_number":3631,"context_line":"            line \u003d self.wsgi_input.readline(*args, **kwargs)"},{"line_number":3632,"context_line":"        except Exception:"},{"line_number":3633,"context_line":"            self.env[\u0027swift.proxy_logging_status\u0027] \u003d 499"},{"line_number":3634,"context_line":"            self.client_disconnect \u003d True"},{"line_number":3635,"context_line":"            raise"},{"line_number":3636,"context_line":"        self.bytes_received +\u003d len(line)"},{"line_number":3637,"context_line":"        return line"}],"source_content_type":"text/x-python","patch_set":6,"id":"20e7fc23_b68d8cbd","line":3634,"in_reply_to":"055bf7a7_db4a941a","updated":"2024-01-25 19:31:29.000000000","message":"Acknowledged","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":true,"context_lines":[{"line_number":3631,"context_line":"            line \u003d self.wsgi_input.readline(*args, **kwargs)"},{"line_number":3632,"context_line":"        except Exception:"},{"line_number":3633,"context_line":"            self.env[\u0027swift.proxy_logging_status\u0027] \u003d 499"},{"line_number":3634,"context_line":"            self.client_disconnect \u003d True"},{"line_number":3635,"context_line":"            raise"},{"line_number":3636,"context_line":"        self.bytes_received +\u003d len(line)"},{"line_number":3637,"context_line":"        return line"}],"source_content_type":"text/x-python","patch_set":6,"id":"055bf7a7_db4a941a","line":3634,"in_reply_to":"610eff23_33cb6800","updated":"2023-10-27 13:10:42.000000000","message":"I\u0027m reverting to leaving this as it is\n\nthere\u0027s evidence that this class was used outside of swift repo. In fact, git blame shows that is why it is in utils. But in this case it is no longer used: https://github.com/openstack/ceilometer/commit/b9f8ef307924b50c1f397fbfc976faccc1fe250a\n\nI don\u0027t feel I have a good framework for deciding when it\u0027s OK to rip something out of utils.","commit_id":"2dc7047bbdde8402ca014627101b5da62dd0d0b9"}],"test/unit/common/middleware/test_proxy_logging.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"496d9334788b5db7ecbdff5108617ab95ee0fe03","unresolved":true,"context_lines":[{"line_number":858,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":859,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027499\u0027, \u0027503\u0027])"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        # logged status is forced to 429"},{"line_number":862,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: \u0027429\u0027}"},{"line_number":863,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":864,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027429\u0027, \u0027503\u0027])"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_app_exception(self):"},{"line_number":867,"context_line":"        app \u003d proxy_logging.ProxyLoggingMiddleware("}],"source_content_type":"text/x-python","patch_set":2,"id":"24291caa_3abaf3ce","line":864,"range":{"start_line":861,"start_character":8,"end_line":864,"end_character":57},"updated":"2023-03-15 19:12:54.000000000","message":"in this case we can\u0027t differentiate between proxy_logging_status and client disconnect in the log line - which should win, 499 or proxy_logging_status?","commit_id":"584926d0e924557ccb1d9164c62a51e9e20f9d81"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"050f705d94162bc34801f8533cb6058ec4df5152","unresolved":true,"context_lines":[{"line_number":858,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":859,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027499\u0027, \u0027503\u0027])"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        # logged status is forced to 429"},{"line_number":862,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: \u0027429\u0027}"},{"line_number":863,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":864,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027429\u0027, \u0027503\u0027])"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_app_exception(self):"},{"line_number":867,"context_line":"        app \u003d proxy_logging.ProxyLoggingMiddleware("}],"source_content_type":"text/x-python","patch_set":2,"id":"f4107faf_0f9d8b5a","line":864,"range":{"start_line":861,"start_character":8,"end_line":864,"end_character":57},"in_reply_to":"24291caa_3abaf3ce","updated":"2023-03-20 15:35:40.000000000","message":"the correct answer probably depends on the use-case\n\nit\u0027s hard to argue with the mw interface returning the proxy_logging_status environ value, but if there\u0027s a situation where we might set the value in the req environ and only later discover we want to return a different value we may have to change the interface which sounds annoying.","commit_id":"584926d0e924557ccb1d9164c62a51e9e20f9d81"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3905a34d2969d1b4b5a0fd8528021336302eda57","unresolved":false,"context_lines":[{"line_number":858,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":859,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027499\u0027, \u0027503\u0027])"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        # logged status is forced to 429"},{"line_number":862,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: \u0027429\u0027}"},{"line_number":863,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":864,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027429\u0027, \u0027503\u0027])"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_app_exception(self):"},{"line_number":867,"context_line":"        app \u003d proxy_logging.ProxyLoggingMiddleware("}],"source_content_type":"text/x-python","patch_set":2,"id":"82773067_cd766c32","line":864,"range":{"start_line":861,"start_character":8,"end_line":864,"end_character":57},"in_reply_to":"5c6d07d8_908f0257","updated":"2023-10-27 13:10:42.000000000","message":"Done","commit_id":"584926d0e924557ccb1d9164c62a51e9e20f9d81"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c18e28a60320ca9ce90278c69fda9e624b86b017","unresolved":true,"context_lines":[{"line_number":858,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":859,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027499\u0027, \u0027503\u0027])"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        # logged status is forced to 429"},{"line_number":862,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: \u0027429\u0027}"},{"line_number":863,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":864,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027429\u0027, \u0027503\u0027])"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_app_exception(self):"},{"line_number":867,"context_line":"        app \u003d proxy_logging.ProxyLoggingMiddleware("}],"source_content_type":"text/x-python","patch_set":2,"id":"5c6d07d8_908f0257","line":864,"range":{"start_line":861,"start_character":8,"end_line":864,"end_character":57},"in_reply_to":"f4107faf_0f9d8b5a","updated":"2023-05-11 11:55:02.000000000","message":"I\u0027m minded to flip the precedence i.e. client disconnect overrides proxy_logging_status, because:\n\nThe current use case (log a 429 when the client gets a 503 Slow Down) is probably not going to experience client disconnect, but in general it might be reasonable for the proxy_logging to override the middleware \u0027hint\u0027 and always log a 499 if there is a disconnect:\n\n- our goal is to use proxy_logging_status\u003d429 to avoid 503 (for Slow Downs) in logs: if the 503 Slow Down is translated to a 499 instead then that goal is still satisfied.\n\n- we want to have visibility of disconnects by logging a 499, which suggests that is more important than having a 429 in the log\n\nIf a future use case requires that the proxy_logging_status always takes precedence, then we could support that by:\n\n* adding force_proxy_logging_status to the env, and/or\n* adding a new log field specifically for client_disconnected","commit_id":"584926d0e924557ccb1d9164c62a51e9e20f9d81"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"aa9f6bb082d9078511a15b9ca2fd1cd98b514de5","unresolved":false,"context_lines":[{"line_number":853,"context_line":"                \u0027503 Slow Down\u0027, mock.ANY, None)"},{"line_number":854,"context_line":"            return self._log_parts(app)"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"        # control case, logged status is 499"},{"line_number":857,"context_line":"        environ_updates \u003d {}"},{"line_number":858,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":859,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027499\u0027, \u0027503\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7d688dfa_f5e1526a","line":856,"range":{"start_line":856,"start_character":10,"end_line":856,"end_character":22},"updated":"2023-05-24 18:56:21.000000000","message":"It feels a little weird that our \"variable\" case doesn\u0027t actually vary 😜","commit_id":"7b46fe05d8e42a5c8ad477c809ba3e488a368ff9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":66,"context_line":"        if is_container_or_object_req and self.policy_idx is not None:"},{"line_number":67,"context_line":"            headers.append((\u0027X-Backend-Storage-Policy-Index\u0027,"},{"line_number":68,"context_line":"                           str(self.policy_idx)))"},{"line_number":69,"context_line":"        env.update(self.environ_updates)"},{"line_number":70,"context_line":"        start_response(self.response_str, headers)"},{"line_number":71,"context_line":"        while env[\u0027wsgi.input\u0027].read(5):"},{"line_number":72,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ed8f7f4_6cca9fd7","line":69,"updated":"2024-01-25 19:28:41.000000000","message":"ok, that\u0027s fine i guess - it\u0027s not like there\u0027s any existing fake middlewares - and in theory the proxy app or internal client could use this interface if needed to as well.  I would expect it doesn\u0027t matter \"where\" in this method we do this: at the top, after we call start_response - seems like it\u0027s all the same.","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":825,"context_line":""},{"line_number":826,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: \u0027429\u0027}"},{"line_number":827,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":828,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027429\u0027, \u0027503\u0027])"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: None}"},{"line_number":831,"context_line":"        self.assertEqual(do_test(environ_updates),"}],"source_content_type":"text/x-python","patch_set":9,"id":"bfc44098_a3d84781","line":828,"updated":"2024-01-25 19:28:41.000000000","message":"that\u0027s a nice convinence","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c4a30de1e70ede249c52f9cc9480c855c70d732d","unresolved":false,"context_lines":[{"line_number":825,"context_line":""},{"line_number":826,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: \u0027429\u0027}"},{"line_number":827,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":828,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027429\u0027, \u0027503\u0027])"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: None}"},{"line_number":831,"context_line":"        self.assertEqual(do_test(environ_updates),"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ddfdae2_8ef78713","line":828,"in_reply_to":"bfc44098_a3d84781","updated":"2024-01-25 19:31:29.000000000","message":"Acknowledged","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":833,"context_line":""},{"line_number":834,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: \u0027\u0027}"},{"line_number":835,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":836,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027-\u0027, \u0027503\u0027])"},{"line_number":837,"context_line":""},{"line_number":838,"context_line":"    def test_environ_has_proxy_logging_status_unread_body(self):"},{"line_number":839,"context_line":"        conf \u003d {\u0027log_msg_template\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"968de494_e783ac74","line":836,"updated":"2024-01-25 19:28:41.000000000","message":"this is probably a mw bug - maybe better than exploding or using the wrire_status tho - at least we get a clue and the behavior is explicit.","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":863,"context_line":"        # logged status is forced to 499 despite swift.proxy_logging_status"},{"line_number":864,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: \u0027429\u0027}"},{"line_number":865,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":866,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027499\u0027, \u0027503\u0027])"},{"line_number":867,"context_line":""},{"line_number":868,"context_line":"    def test_environ_has_proxy_logging_status_and_app_explodes(self):"},{"line_number":869,"context_line":"        # verify exception overrides proxy_logging_status"}],"source_content_type":"text/x-python","patch_set":9,"id":"839cda56_8c2a5f03","line":866,"updated":"2024-01-25 19:28:41.000000000","message":"nice","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c4a30de1e70ede249c52f9cc9480c855c70d732d","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        # logged status is forced to 499 despite swift.proxy_logging_status"},{"line_number":864,"context_line":"        environ_updates \u003d {\u0027swift.proxy_logging_status\u0027: \u0027429\u0027}"},{"line_number":865,"context_line":"        self.assertEqual(do_test(environ_updates),"},{"line_number":866,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027499\u0027, \u0027503\u0027])"},{"line_number":867,"context_line":""},{"line_number":868,"context_line":"    def test_environ_has_proxy_logging_status_and_app_explodes(self):"},{"line_number":869,"context_line":"        # verify exception overrides proxy_logging_status"}],"source_content_type":"text/x-python","patch_set":9,"id":"27e6c75b_64c95553","line":866,"in_reply_to":"839cda56_8c2a5f03","updated":"2024-01-25 19:31:29.000000000","message":"Acknowledged","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[{"line_number":883,"context_line":"        app.access_logger \u003d debug_logger()"},{"line_number":884,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c\u0027)"},{"line_number":885,"context_line":"        captured_start_resp \u003d mock.MagicMock()"},{"line_number":886,"context_line":"        with self.assertRaises(Exception) as cm:"},{"line_number":887,"context_line":"            app(req.environ, captured_start_resp)"},{"line_number":888,"context_line":"        captured_start_resp.assert_not_called()"},{"line_number":889,"context_line":"        self.assertEqual(\u0027oops!\u0027, str(cm.exception))"}],"source_content_type":"text/x-python","patch_set":9,"id":"2c3f3a12_3f54e3cf","line":886,"updated":"2024-01-25 19:28:41.000000000","message":"oh duh, we can\u0027t return a resp_iter if we raised an exception - makes sense we don\u0027t call start_response.","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":false,"context_lines":[{"line_number":885,"context_line":"        captured_start_resp \u003d mock.MagicMock()"},{"line_number":886,"context_line":"        with self.assertRaises(Exception) as cm:"},{"line_number":887,"context_line":"            app(req.environ, captured_start_resp)"},{"line_number":888,"context_line":"        captured_start_resp.assert_not_called()"},{"line_number":889,"context_line":"        self.assertEqual(\u0027oops!\u0027, str(cm.exception))"},{"line_number":890,"context_line":"        self.assertEqual(self._log_parts(app),"},{"line_number":891,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027500\u0027, \u0027500\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"455767b1_f4883346","line":888,"updated":"2024-01-25 19:28:41.000000000","message":"that\u0027s weird, proxy logging will log the 500 and not return the error response to the client?\n\nI guess we leave it up to catch errors; which will annotate with a traceback logging or whatever.","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":917,"context_line":"        with self.assertRaises(Exception) as cm:"},{"line_number":918,"context_line":"            b\u0027\u0027.join(app_iter)"},{"line_number":919,"context_line":"        captured_start_resp.assert_called_once_with("},{"line_number":920,"context_line":"            \u0027568 Bespoke\u0027, [(\u0027X-Special\u0027, \u0027fun\u0027)], None)"},{"line_number":921,"context_line":"        self.assertEqual(\u0027oops!\u0027, str(cm.exception))"},{"line_number":922,"context_line":"        self.assertEqual(self._log_parts(app),"},{"line_number":923,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027500\u0027, \u0027568\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"354b8359_6f3ac59f","line":920,"updated":"2024-01-25 19:28:41.000000000","message":"ok so but here we would have had to have called start_response with 568 because proxy logging couldn\u0027t have known the resp body was going to blow up at the time!","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d4fb411477e58783a4252f73ef4ece530c9272a3","unresolved":true,"context_lines":[{"line_number":920,"context_line":"            \u0027568 Bespoke\u0027, [(\u0027X-Special\u0027, \u0027fun\u0027)], None)"},{"line_number":921,"context_line":"        self.assertEqual(\u0027oops!\u0027, str(cm.exception))"},{"line_number":922,"context_line":"        self.assertEqual(self._log_parts(app),"},{"line_number":923,"context_line":"                         [\u0027GET\u0027, \u0027/v1/a/c\u0027, \u0027500\u0027, \u0027568\u0027])"},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"    def test_app_exception(self):"},{"line_number":926,"context_line":"        app \u003d proxy_logging.ProxyLoggingMiddleware("}],"source_content_type":"text/x-python","patch_set":9,"id":"e420ef3b_ffc30cb0","line":923,"updated":"2024-01-25 19:28:41.000000000","message":"and we\u0027re honest about our wire_status as well as explicitly logging the error - i love it!","commit_id":"5af7719ef346e1594263536ccd9a952817cb2f7c"}]}
