)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2e0fb646fd2253574d82ceb03375cfb904799ac3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f5ee7714_5b296dc0","updated":"2026-02-06 19:00:49.000000000","message":"WIP - needs some more tests and comments/docstring","commit_id":"01d3763074c589f54f05dd4cfa5a15e40ce0f12b"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"7766860324ac81d0e91c3785f87d24fd16bc3a01","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"20c83b69_49b4ad9d","updated":"2026-02-06 21:59:23.000000000","message":"recheck","commit_id":"01d3763074c589f54f05dd4cfa5a15e40ce0f12b"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"410ee06006d9b472904a7d0a6a5aa9aa960f0dac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5366ff67_00602817","updated":"2026-02-27 05:49:19.000000000","message":"Testing this patch, it\u0027s pretty cool, do an SLO upload, well the manifest part (or look at the end of a swift upload --use-slo) and you see:\n\n```\nswift_proxy_server_request_timing:3.35|ms|#account:AUTH_test,api:swift,container:cont_segments,method:HEAD,policy:0,resource:object,status:200                                                                                                               \nswift_proxy_server_request_body_bytes:0|c|#account:AUTH_test,api:swift,container:cont_segments,method:HEAD,policy:0,resource:object,status:200                                                                                                               \nswift_proxy_server_response_body_bytes:0|c|#account:AUTH_test,api:swift,container:cont_segments,method:HEAD,policy:0,resource:object,status:200                                                                                                              \nsubrequest.proxy-server.object.HEAD.200.timing:3.4907|ms                                                                      \nsubrequest.proxy-server.object.HEAD.200.xfer:0|c               \nsubrequest.proxy-server.object.policy.0.HEAD.200.timing:3.4907|ms                                                             \nsubrequest.proxy-server.object.policy.0.HEAD.200.xfer:0|c                                                                     \nswift_proxy_server_request_timing:3.4907|ms|#account:AUTH_test,api:swift,container:cont_segments,method:HEAD,policy:0,resource:object,status:200                                                                                                             \nswift_proxy_server_request_body_bytes:0|c|#account:AUTH_test,api:swift,container:cont_segments,method:HEAD,policy:0,resource:object,status:200                                                                                                               \nswift_proxy_server_response_body_bytes:0|c|#account:AUTH_test,api:swift,container:cont_segments,method:HEAD,policy:0,resource:object,status:200                                                                                                              \nproxy-server.container.info.infocache.hit:1|c                  \nproxy-server.container.info.infocache.hit:1|c                  \nproxy-server.container.info.infocache.hit:1|c                  \nproxy-server.container.info.infocache.hit:1|c                  \nproxy-server.object.PUT.201.timing:46.4857|ms                  \nproxy-server.object.PUT.201.xfer:1480|c                        \nproxy-server.object.policy.0.PUT.201.timing:46.4857|ms         \nproxy-server.object.policy.0.PUT.201.xfer:1480|c               \nswift_proxy_server_request_timing:46.4857|ms|#account:AUTH_test,api:swift,container:cont,method:PUT,policy:0,resource:object,status:201                                                                                                                      \nswift_proxy_server_request_body_bytes:1480|c|#account:AUTH_test,api:swift,container:cont,method:PUT,policy:0,resource:object,status:201                                                                                                                      \nswift_proxy_server_response_body_bytes:0|c|#account:AUTH_test,api:swift,container:cont,method:PUT,policy:0,resource:object,status:201   \n```\n\nThat is some object heads to make sure the objects exist in the cont_segments container and then the finaly put for the slo manifest in the cont container. So all one request, but the correct container and methods.\n\nWill oo a little more testing. But some small things inline.","commit_id":"169a83ea4c0ee2ec30174380dd6bf4e698410110"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"1c2d59f485232e067bb679624b53c2c324261516","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f7e340e5_0e485e93","updated":"2026-03-02 20:35:59.000000000","message":"Using aws s3api mpu upload, the following changes of the container or method labels could be observed with the patch:\n\nFor bug fix: container label inconsistently quoted value\non master branch: proxy labeled metrics have either:\n```\ncontainer\u003d\"testbucket+segments\"\nor\ncontainer\u003d\"testbucket%2Bsegments\"\n```\nwith patch: proxy labeled metrics all have:\n```\ncontainer\u003d\"testbucket%2Bsegments\"\n```\n\nor bug fix: container label inconsistent value\non master branch:\n```\nswift_proxy_server_request_body_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket%2Bsegments\",method\u003d\"PUT\",policy\u003d\"0\",resource\u003d\"object\",status\u003d\"201\",user_reqctx\u003d\"subreqctx\"} 5120\nswift_proxy_server_request_body_streaming_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket\",method\u003d\"PUT\",resource\u003d\"object\",user_reqctx\u003d\"subreqctx\"} 5120\n```\nwith patch:\n```\nswift_proxy_server_request_body_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket%2Bsegments\",method\u003d\"PUT\",policy\u003d\"0\",resource\u003d\"object\",status\u003d\"201\",user_reqctx\u003d\"subreqctx\"} 5120\nswift_proxy_server_request_body_streaming_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket%2Bsegments\",method\u003d\"PUT\",resource\u003d\"object\",user_reqctx\u003d\"subreqctx\"} 5120\n```\n\nFor bug fix: method label inconsistent value\non master branch:\n```\nswift_proxy_server_request_body_streaming_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket\",method\u003d\"POST\",resource\u003d\"object\"} 185\nswift_proxy_server_request_body_streaming_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket\",method\u003d\"POST\",resource\u003d\"object\",user_reqctx\u003d\"subreqctx\"} 251\nswift_proxy_server_request_body_streaming_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket\",method\u003d\"PUT\",resource\u003d\"object\"} 5120\nswift_proxy_server_request_body_streaming_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket\",method\u003d\"PUT\",resource\u003d\"object\",user_reqctx\u003d\"subreqctx\"} 5120\n```\nwith patch:\n```\nswift_proxy_server_request_body_streaming_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket\",method\u003d\"POST\",resource\u003d\"object\"} 185\nswift_proxy_server_request_body_streaming_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket\",method\u003d\"PUT\",resource\u003d\"object\"} 5120\nswift_proxy_server_request_body_streaming_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket\",method\u003d\"PUT\",resource\u003d\"object\",user_reqctx\u003d\"subreqctx\"} 251\nswift_proxy_server_request_body_streaming_bytes{account\u003d\"AUTH_test\",api\u003d\"S3\",container\u003d\"testbucket%2Bsegments\",method\u003d\"PUT\",resource\u003d\"object\",user_reqctx\u003d\"subreqctx\"} 5120\n```","commit_id":"169a83ea4c0ee2ec30174380dd6bf4e698410110"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6060127bc2d997d5daa8b9d014697f1dbb948382","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e0ae2399_f99e59ed","updated":"2026-03-05 21:51:58.000000000","message":"Working for me in my tests. Subrequests use the right thing","commit_id":"043f4505d8ba213156d96fadc5c7be564ad4e56f"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5ed37f2101568a5d40cb74c350607a05bc2e2dce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"23cd0904_2eed2836","updated":"2026-03-29 22:37:25.000000000","message":"This is working well in my VSAIO. +segments folder when it makes sense in a subrequests. Nice one.","commit_id":"c161834f3df6af4cce1ed7ba0715c0791d9651ec"}],"swift/common/middleware/proxy_logging.py":[{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"7cefa077f7fda7bf5eee0a3c0feff413f3a4e9c3","unresolved":false,"context_lines":[{"line_number":535,"context_line":"        resource_type \u003d self.get_resource_type_from_aco("},{"line_number":536,"context_line":"            req, acc, cont, obj)"},{"line_number":537,"context_line":"        labels \u003d {"},{"line_number":538,"context_line":"            \u0027method\u0027: metric_method,"},{"line_number":539,"context_line":"            \u0027resource\u0027: resource_type,"},{"line_number":540,"context_line":"        }"},{"line_number":541,"context_line":"        if acc:"}],"source_content_type":"text/x-python","patch_set":1,"id":"68f534dd_617451ac","line":538,"updated":"2026-02-06 22:16:47.000000000","message":"this metric_method was previously in statsd_metric_labels","commit_id":"01d3763074c589f54f05dd4cfa5a15e40ce0f12b"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"142ed64be9e63e89fe75945c960643ccbe244ddd","unresolved":true,"context_lines":[{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    @staticmethod"},{"line_number":564,"context_line":"    def get_updated_labels(labels, status_int\u003dNone, policy_index\u003dNone):"},{"line_number":565,"context_line":"        \"\"\""},{"line_number":566,"context_line":"        Returns a new dict, based on the given ``labels`` dict, with the"},{"line_number":567,"context_line":"        additional given labels."},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4b942d38_60e0b20e","line":565,"updated":"2026-02-06 22:22:55.000000000","message":"get_updated_labels seems could be confused with update_swift_base_labels, wonder if would be better to rename this to get_overlay_labels or something","commit_id":"01d3763074c589f54f05dd4cfa5a15e40ce0f12b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"337952df737bfa4e28d9d67c99c898471a6c62b5","unresolved":false,"context_lines":[{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    @staticmethod"},{"line_number":564,"context_line":"    def get_updated_labels(labels, status_int\u003dNone, policy_index\u003dNone):"},{"line_number":565,"context_line":"        \"\"\""},{"line_number":566,"context_line":"        Returns a new dict, based on the given ``labels`` dict, with the"},{"line_number":567,"context_line":"        additional given labels."},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"188f3ec0_a653c954","line":565,"in_reply_to":"4b942d38_60e0b20e","updated":"2026-02-17 15:25:00.000000000","message":"Done","commit_id":"01d3763074c589f54f05dd4cfa5a15e40ce0f12b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2e0fb646fd2253574d82ceb03375cfb904799ac3","unresolved":true,"context_lines":[{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        start_response_args \u003d [None]"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        # note: base_labels are used here so status and policy are not included"},{"line_number":595,"context_line":"        statsd_emit_callback \u003d BufferXferEmitCallback("},{"line_number":596,"context_line":"            \u0027swift_proxy_server_request_body_streaming_bytes\u0027,"},{"line_number":597,"context_line":"            labels, self.statsd, self.emit_buffer_xfer_bytes_sec)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ce359714_95847fea","line":594,"updated":"2026-02-06 19:00:49.000000000","message":"fix comment","commit_id":"01d3763074c589f54f05dd4cfa5a15e40ce0f12b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"337952df737bfa4e28d9d67c99c898471a6c62b5","unresolved":false,"context_lines":[{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        start_response_args \u003d [None]"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        # note: base_labels are used here so status and policy are not included"},{"line_number":595,"context_line":"        statsd_emit_callback \u003d BufferXferEmitCallback("},{"line_number":596,"context_line":"            \u0027swift_proxy_server_request_body_streaming_bytes\u0027,"},{"line_number":597,"context_line":"            labels, self.statsd, self.emit_buffer_xfer_bytes_sec)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bde9f33f_3f79f869","line":594,"in_reply_to":"ce359714_95847fea","updated":"2026-02-17 15:25:00.000000000","message":"Done","commit_id":"01d3763074c589f54f05dd4cfa5a15e40ce0f12b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"45003675f123d37e4caf6db58e0dcd335cfc2d10","unresolved":true,"context_lines":[{"line_number":515,"context_line":"        :return: a dict of labels associated with the request."},{"line_number":516,"context_line":"        \"\"\""},{"line_number":517,"context_line":"        acc, cont, obj \u003d self.get_aco_from_path(req.path)"},{"line_number":518,"context_line":"        if s3_req:"},{"line_number":519,"context_line":"            cont, obj \u003d extract_bucket_and_key("},{"line_number":520,"context_line":"                req, self.storage_domains, False)"},{"line_number":521,"context_line":"        method \u003d self.method_from_req(req)"}],"source_content_type":"text/x-python","patch_set":2,"id":"b0d2ec6c_d1469b19","line":518,"updated":"2026-02-12 17:10:29.000000000","message":"I think I might need to also check that acc is None here...I think that might prevent the \"rightmost only\" case get more sensible labels by *preventing* this dropping through to s3 path parsing *even though we have a valid swift path*","commit_id":"1b9208e09ba81b79a355b0dc9d502f805b545230"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"337952df737bfa4e28d9d67c99c898471a6c62b5","unresolved":false,"context_lines":[{"line_number":515,"context_line":"        :return: a dict of labels associated with the request."},{"line_number":516,"context_line":"        \"\"\""},{"line_number":517,"context_line":"        acc, cont, obj \u003d self.get_aco_from_path(req.path)"},{"line_number":518,"context_line":"        if s3_req:"},{"line_number":519,"context_line":"            cont, obj \u003d extract_bucket_and_key("},{"line_number":520,"context_line":"                req, self.storage_domains, False)"},{"line_number":521,"context_line":"        method \u003d self.method_from_req(req)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dd3fb07e_e0ad7b69","line":518,"in_reply_to":"1998b6ea_290d0b78","updated":"2026-02-17 15:25:00.000000000","message":"Done","commit_id":"1b9208e09ba81b79a355b0dc9d502f805b545230"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"d081073f13b54f40b37025ca85ae9cff88f9076f","unresolved":true,"context_lines":[{"line_number":515,"context_line":"        :return: a dict of labels associated with the request."},{"line_number":516,"context_line":"        \"\"\""},{"line_number":517,"context_line":"        acc, cont, obj \u003d self.get_aco_from_path(req.path)"},{"line_number":518,"context_line":"        if s3_req:"},{"line_number":519,"context_line":"            cont, obj \u003d extract_bucket_and_key("},{"line_number":520,"context_line":"                req, self.storage_domains, False)"},{"line_number":521,"context_line":"        method \u003d self.method_from_req(req)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1998b6ea_290d0b78","line":518,"in_reply_to":"b0d2ec6c_d1469b19","updated":"2026-02-12 20:16:42.000000000","message":"the previous implementation checks that \"acc is None\", although couldn\u0027t seem to recall for s3api, if the acc from initial request path would ever be valid","commit_id":"1b9208e09ba81b79a355b0dc9d502f805b545230"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"6d3c39876e32f20af4353521d29f93c6af39442b","unresolved":true,"context_lines":[{"line_number":587,"context_line":"                # idea we have"},{"line_number":588,"context_line":"                if k in (\u0027resource\u0027, \u0027account\u0027):"},{"line_number":589,"context_line":"                    base_labels.setdefault(k, v)"},{"line_number":590,"context_line":"            req_labels \u003d ChainMap(labels, base_labels)"},{"line_number":591,"context_line":"        return req_labels"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"f5ab0e07_748d2fbe","line":590,"updated":"2026-02-13 16:16:48.000000000","message":"was discussing with Al on this: in update_swift_base_labels function, for right-most proxy_logging, the patch currently overlays updated request labels to base_labels. IIUC, the intention is to update {container, method} labels for right-most proxy_logging, for example  bucket segment, or client PUT request is modified to a POST subrequest, etc. The intention however should not be to update other labels such as resource. So wonder if it would be easier to understand if explicitly overlay {container, method} here?","commit_id":"1b9208e09ba81b79a355b0dc9d502f805b545230"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"337952df737bfa4e28d9d67c99c898471a6c62b5","unresolved":true,"context_lines":[{"line_number":587,"context_line":"                # idea we have"},{"line_number":588,"context_line":"                if k in (\u0027resource\u0027, \u0027account\u0027):"},{"line_number":589,"context_line":"                    base_labels.setdefault(k, v)"},{"line_number":590,"context_line":"            req_labels \u003d ChainMap(labels, base_labels)"},{"line_number":591,"context_line":"        return req_labels"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"86b1f456_8ac1941c","line":590,"in_reply_to":"f5ab0e07_748d2fbe","updated":"2026-02-17 15:25:00.000000000","message":"My current thinking is that we want each middleware to emit stats with labels based on the request it is handling, except where labels are not available and can be inherited from base_labels (e.g. \u0027api\u0027).\n\nSo rightmost *does* potentially use different account, container, method, resource, status labels.","commit_id":"1b9208e09ba81b79a355b0dc9d502f805b545230"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"625b6727183761339ff6f31e6256783d7ab333a8","unresolved":true,"context_lines":[{"line_number":593,"context_line":"    @staticmethod"},{"line_number":594,"context_line":"    def get_response_labels(labels, status_int\u003dNone, policy_index\u003dNone):"},{"line_number":595,"context_line":"        \"\"\""},{"line_number":596,"context_line":"        Returns a new dict, based on the given ``labels`` dict, with the"},{"line_number":597,"context_line":"        additional given labels."},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        :param labels: a dict"}],"source_content_type":"text/x-python","patch_set":2,"id":"4f984543_270b5747","line":596,"updated":"2026-02-11 22:23:50.000000000","message":"nit: comment should probably mention that this is currently used for response?","commit_id":"1b9208e09ba81b79a355b0dc9d502f805b545230"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"337952df737bfa4e28d9d67c99c898471a6c62b5","unresolved":false,"context_lines":[{"line_number":593,"context_line":"    @staticmethod"},{"line_number":594,"context_line":"    def get_response_labels(labels, status_int\u003dNone, policy_index\u003dNone):"},{"line_number":595,"context_line":"        \"\"\""},{"line_number":596,"context_line":"        Returns a new dict, based on the given ``labels`` dict, with the"},{"line_number":597,"context_line":"        additional given labels."},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        :param labels: a dict"}],"source_content_type":"text/x-python","patch_set":2,"id":"f02e5ef5_ee45ba8d","line":596,"in_reply_to":"4f984543_270b5747","updated":"2026-02-17 15:25:00.000000000","message":"Done","commit_id":"1b9208e09ba81b79a355b0dc9d502f805b545230"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"410ee06006d9b472904a7d0a6a5aa9aa960f0dac","unresolved":true,"context_lines":[{"line_number":548,"context_line":"        dict of the req_labels associated with the request that it is handling."},{"line_number":549,"context_line":"        This dict is based on the base_labels but may vary from them. For"},{"line_number":550,"context_line":"        example, the rightmost proxy logging instance may have a different"},{"line_number":551,"context_line":"        \u0027container\u0027 \u0027label\u0027 when handling a subrequest whose path has been"},{"line_number":552,"context_line":"        modified with respect to the client request."},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        Each proxy logging middleware instance also creates a local"}],"source_content_type":"text/x-python","patch_set":3,"id":"2f09bb8f_a6081983","line":551,"range":{"start_line":551,"start_character":20,"end_line":551,"end_character":27},"updated":"2026-02-27 05:49:19.000000000","message":"Does this need to be in single quotes?","commit_id":"169a83ea4c0ee2ec30174380dd6bf4e698410110"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6060127bc2d997d5daa8b9d014697f1dbb948382","unresolved":false,"context_lines":[{"line_number":548,"context_line":"        dict of the req_labels associated with the request that it is handling."},{"line_number":549,"context_line":"        This dict is based on the base_labels but may vary from them. For"},{"line_number":550,"context_line":"        example, the rightmost proxy logging instance may have a different"},{"line_number":551,"context_line":"        \u0027container\u0027 \u0027label\u0027 when handling a subrequest whose path has been"},{"line_number":552,"context_line":"        modified with respect to the client request."},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        Each proxy logging middleware instance also creates a local"}],"source_content_type":"text/x-python","patch_set":3,"id":"5e037fb3_6684cc1f","line":551,"range":{"start_line":551,"start_character":20,"end_line":551,"end_character":27},"in_reply_to":"2f09bb8f_a6081983","updated":"2026-03-05 21:51:58.000000000","message":"Done","commit_id":"169a83ea4c0ee2ec30174380dd6bf4e698410110"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"410ee06006d9b472904a7d0a6a5aa9aa960f0dac","unresolved":true,"context_lines":[{"line_number":584,"context_line":"                # if these base_labels are not already set then this is the"},{"line_number":585,"context_line":"                # best idea we have"},{"line_number":586,"context_line":"                if k in (\u0027resource\u0027, \u0027account\u0027):"},{"line_number":587,"context_line":"                    base_labels.setdefault(k, v)"},{"line_number":588,"context_line":"            req_labels \u003d ChainMap(labels, base_labels)"},{"line_number":589,"context_line":"        return req_labels"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"43db9f91_cca6942f","line":587,"updated":"2026-02-27 05:49:19.000000000","message":"What so this is basically settingh te resource and account in the orig base_labels in the req. I guess so it can deal with responses and still have the orig data? Except maybe now it knows the account and resource if it didn\u0027t already?\n\nI think I\u0027m getting it.","commit_id":"169a83ea4c0ee2ec30174380dd6bf4e698410110"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6060127bc2d997d5daa8b9d014697f1dbb948382","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                # if these base_labels are not already set then this is the"},{"line_number":585,"context_line":"                # best idea we have"},{"line_number":586,"context_line":"                if k in (\u0027resource\u0027, \u0027account\u0027):"},{"line_number":587,"context_line":"                    base_labels.setdefault(k, v)"},{"line_number":588,"context_line":"            req_labels \u003d ChainMap(labels, base_labels)"},{"line_number":589,"context_line":"        return req_labels"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3c70f47c_79334d71","line":587,"in_reply_to":"0ea9336a_5022fef4","updated":"2026-03-05 21:51:58.000000000","message":"Acknowledged","commit_id":"169a83ea4c0ee2ec30174380dd6bf4e698410110"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"898b55df4097638ab5a7451c330ff692ff957b7d","unresolved":true,"context_lines":[{"line_number":584,"context_line":"                # if these base_labels are not already set then this is the"},{"line_number":585,"context_line":"                # best idea we have"},{"line_number":586,"context_line":"                if k in (\u0027resource\u0027, \u0027account\u0027):"},{"line_number":587,"context_line":"                    base_labels.setdefault(k, v)"},{"line_number":588,"context_line":"            req_labels \u003d ChainMap(labels, base_labels)"},{"line_number":589,"context_line":"        return req_labels"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"0ea9336a_5022fef4","line":587,"in_reply_to":"43db9f91_cca6942f","updated":"2026-03-02 22:25:05.000000000","message":"indeed this updates resource and account in orig base_labels, as the left-most proxy_logging could not parse those from request line for e.g. s3 requests","commit_id":"169a83ea4c0ee2ec30174380dd6bf4e698410110"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"410ee06006d9b472904a7d0a6a5aa9aa960f0dac","unresolved":true,"context_lines":[{"line_number":691,"context_line":"                    labels\u003dresp_labels,"},{"line_number":692,"context_line":"                )"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"            # note: labels are used here so status and policy are not included"},{"line_number":695,"context_line":"            statsd_emit_callback \u003d BufferXferEmitCallback("},{"line_number":696,"context_line":"                \u0027swift_proxy_server_response_body_streaming_bytes\u0027,"},{"line_number":697,"context_line":"                resp_labels, self.statsd, self.emit_buffer_xfer_bytes_sec)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fca74b19_17efd933","line":694,"range":{"start_line":694,"start_character":20,"end_line":694,"end_character":26},"updated":"2026-02-27 05:49:19.000000000","message":"resp_labels you mean? And also doesn\u0027t that mean status might be included because wire_status_int was passed in?","commit_id":"169a83ea4c0ee2ec30174380dd6bf4e698410110"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6060127bc2d997d5daa8b9d014697f1dbb948382","unresolved":false,"context_lines":[{"line_number":691,"context_line":"                    labels\u003dresp_labels,"},{"line_number":692,"context_line":"                )"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"            # note: labels are used here so status and policy are not included"},{"line_number":695,"context_line":"            statsd_emit_callback \u003d BufferXferEmitCallback("},{"line_number":696,"context_line":"                \u0027swift_proxy_server_response_body_streaming_bytes\u0027,"},{"line_number":697,"context_line":"                resp_labels, self.statsd, self.emit_buffer_xfer_bytes_sec)"}],"source_content_type":"text/x-python","patch_set":3,"id":"f03f79bb_ceaa3664","line":694,"range":{"start_line":694,"start_character":20,"end_line":694,"end_character":26},"in_reply_to":"113c1e0a_b30c17cd","updated":"2026-03-05 21:51:58.000000000","message":"Done","commit_id":"169a83ea4c0ee2ec30174380dd6bf4e698410110"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"a8d266bba27411a885a346dd216cf436acc0ffb3","unresolved":true,"context_lines":[{"line_number":691,"context_line":"                    labels\u003dresp_labels,"},{"line_number":692,"context_line":"                )"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"            # note: labels are used here so status and policy are not included"},{"line_number":695,"context_line":"            statsd_emit_callback \u003d BufferXferEmitCallback("},{"line_number":696,"context_line":"                \u0027swift_proxy_server_response_body_streaming_bytes\u0027,"},{"line_number":697,"context_line":"                resp_labels, self.statsd, self.emit_buffer_xfer_bytes_sec)"}],"source_content_type":"text/x-python","patch_set":3,"id":"113c1e0a_b30c17cd","line":694,"range":{"start_line":694,"start_character":20,"end_line":694,"end_character":26},"in_reply_to":"fca74b19_17efd933","updated":"2026-03-02 22:29:05.000000000","message":"this comment is probably outdated, resp_labels could include status, policy index","commit_id":"169a83ea4c0ee2ec30174380dd6bf4e698410110"}]}
