)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"7ddf47965a40c874cc823e2b09b973a58ebf4bdc","unresolved":true,"context_lines":[{"line_number":12,"context_line":"When the resource type cannot be determined, the \u0027resource\u0027 label"},{"line_number":13,"context_line":"value would previously have had the value \u0027UNKNOWN\u0027. We\u0027d like all"},{"line_number":14,"context_line":"\u0027unknown\u0027 label values to be represented by the empty string when sent"},{"line_number":15,"context_line":"by the statsd client."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This patch therefore changes the default \u0027resource\u0027 value to the"},{"line_number":18,"context_line":"literal None in the base_labels dict. Note that, since the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"a45a9d97_e57faeea","line":15,"updated":"2026-07-31 14:32:29.000000000","message":"There is still one UNKNOWN label left in s3api.py - might be intentional because it is removed in a different patch?\n\n```\n$ grep -r \"labels.*UNKNOWN\" swift/\nswift/common/middleware/s3api/s3api.py:                labels[\u0027type\u0027] \u003d \u0027UNKNOWN\u0027\nswift/common/middleware/s3api/s3api.py:            labels[\u0027type\u0027] \u003d \u0027UNKNOWN\u0027\n```","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fe244fbbe9ab88142943d5beb31495ed4ad82352","unresolved":true,"context_lines":[{"line_number":12,"context_line":"When the resource type cannot be determined, the \u0027resource\u0027 label"},{"line_number":13,"context_line":"value would previously have had the value \u0027UNKNOWN\u0027. We\u0027d like all"},{"line_number":14,"context_line":"\u0027unknown\u0027 label values to be represented by the empty string when sent"},{"line_number":15,"context_line":"by the statsd client."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This patch therefore changes the default \u0027resource\u0027 value to the"},{"line_number":18,"context_line":"literal None in the base_labels dict. Note that, since the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"66db7088_35415dd2","line":15,"in_reply_to":"a45a9d97_e57faeea","updated":"2026-07-31 14:55:49.000000000","message":"good find! it’s worse:\n\n```\n % grep -r \"label.*unknown\" swift/ --ignore-case\nswift/common/middleware/s3api/s3api.py:                    label_val \u003d \u0027unknown\u0027\nswift/common/middleware/s3api/s3api.py:                    label_val \u003d \u0027unknown\u0027\nswift/common/middleware/s3api/s3api.py:                labels[\u0027type\u0027] \u003d \u0027UNKNOWN\u0027\nswift/common/middleware/s3api/s3api.py:            labels[\u0027type\u0027] \u003d \u0027UNKNOWN\u0027\n```\n\nbut IMHO these anomalies need to be cleaned up in a follow-on by having s3api start to use the ``base_labels`` rather than constructing its own dict of labels","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa06e99a34f6663a741a4e79cd1ddc1e65bc8763","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c4f961a2_d21c9ac5","updated":"2026-07-27 19:48:28.000000000","message":"998457: statsd: send None label values as an empty string | https://review.opendev.org/c/openstack/swift/+/998457 makes sense to me - this seems like a reasonable follow-up\n\nFWIW IMHO all of the labeled statsd metrics (and maybe ~most metrics in general) are somewhat \"resonable effort\" in terms of a maintained interface; and in my testing doing `sum by (resource) swift_proxy_...` queries don\u0027t really get any worse with `s/UNKNOWN//g` - the prom result will always include the `{}` aggregated result for metrics that include `resource\u003d` (or don\u0027t send the \"resource\" label *at all*)","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"7ddf47965a40c874cc823e2b09b973a58ebf4bdc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"40a52a36_9dc7aa41","updated":"2026-07-31 14:32:29.000000000","message":"I\u0027m close to a +2/+A, but I\u0027m wondering about the leftover ```labels[\u0027type\u0027] \u003d \u0027UNKNOWN\u0027``` - please see my inline comment. Apart from that, LGTM.","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"196489186156efe542351c7a8eb88b9c4ac1c680","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"49980e57_5c15ceb2","updated":"2026-07-27 21:25:50.000000000","message":"LGTM! was wondering if we need a unit test to assert the behavior if swift.source is empty, but searching in current code base, swift.source would not be empty","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"0c19122eba978ac4bc3a77167ce4b8f493ac1861","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4a4b0544_96e03f6a","updated":"2026-07-31 15:06:05.000000000","message":"LGTM, thx for clarifying!","commit_id":"909458063fac77c14f3f19a3612d27d046429078"}],"swift/common/middleware/proxy_logging.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa06e99a34f6663a741a4e79cd1ddc1e65bc8763","unresolved":true,"context_lines":[{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        Other middlewares, including the rightmost proxy logging instance, may"},{"line_number":541,"context_line":"        update base_labels if they consider themselves to have *authoritative*"},{"line_number":542,"context_line":"        information about the client* request. For example, the \u0027account\u0027 field"},{"line_number":543,"context_line":"        may be unknown to the leftmost proxy logging instance for an s3API"},{"line_number":544,"context_line":"        request, but can be set by later middlewares. The base_labels dict"},{"line_number":545,"context_line":"        should not otherwise be modified by other middlewares."}],"source_content_type":"text/x-python","patch_set":1,"id":"6991247c_81b4f3a0","side":"PARENT","line":542,"updated":"2026-07-27 19:48:28.000000000","message":"i\u0027m freading this diff hunk as a drive-by typo fixup:\n\ns/client*/*client*/","commit_id":"b0f92bd978266f30c20cfc9b37c63f3df81a22a2"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2834b7a218ccfcf19f1c483009104fd2f481206d","unresolved":false,"context_lines":[{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        Other middlewares, including the rightmost proxy logging instance, may"},{"line_number":541,"context_line":"        update base_labels if they consider themselves to have *authoritative*"},{"line_number":542,"context_line":"        information about the client* request. For example, the \u0027account\u0027 field"},{"line_number":543,"context_line":"        may be unknown to the leftmost proxy logging instance for an s3API"},{"line_number":544,"context_line":"        request, but can be set by later middlewares. The base_labels dict"},{"line_number":545,"context_line":"        should not otherwise be modified by other middlewares."}],"source_content_type":"text/x-python","patch_set":1,"id":"9ac810f8_6231ae3b","side":"PARENT","line":542,"in_reply_to":"6991247c_81b4f3a0","updated":"2026-07-28 12:19:32.000000000","message":"Acknowledged","commit_id":"b0f92bd978266f30c20cfc9b37c63f3df81a22a2"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa06e99a34f6663a741a4e79cd1ddc1e65bc8763","unresolved":true,"context_lines":[{"line_number":568,"context_line":"                cont, obj \u003d extract_bucket_and_key("},{"line_number":569,"context_line":"                    req, self.storage_domains, False)"},{"line_number":570,"context_line":"                base_labels \u003d self.get_request_labels(req, acc, cont, obj)"},{"line_number":571,"context_line":"                if base_labels.get(\u0027resource\u0027) \u003d\u003d \u0027UNKNOWN\u0027:"},{"line_number":572,"context_line":"                    # allow a later middleware to update the resource label"},{"line_number":573,"context_line":"                    # once the full swift path is known."},{"line_number":574,"context_line":"                    base_labels.pop(\u0027resource\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2c4b8012_433af9e6","side":"PARENT","line":571,"updated":"2026-07-27 19:48:28.000000000","message":"this line obviously has to change.","commit_id":"b0f92bd978266f30c20cfc9b37c63f3df81a22a2"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa06e99a34f6663a741a4e79cd1ddc1e65bc8763","unresolved":true,"context_lines":[{"line_number":499,"context_line":"        return method if method in self.valid_methods else \u0027BAD_METHOD\u0027"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def statsd_metric_name(self, req, status_int, metric_method):"},{"line_number":502,"context_line":"        resource_type \u003d self.get_resource_type(req) or \u0027UNKNOWN\u0027"},{"line_number":503,"context_line":"        return \u0027.\u0027.join((resource_type, metric_method, str(status_int)))"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def statsd_metric_name_policy(self, req, status_int, metric_method,"}],"source_content_type":"text/x-python","patch_set":1,"id":"8356a1db_4459b70a","line":502,"updated":"2026-07-27 19:48:28.000000000","message":"this is the whole of legacy metric name compat","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2834b7a218ccfcf19f1c483009104fd2f481206d","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        return method if method in self.valid_methods else \u0027BAD_METHOD\u0027"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def statsd_metric_name(self, req, status_int, metric_method):"},{"line_number":502,"context_line":"        resource_type \u003d self.get_resource_type(req) or \u0027UNKNOWN\u0027"},{"line_number":503,"context_line":"        return \u0027.\u0027.join((resource_type, metric_method, str(status_int)))"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def statsd_metric_name_policy(self, req, status_int, metric_method,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c0ba08fd_b08f3a5f","line":502,"in_reply_to":"8356a1db_4459b70a","updated":"2026-07-28 12:19:32.000000000","message":"Acknowledged","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa06e99a34f6663a741a4e79cd1ddc1e65bc8763","unresolved":true,"context_lines":[{"line_number":532,"context_line":"        if acc:"},{"line_number":533,"context_line":"            req_labels[\u0027account\u0027] \u003d acc"},{"line_number":534,"context_line":"        if cont:"},{"line_number":535,"context_line":"            req_labels[\u0027container\u0027] \u003d cont"},{"line_number":536,"context_line":"        req_labels[\u0027resource\u0027] \u003d self.get_resource_type_from_aco("},{"line_number":537,"context_line":"            req, acc, cont, obj)"},{"line_number":538,"context_line":"        method \u003d self.method_from_req(req)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f669b44_d7d8aa05","line":535,"updated":"2026-07-27 19:48:28.000000000","message":"account \u0026 container labels are optional.","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2834b7a218ccfcf19f1c483009104fd2f481206d","unresolved":false,"context_lines":[{"line_number":532,"context_line":"        if acc:"},{"line_number":533,"context_line":"            req_labels[\u0027account\u0027] \u003d acc"},{"line_number":534,"context_line":"        if cont:"},{"line_number":535,"context_line":"            req_labels[\u0027container\u0027] \u003d cont"},{"line_number":536,"context_line":"        req_labels[\u0027resource\u0027] \u003d self.get_resource_type_from_aco("},{"line_number":537,"context_line":"            req, acc, cont, obj)"},{"line_number":538,"context_line":"        method \u003d self.method_from_req(req)"}],"source_content_type":"text/x-python","patch_set":1,"id":"520dc163_642e6604","line":535,"in_reply_to":"7f669b44_d7d8aa05","updated":"2026-07-28 12:19:32.000000000","message":"Acknowledged","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa06e99a34f6663a741a4e79cd1ddc1e65bc8763","unresolved":true,"context_lines":[{"line_number":533,"context_line":"            req_labels[\u0027account\u0027] \u003d acc"},{"line_number":534,"context_line":"        if cont:"},{"line_number":535,"context_line":"            req_labels[\u0027container\u0027] \u003d cont"},{"line_number":536,"context_line":"        req_labels[\u0027resource\u0027] \u003d self.get_resource_type_from_aco("},{"line_number":537,"context_line":"            req, acc, cont, obj)"},{"line_number":538,"context_line":"        method \u003d self.method_from_req(req)"},{"line_number":539,"context_line":"        metric_method \u003d self.statsd_metric_method(method)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f9c50d86_09d21ca9","line":536,"updated":"2026-07-27 19:48:28.000000000","message":"k, resource key is always present","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2834b7a218ccfcf19f1c483009104fd2f481206d","unresolved":false,"context_lines":[{"line_number":533,"context_line":"            req_labels[\u0027account\u0027] \u003d acc"},{"line_number":534,"context_line":"        if cont:"},{"line_number":535,"context_line":"            req_labels[\u0027container\u0027] \u003d cont"},{"line_number":536,"context_line":"        req_labels[\u0027resource\u0027] \u003d self.get_resource_type_from_aco("},{"line_number":537,"context_line":"            req, acc, cont, obj)"},{"line_number":538,"context_line":"        method \u003d self.method_from_req(req)"},{"line_number":539,"context_line":"        metric_method \u003d self.statsd_metric_method(method)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c3f2419c_e9944d05","line":536,"in_reply_to":"f9c50d86_09d21ca9","updated":"2026-07-28 12:19:32.000000000","message":"Acknowledged","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"16bb8a57dcb667bac4677c4cd74d232b5a65966b","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        base_labels \u003d req.environ.get(\u0027swift.base_labels\u0027)"},{"line_number":577,"context_line":"        if base_labels is None:"},{"line_number":578,"context_line":"            # expected in the left-most proxy_logging instance"},{"line_number":579,"context_line":"            base_labels \u003d self.get_request_labels(req, acc, cont, obj)"},{"line_number":580,"context_line":"            if base_labels.get(\u0027account\u0027) is None and is_s3_req(req):"},{"line_number":581,"context_line":"                cont, obj \u003d extract_bucket_and_key("},{"line_number":582,"context_line":"                    req, self.storage_domains, False)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5af36db1_0099af30","line":579,"updated":"2026-07-27 16:16:59.000000000","message":"resource label from swift.source in existing code should not be empty, so it seems good here","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa06e99a34f6663a741a4e79cd1ddc1e65bc8763","unresolved":true,"context_lines":[{"line_number":581,"context_line":"                cont, obj \u003d extract_bucket_and_key("},{"line_number":582,"context_line":"                    req, self.storage_domains, False)"},{"line_number":583,"context_line":"                base_labels \u003d self.get_request_labels(req, acc, cont, obj)"},{"line_number":584,"context_line":"                if base_labels[\u0027resource\u0027] is None:"},{"line_number":585,"context_line":"                    # allow a later middleware to update the resource label"},{"line_number":586,"context_line":"                    # once the full swift path is known."},{"line_number":587,"context_line":"                    base_labels.pop(\u0027resource\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"25bc3488_23de4e27","line":584,"updated":"2026-07-27 19:48:28.000000000","message":"this seems to work and as a reasonable translation, I might prefer:\n\n```\nif not base_label.get(\u0027resource\u0027):\n   ...\n```\n\n... as a more \"idiomatic\" spelling","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2834b7a218ccfcf19f1c483009104fd2f481206d","unresolved":true,"context_lines":[{"line_number":581,"context_line":"                cont, obj \u003d extract_bucket_and_key("},{"line_number":582,"context_line":"                    req, self.storage_domains, False)"},{"line_number":583,"context_line":"                base_labels \u003d self.get_request_labels(req, acc, cont, obj)"},{"line_number":584,"context_line":"                if base_labels[\u0027resource\u0027] is None:"},{"line_number":585,"context_line":"                    # allow a later middleware to update the resource label"},{"line_number":586,"context_line":"                    # once the full swift path is known."},{"line_number":587,"context_line":"                    base_labels.pop(\u0027resource\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"318f748d_5b4be4bd","line":584,"in_reply_to":"25bc3488_23de4e27","updated":"2026-07-28 12:19:32.000000000","message":"my LLM keeps insisting that I shouldn\u0027t use ``get()`` when it might mask a regression - the key should always be present.","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa06e99a34f6663a741a4e79cd1ddc1e65bc8763","unresolved":true,"context_lines":[{"line_number":584,"context_line":"                if base_labels[\u0027resource\u0027] is None:"},{"line_number":585,"context_line":"                    # allow a later middleware to update the resource label"},{"line_number":586,"context_line":"                    # once the full swift path is known."},{"line_number":587,"context_line":"                    base_labels.pop(\u0027resource\u0027)"},{"line_number":588,"context_line":"                base_labels[\u0027api\u0027] \u003d \u0027S3\u0027"},{"line_number":589,"context_line":"            else:"},{"line_number":590,"context_line":"                base_labels[\u0027api\u0027] \u003d \u0027swift\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"6d39807c_f30bf926","line":587,"updated":"2026-07-27 19:48:28.000000000","message":"\u003e allow a later middleware to update the resource label\n\nthis pre-existing behavior of \"pop\" \u003d\u003d \"allow udpate\" is sort of wild","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2834b7a218ccfcf19f1c483009104fd2f481206d","unresolved":true,"context_lines":[{"line_number":584,"context_line":"                if base_labels[\u0027resource\u0027] is None:"},{"line_number":585,"context_line":"                    # allow a later middleware to update the resource label"},{"line_number":586,"context_line":"                    # once the full swift path is known."},{"line_number":587,"context_line":"                    base_labels.pop(\u0027resource\u0027)"},{"line_number":588,"context_line":"                base_labels[\u0027api\u0027] \u003d \u0027S3\u0027"},{"line_number":589,"context_line":"            else:"},{"line_number":590,"context_line":"                base_labels[\u0027api\u0027] \u003d \u0027swift\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"4322be8c_01b21e91","line":587,"in_reply_to":"6d39807c_f30bf926","updated":"2026-07-28 12:19:32.000000000","message":"this gets addressed by the next patch in the chain","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"}],"test/unit/common/middleware/test_proxy_logging.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"27f28da60a15f1fadd51ee773c79d1fa17223bda","unresolved":true,"context_lines":[{"line_number":1835,"context_line":"        req_hdrs \u003d {"},{"line_number":1836,"context_line":"            \u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":1837,"context_line":"            \u0027Date\u0027: email.utils.formatdate(time.time() + 0),"},{"line_number":1838,"context_line":"        }"},{"line_number":1839,"context_line":"        self.assertEqual("},{"line_number":1840,"context_line":"            {"},{"line_number":1841,"context_line":"                \u0027resource\u0027: \u0027container\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"359fc0f6_af468146","side":"PARENT","line":1838,"updated":"2026-07-24 14:26:10.000000000","message":"drive-by: e should be using the req_hdrs arg","commit_id":"b0f92bd978266f30c20cfc9b37c63f3df81a22a2"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa06e99a34f6663a741a4e79cd1ddc1e65bc8763","unresolved":true,"context_lines":[{"line_number":696,"context_line":"        app.statsd \u003d self.statsd"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        def do_test(bad_path):"},{"line_number":699,"context_line":"            exp_labels \u003d {\u0027resource\u0027: None,"},{"line_number":700,"context_line":"                          \u0027method\u0027: \u0027GET\u0027,"},{"line_number":701,"context_line":"                          \u0027api\u0027: \u0027swift\u0027,"},{"line_number":702,"context_line":"                          \u0027status\u0027: 200}"}],"source_content_type":"text/x-python","patch_set":1,"id":"b4be5d48_064299ac","line":699,"updated":"2026-07-27 19:48:28.000000000","message":"not sure moving this in the closure is a huge win for diff readability\n\nAFAICT the only thing that changed was the value of the `exp_labels[\u0027resource\u0027]`","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2834b7a218ccfcf19f1c483009104fd2f481206d","unresolved":true,"context_lines":[{"line_number":696,"context_line":"        app.statsd \u003d self.statsd"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        def do_test(bad_path):"},{"line_number":699,"context_line":"            exp_labels \u003d {\u0027resource\u0027: None,"},{"line_number":700,"context_line":"                          \u0027method\u0027: \u0027GET\u0027,"},{"line_number":701,"context_line":"                          \u0027api\u0027: \u0027swift\u0027,"},{"line_number":702,"context_line":"                          \u0027status\u0027: 200}"}],"source_content_type":"text/x-python","patch_set":1,"id":"93b5c924_de7811fb","line":699,"in_reply_to":"b4be5d48_064299ac","updated":"2026-07-28 12:19:32.000000000","message":"LLM warned that exp_labels is passed into assert helpers so guard against it being mutated; start every scenario with a clean sheet.","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa06e99a34f6663a741a4e79cd1ddc1e65bc8763","unresolved":true,"context_lines":[{"line_number":708,"context_line":"                # get body"},{"line_number":709,"context_line":"                b\u0027\u0027.join(resp)"},{"line_number":710,"context_line":"            self.assertTiming(\u0027UNKNOWN.GET.200.first-byte.timing\u0027, app, 500.0)"},{"line_number":711,"context_line":"            self.assertTiming(\u0027UNKNOWN.GET.200.timing\u0027, app,"},{"line_number":712,"context_line":"                              2718.2818284600216)"},{"line_number":713,"context_line":"            self.assertUpdateStats([(\u0027UNKNOWN.GET.200.xfer\u0027, 7)], app)"},{"line_number":714,"context_line":"            self.assertLabeledTimingStats(["}],"source_content_type":"text/x-python","patch_set":1,"id":"17676103_6a8ddd69","line":711,"updated":"2026-07-27 19:48:28.000000000","message":"nice to see some pre-existing asserts of the compat behavior.","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2834b7a218ccfcf19f1c483009104fd2f481206d","unresolved":false,"context_lines":[{"line_number":708,"context_line":"                # get body"},{"line_number":709,"context_line":"                b\u0027\u0027.join(resp)"},{"line_number":710,"context_line":"            self.assertTiming(\u0027UNKNOWN.GET.200.first-byte.timing\u0027, app, 500.0)"},{"line_number":711,"context_line":"            self.assertTiming(\u0027UNKNOWN.GET.200.timing\u0027, app,"},{"line_number":712,"context_line":"                              2718.2818284600216)"},{"line_number":713,"context_line":"            self.assertUpdateStats([(\u0027UNKNOWN.GET.200.xfer\u0027, 7)], app)"},{"line_number":714,"context_line":"            self.assertLabeledTimingStats(["}],"source_content_type":"text/x-python","patch_set":1,"id":"f85602b8_e0a8d297","line":711,"in_reply_to":"17676103_6a8ddd69","updated":"2026-07-28 12:19:32.000000000","message":"Acknowledged","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"7ddf47965a40c874cc823e2b09b973a58ebf4bdc","unresolved":true,"context_lines":[{"line_number":3988,"context_line":"            (\u0027swift_proxy_server_request_body_bytes\u0027, 0, exp_labels),"},{"line_number":3989,"context_line":"            (\u0027swift_proxy_server_response_body_bytes\u0027, 8, exp_labels)"},{"line_number":3990,"context_line":"        ])"},{"line_number":3991,"context_line":"        # {\u0027resource\u0027: None} is rendered as \u0027resource\u003d\u0027 on the wire"},{"line_number":3992,"context_line":"        exp_label_bytes \u003d b\u0027|#api:swift,method:GET,resource:,status:200\u0027"},{"line_number":3993,"context_line":"        self.assertEqual("},{"line_number":3994,"context_line":"            [b\u0027swift_proxy_server_request_ttfb:0.0|ms\u0027 + exp_label_bytes,"}],"source_content_type":"text/x-python","patch_set":1,"id":"2e35aa92_f9be5402","line":3991,"updated":"2026-07-31 14:32:29.000000000","message":"nit: comment uses \u0027resource\u003d\u0027, but actually it is \u0027resource:\u0027 - which is also tested in the next line","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fe244fbbe9ab88142943d5beb31495ed4ad82352","unresolved":true,"context_lines":[{"line_number":3988,"context_line":"            (\u0027swift_proxy_server_request_body_bytes\u0027, 0, exp_labels),"},{"line_number":3989,"context_line":"            (\u0027swift_proxy_server_response_body_bytes\u0027, 8, exp_labels)"},{"line_number":3990,"context_line":"        ])"},{"line_number":3991,"context_line":"        # {\u0027resource\u0027: None} is rendered as \u0027resource\u003d\u0027 on the wire"},{"line_number":3992,"context_line":"        exp_label_bytes \u003d b\u0027|#api:swift,method:GET,resource:,status:200\u0027"},{"line_number":3993,"context_line":"        self.assertEqual("},{"line_number":3994,"context_line":"            [b\u0027swift_proxy_server_request_ttfb:0.0|ms\u0027 + exp_label_bytes,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ec8e55e7_0db0af4c","line":3991,"in_reply_to":"2e35aa92_f9be5402","updated":"2026-07-31 14:55:49.000000000","message":"you are right! for dogstatsd mode the separator is ``:`` ; for other label modes it would be ``\u003d``, but the test is using dogstatsd","commit_id":"edbe8bdf86e83c02a4e238b238d119767ebe7ab8"}]}
