)]}'
{"etc/proxy-server.conf-sample":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9c7d203f1f98b5b3c9a58ceeea8c0273e1f14ecc","unresolved":false,"context_lines":[{"line_number":861,"context_line":"#"},{"line_number":862,"context_line":"# Set to true to enable RFC-compliant ETags cluster-wide by default. Users"},{"line_number":863,"context_line":"# can still opt-out by setting appropriate account or container metadata."},{"line_number":864,"context_line":"# turn_on_by_default \u003d false"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"[filter:list-endpoints]"},{"line_number":867,"context_line":"use \u003d egg:swift#list_endpoints"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"3fa7e38b_4e4e9239","line":864,"updated":"2020-01-08 21:52:12.000000000","message":"woot!","commit_id":"972f69381e4a2bbd66f1f3385ee0076e800d5758"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d6693935d5808c89c1ec2662e4f9f8d8672f333e","unresolved":false,"context_lines":[{"line_number":861,"context_line":"#"},{"line_number":862,"context_line":"# Set to true to enable RFC-compliant ETags cluster-wide by default. Users"},{"line_number":863,"context_line":"# can still opt-out by setting appropriate account or container metadata."},{"line_number":864,"context_line":"# turn_on_by_default \u003d false"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"[filter:list-endpoints]"},{"line_number":867,"context_line":"use \u003d egg:swift#list_endpoints"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"3fa7e38b_0e889a1f","line":864,"in_reply_to":"3fa7e38b_4e4e9239","updated":"2020-01-08 22:05:37.000000000","message":"Oops. Option name in code ATM is enable_by_default :-(","commit_id":"972f69381e4a2bbd66f1f3385ee0076e800d5758"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"b7a8094723226670e61251b09ceef61cecbaf66c","unresolved":false,"context_lines":[{"line_number":850,"context_line":"# maximum_length \u003d 255"},{"line_number":851,"context_line":"# forbidden_regexp \u003d /\\./|/\\.\\./|/\\.$|/\\.\\.$"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"# Note: Etag quoter should be placed just after cache in the pipeline."},{"line_number":854,"context_line":"[filter:etag-quoter]"},{"line_number":855,"context_line":"use \u003d egg:swift#etag_quoter"},{"line_number":856,"context_line":"# Historically, Swift has emitted bare MD5 hex digests as ETags, which is not"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"3fa7e38b_ab3858ca","line":853,"updated":"2020-01-27 22:31:26.000000000","message":"we should add this to saio sample file.","commit_id":"27fd97cef927f39a057f46cf09a6c38ed52c6aa9"}],"swift/common/middleware/etagquoter.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df06aa1dade6f5099477352cf9a3d384bec4678a","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"This middleware fix the Etag header of responses so that it is RFC compliant."},{"line_number":18,"context_line":"RFC[1] specifies that the value of the Etag header must be double quoted."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"It must placed be after at the beggining of the pipeline, right after cache."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9330b4eb","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":6},"updated":"2019-12-19 21:05:01.000000000","message":"nit: We could even make it an rst link, like\n\n `RFC 7232 \u003chttps://tools.ietf.org/html/rfc7232#section-2.3\u003e`__\n\nIIRC...","commit_id":"959b76f4b3d78b4ee61771cdcba7885e82461c06"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df06aa1dade6f5099477352cf9a3d384bec4678a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"This middleware fix the Etag header of responses so that it is RFC compliant."},{"line_number":18,"context_line":"RFC[1] specifies that the value of the Etag header must be double quoted."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"It must placed be after at the beggining of the pipeline, right after cache."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    [pipeline:main]"},{"line_number":23,"context_line":"    pipeline \u003d ...  cache etagquoter ..."}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_53231cab","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":76},"updated":"2019-12-19 21:05:01.000000000","message":"\u003e It must be placed at the beginning of the pipeline, right after cache.","commit_id":"959b76f4b3d78b4ee61771cdcba7885e82461c06"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df06aa1dade6f5099477352cf9a3d384bec4678a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            version, account, container, obj \u003d req.split_path("},{"line_number":52,"context_line":"                    2, 4, rest_with_last\u003dTrue)"},{"line_number":53,"context_line":"        except ValueError:"},{"line_number":54,"context_line":"            return self.app(env, start_response)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if not valid_api_version(version) or not obj:"},{"line_number":57,"context_line":"            return self.app(env, start_response)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9829b39d","line":54,"updated":"2019-12-19 21:05:01.000000000","message":"nit: Might move this out of the exception handling, just to have cleaner tracebacks on py3.","commit_id":"959b76f4b3d78b4ee61771cdcba7885e82461c06"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df06aa1dade6f5099477352cf9a3d384bec4678a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        if not container_info or not is_success(container_info[\u0027status\u0027]):"},{"line_number":61,"context_line":"            return self.app(env, start_response)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        flag \u003d container_info.get(\u0027meta\u0027, {}).get(\u0027enable-etag-rfc-compliancy\u0027)"},{"line_number":64,"context_line":"        if flag is None:"},{"line_number":65,"context_line":"            account_info \u003d get_account_info(env, self.app, \u0027EQ\u0027)"},{"line_number":66,"context_line":"            if not account_info or not is_success(account_info[\u0027status\u0027]):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_0dfb477b","line":63,"range":{"start_line":63,"start_character":51,"end_line":63,"end_character":77},"updated":"2019-12-19 21:05:01.000000000","message":"Maybe better as ensure-rfc-compliant-etags? *shrug*\n\nHappy to continue looking for the other value, too, of course.","commit_id":"959b76f4b3d78b4ee61771cdcba7885e82461c06"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df06aa1dade6f5099477352cf9a3d384bec4678a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                return self.app(env, start_response)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"            flag \u003d account_info.get(\u0027meta\u0027, {}"},{"line_number":70,"context_line":"                    ).get(\u0027enable-etag-rfc-compliancy\u0027, \u0027false\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        if not config_true_value(flag):"},{"line_number":73,"context_line":"            return self.app(env, start_response)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_1304c413","line":70,"range":{"start_line":70,"start_character":56,"end_line":70,"end_character":63},"updated":"2019-12-19 21:05:01.000000000","message":"Cool -- so if we wanted there to also be a cluster-wide config option, we could just make this\n\n self.conf.get(\u0027turn_on_by_default\u0027, \u0027false\u0027)","commit_id":"959b76f4b3d78b4ee61771cdcba7885e82461c06"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df06aa1dade6f5099477352cf9a3d384bec4678a","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        for i, (header, value) in enumerate(headers):"},{"line_number":78,"context_line":"            if header.lower() \u003d\u003d \u0027etag\u0027:"},{"line_number":79,"context_line":"                if value[0] !\u003d \u0027\"\u0027 or value[-1] !\u003d \u0027\"\u0027:"},{"line_number":80,"context_line":"                    headers[i] \u003d (header, \u0027\"%s\"\u0027 % value)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        start_response(status, headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_f336c8df","line":79,"updated":"2019-12-19 21:05:01.000000000","message":"Might want to watch for weak etags, too... *shrug*\n\nI don\u0027t think anyone actually *uses* weak etags with Swift, though.","commit_id":"959b76f4b3d78b4ee61771cdcba7885e82461c06"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8210f49806c0f5e553af8536ce156c03810dceb4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def __init__(self, app, conf):"},{"line_number":52,"context_line":"        self.app \u003d app"},{"line_number":53,"context_line":"        self.conf \u003d conf"},{"line_number":54,"context_line":"        self.logger \u003d get_logger(conf, log_route\u003d\u0027etagquoter\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def __call__(self, env, start_response):"},{"line_number":57,"context_line":"        req \u003d Request(env)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_4e4a6724","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":62},"updated":"2019-12-27 19:46:06.000000000","message":"Unused","commit_id":"c217836e169bf1cc63998ae728c04cb123c5b7b1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ddbd0718eae5ba344b50957ccc3795b99fd48741","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def __init__(self, app, conf):"},{"line_number":52,"context_line":"        self.app \u003d app"},{"line_number":53,"context_line":"        self.conf \u003d conf"},{"line_number":54,"context_line":"        self.logger \u003d get_logger(conf, log_route\u003d\u0027etagquoter\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def __call__(self, env, start_response):"},{"line_number":57,"context_line":"        req \u003d Request(env)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_bce3fc05","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":62},"in_reply_to":"3fa7e38b_4e4a6724","updated":"2020-01-03 06:16:01.000000000","message":"Done","commit_id":"c217836e169bf1cc63998ae728c04cb123c5b7b1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8210f49806c0f5e553af8536ce156c03810dceb4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        if not is_object_request or not valid_api_version(version):"},{"line_number":66,"context_line":"            return self.app(env, start_response)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        container_info \u003d get_container_info(env, self.app, \u0027EQ\u0027)"},{"line_number":69,"context_line":"        if not container_info or not is_success(container_info[\u0027status\u0027]):"},{"line_number":70,"context_line":"            return self.app(env, start_response)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_8e6dbf9a","line":68,"range":{"start_line":68,"start_character":60,"end_line":68,"end_character":62},"updated":"2019-12-27 19:46:06.000000000","message":"Oh, right -- I should add the new swift_source to doc/source/logs.rst","commit_id":"c217836e169bf1cc63998ae728c04cb123c5b7b1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ddbd0718eae5ba344b50957ccc3795b99fd48741","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        if not is_object_request or not valid_api_version(version):"},{"line_number":66,"context_line":"            return self.app(env, start_response)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        container_info \u003d get_container_info(env, self.app, \u0027EQ\u0027)"},{"line_number":69,"context_line":"        if not container_info or not is_success(container_info[\u0027status\u0027]):"},{"line_number":70,"context_line":"            return self.app(env, start_response)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_dce038fb","line":68,"range":{"start_line":68,"start_character":60,"end_line":68,"end_character":62},"in_reply_to":"3fa7e38b_8e6dbf9a","updated":"2020-01-03 06:16:01.000000000","message":"Done","commit_id":"c217836e169bf1cc63998ae728c04cb123c5b7b1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8210f49806c0f5e553af8536ce156c03810dceb4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        if not container_info or not is_success(container_info[\u0027status\u0027]):"},{"line_number":70,"context_line":"            return self.app(env, start_response)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        flag \u003d container_info.get(\u0027meta\u0027, {}).get(\u0027enable-etag-rfc-compliancy\u0027)"},{"line_number":73,"context_line":"        if flag is None:"},{"line_number":74,"context_line":"            account_info \u003d get_account_info(env, self.app, \u0027EQ\u0027)"},{"line_number":75,"context_line":"            if not account_info or not is_success(account_info[\u0027status\u0027]):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_ee5c73f1","line":72,"range":{"start_line":72,"start_character":51,"end_line":72,"end_character":77},"updated":"2019-12-27 19:46:06.000000000","message":"I\u0027m still waffling about this name.\n\n X-Container-Meta-Rfc-Compliant-Etags: true\n\nmaybe reads a little better to me? *shrug*","commit_id":"c217836e169bf1cc63998ae728c04cb123c5b7b1"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"4bcdb6aeda63faeb54b64b4715ff2dc2c6fec43a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"`RFC 7232 \u003chttps://tools.ietf.org/html/rfc7232#section-2.3\u003e`__ specifies that"},{"line_number":19,"context_line":"the value of the Etag header must be double quoted."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"It must be placed at the beggining of the pipeline, right after cache::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"   [pipeline:main]"},{"line_number":24,"context_line":"   pipeline \u003d ...  cache etagquoter ..."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_d5286699","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":50},"updated":"2020-01-16 04:24:00.000000000","message":"would it make sense to automatically include in the pipeline[1]? It would be transparent to ops and API users. with the benefit of already being available if users needed to use for a given account/container, plus no need for config changes.\n\n[1] - https://github.com/openstack/swift/blob/master/swift/proxy/server.py#L66","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b34c8011b5a4b8334979b8d062f1bc86d6b911a3","unresolved":false,"context_lines":[{"line_number":18,"context_line":"`RFC 7232 \u003chttps://tools.ietf.org/html/rfc7232#section-2.3\u003e`__ specifies that"},{"line_number":19,"context_line":"the value of the Etag header must be double quoted."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"It must be placed at the beggining of the pipeline, right after cache::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"   [pipeline:main]"},{"line_number":24,"context_line":"   pipeline \u003d ...  cache etagquoter ..."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_d456e1cd","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":50},"in_reply_to":"3fa7e38b_01ca199f","updated":"2020-01-21 16:47:02.000000000","message":"My argument comes down to risk mitigation. There are two aspects I\u0027m thinking about:\n\n* Historically, we\u0027ve had mixed results with auto-insertion. I\u0027d maybe feel better about it if we had some kind of pipeline validation -- time for me to dust off https://review.opendev.org/#/c/635040/ I guess...\n* Operators may (for whatever reason) want to keep the old-style unquoted etags cluster-wide -- and the only way to ensure that is by not having the middleware in the pipeline at all.","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"b7a8094723226670e61251b09ceef61cecbaf66c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"`RFC 7232 \u003chttps://tools.ietf.org/html/rfc7232#section-2.3\u003e`__ specifies that"},{"line_number":19,"context_line":"the value of the Etag header must be double quoted."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"It must be placed at the beggining of the pipeline, right after cache::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"   [pipeline:main]"},{"line_number":24,"context_line":"   pipeline \u003d ...  cache etagquoter ..."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2b9b08c8","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":50},"in_reply_to":"3fa7e38b_19fc890b","updated":"2020-01-27 22:31:26.000000000","message":"I would also like to see quoted etags become the default in the long-term. I\u0027d like to believe it is possible if we follow a deprecation process. I think this middleware is just the first step. Maybe we could also state our intentions in the documentation and CHANGELOGs?","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"070f1be0b8ba5dd57db6f301d18ee895574815b3","unresolved":false,"context_lines":[{"line_number":18,"context_line":"`RFC 7232 \u003chttps://tools.ietf.org/html/rfc7232#section-2.3\u003e`__ specifies that"},{"line_number":19,"context_line":"the value of the Etag header must be double quoted."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"It must be placed at the beggining of the pipeline, right after cache::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"   [pipeline:main]"},{"line_number":24,"context_line":"   pipeline \u003d ...  cache etagquoter ..."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_cbaef49f","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":50},"in_reply_to":"3fa7e38b_2b9b08c8","updated":"2020-01-27 22:55:06.000000000","message":"\u003e I think this middleware is just the first step. Maybe we could also state our intentions in the documentation and CHANGELOGs?\n\nAgreed -- the flow I see happening is:\n\n* We have this middleware available as an option.\n* We make it a recommended middleware, in the saio and sample proxy-server pipelines.\n* We make it required, using auto-insertion.\n* We change enable_by_default\u0027s default to true and start logging deprecation warnings.\n* We remove enable_by_default as an option.\n\nFunc tests ought to pass with enable_by_default\u003dTrue by step 2, 3 at the latest. I need to think about how best to communicate that roadmap to users, particularly considering how we won\u0027t necessarily get all the way to the end if there\u0027s enough push-back. I\u0027ve got this feeling like we won\u0027t know until step 4 or so, when we get a bunch of bug reports about 422s :-/","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"7f9682af76786694496402d6f0c6c8623120514d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"`RFC 7232 \u003chttps://tools.ietf.org/html/rfc7232#section-2.3\u003e`__ specifies that"},{"line_number":19,"context_line":"the value of the Etag header must be double quoted."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"It must be placed at the beggining of the pipeline, right after cache::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"   [pipeline:main]"},{"line_number":24,"context_line":"   pipeline \u003d ...  cache etagquoter ..."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_01ca199f","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":50},"in_reply_to":"3fa7e38b_3901976e","updated":"2020-01-20 05:31:52.000000000","message":"I think I understand your point, but still don\u0027t see an argument as to why we shouldn\u0027t do it. My intent is to simplify operator/user configuration.\n\nI would argue that we should be auto-inserting more middlewares, my hope is that it would minimize user mistakes in having to configure pipelines. The more middleware we make available, the higher chance of getting the pipeline order wrong.\n\nIn the end I believe I\u0027m just extending my previous comment about not having this feature as a complete new middleware. I think the feature could have been added to an existing middleware.","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"9a49c3e184c2e4143926d9bd06ffe10c819bf6f6","unresolved":false,"context_lines":[{"line_number":18,"context_line":"`RFC 7232 \u003chttps://tools.ietf.org/html/rfc7232#section-2.3\u003e`__ specifies that"},{"line_number":19,"context_line":"the value of the Etag header must be double quoted."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"It must be placed at the beggining of the pipeline, right after cache::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"   [pipeline:main]"},{"line_number":24,"context_line":"   pipeline \u003d ...  cache etagquoter ..."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_19fc890b","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":50},"in_reply_to":"3fa7e38b_d456e1cd","updated":"2020-01-23 21:37:24.000000000","message":"It depends on what\u0027s the long-term strategy about etag. I would love that at some point the quoted etags become the default, but I don\u0027t see this happening because I\u0027m not sure a lot of Swift libraries would start to handle it.\n\nGiven that I don\u0027t see quoted becomes the default at some point (or only in a very far future), I don\u0027t see a reason to auto-insert it in the pipeline (at least for now).","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6d461c38a693f48bba276b929514917e017c574b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"`RFC 7232 \u003chttps://tools.ietf.org/html/rfc7232#section-2.3\u003e`__ specifies that"},{"line_number":19,"context_line":"the value of the Etag header must be double quoted."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"It must be placed at the beggining of the pipeline, right after cache::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"   [pipeline:main]"},{"line_number":24,"context_line":"   pipeline \u003d ...  cache etagquoter ..."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_3901976e","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":50},"in_reply_to":"3fa7e38b_d5286699","updated":"2020-01-17 21:56:09.000000000","message":"Historically, we\u0027ve used pipeline auto-insertion to ensure smooth upgrades when\n\n* pulling features out of the proxy-server app (dlo, versioned_writes, copy) or\n* adding a new required middleware such that your cluster is (or should be considered) broken without it (catch_errors, gatekeeper, listing_formats)\n\nand this doesn\u0027t really feel like either. Arguably, listing_formats *shouldn\u0027t* have gotten that treatment -- we could\u0027ve just kept doing content-type checks in various middlewares and things should have mostly worked. Probably would\u0027ve saved us from\n\n* https://bugs.launchpad.net/swift/+bug/1758710,\n* https://bugs.launchpad.net/swift/+bug/1806468, and\n* https://bugs.launchpad.net/swift/+bug/1856303.","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"4bcdb6aeda63faeb54b64b4715ff2dc2c6fec43a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"   [filter:etagquoter]"},{"line_number":27,"context_line":"   use \u003d egg:swift#etagquoter"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Set ``X-Account-Meta-Rfc-Compliant-Etags: true`` at the account"},{"line_number":30,"context_line":"level to have any Etags in object responses be double quoted, as in"},{"line_number":31,"context_line":"``\"d41d8cd98f00b204e9800998ecf8427e\"``. Alternatively, you may"},{"line_number":32,"context_line":"only fix Etags in a single container by setting"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_40083624","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":20},"updated":"2020-01-16 04:24:00.000000000","message":"I suggest avoiding to use the `Meta` namespace. How about `X-Account-Rfc-Compliant-Etags` for client header and then store as sysmeta?","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6d461c38a693f48bba276b929514917e017c574b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"   [filter:etagquoter]"},{"line_number":27,"context_line":"   use \u003d egg:swift#etagquoter"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Set ``X-Account-Meta-Rfc-Compliant-Etags: true`` at the account"},{"line_number":30,"context_line":"level to have any Etags in object responses be double quoted, as in"},{"line_number":31,"context_line":"``\"d41d8cd98f00b204e9800998ecf8427e\"``. Alternatively, you may"},{"line_number":32,"context_line":"only fix Etags in a single container by setting"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_f97d3fe6","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":20},"in_reply_to":"3fa7e38b_40083624","updated":"2020-01-17 21:56:09.000000000","message":"Really makes me wish we had a helper for translating client \u003c-\u003e sysmeta headers... and then there\u0027s the x-remove-account-rfc-compliant-etags case, too....\n\nThis is gonna need so many more tests :-(","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"4bcdb6aeda63faeb54b64b4715ff2dc2c6fec43a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    conf \u003d global_conf.copy()"},{"line_number":99,"context_line":"    conf.update(local_conf)"},{"line_number":100,"context_line":"    register_swift_info("},{"line_number":101,"context_line":"        \u0027etag_quoter\u0027, enable_by_default\u003dconfig_true_value("},{"line_number":102,"context_line":"            conf.get(\u0027enable_by_default\u0027, \u0027false\u0027)))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def etagquoter_filter(app):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_002b1e7c","line":101,"range":{"start_line":101,"start_character":9,"end_line":101,"end_character":20},"updated":"2020-01-16 04:24:00.000000000","message":"nit: could we add this under swift param as \"quoted_etags\"?","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6d461c38a693f48bba276b929514917e017c574b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    conf \u003d global_conf.copy()"},{"line_number":99,"context_line":"    conf.update(local_conf)"},{"line_number":100,"context_line":"    register_swift_info("},{"line_number":101,"context_line":"        \u0027etag_quoter\u0027, enable_by_default\u003dconfig_true_value("},{"line_number":102,"context_line":"            conf.get(\u0027enable_by_default\u0027, \u0027false\u0027)))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def etagquoter_filter(app):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_19337b63","line":101,"range":{"start_line":101,"start_character":9,"end_line":101,"end_character":20},"in_reply_to":"3fa7e38b_002b1e7c","updated":"2020-01-17 21:56:09.000000000","message":"I might get behind that idea if we did the auto-insertion thing, but I\u0027m not sold on that yet.","commit_id":"ba5f4a8ac75763725469dd471c4c9b85e54a14cc"}]}
