)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"24c0512d84dd441eae7bcb170962f6197f76a026","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9d87effe_86973321","updated":"2022-08-01 20:50:50.000000000","message":"Did you look into putting container_existence_skip_cache_pct into [DEFAULT]? That passing around the final app looks just a bit too dangerous. Worse, the code silently ignores any issues by catching AttributeError. So, why not just remove all of that?","commit_id":"e6d8dab75a2f7cdbd23769c298696962214d3f5e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a8ee944ad5abb7afb324a232d4bdcbc12baa27c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8c883229_306e2599","in_reply_to":"9d87effe_86973321","updated":"2022-08-03 18:18:15.000000000","message":"\u003e Did you look into putting container_existence_skip_cache_pct into [DEFAULT]? That passing around the final app looks just a bit too dangerous.\n\nWhat would the idea be? Have every middleware extract that themselves and pass it as part of get_container_info? Sounds like a lot of extra churn and increased bug surface area.\n\n\u003e Worse, the code silently ignores any issues by catching AttributeError. So, why not just remove all of that?\n\nIt\u0027s a feature, not a bug -- in case other (third party) middlewares are composed the way s3api and versioned_writes are (so the inner filter doesn\u0027t have the final app reference). I don\u0027t think that\u0027s common, but want to be robust to it.\n\nFWIW, some of the old patchsets of https://review.opendev.org/c/openstack/swift/+/821921 let the AttributeError buddle out -- see https://review.opendev.org/c/openstack/swift/+/821921/3/swift/proxy/controllers/base.py for example.\n\nMaybe there should be some configurability for middleware developers? OTOH, if they\u0027re that concerned about their get-info calls, they could always hack up the proxy server themselves. *shrug*","commit_id":"e6d8dab75a2f7cdbd23769c298696962214d3f5e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5b80591d5757e63ea35abbd3dd26c8b415daa19b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b56582ba_c95a4d23","updated":"2022-08-30 18:29:47.000000000","message":"Thanks for the fixups; sorry I hadn\u0027t gotten to them! LGTM -- do we want to let it run in prod for a bit before merging, or just go for it?","commit_id":"5c6407bf591121fa10f8a8b10d22b3a64b9c4fe9"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"f4cbe44b47d452ee2d5c60fbe8243931f7da3166","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"edbd0e84_3b9ce229","updated":"2022-09-21 23:44:14.000000000","message":"This technique is very useful to keep container info cache entry alive and updated!","commit_id":"5c6407bf591121fa10f8a8b10d22b3a64b9c4fe9"}],"etc/proxy-server.conf-sample":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1dc369447a8e53b3a9f825a487c60b9b1cf0e1d0","unresolved":true,"context_lines":[{"line_number":153,"context_line":"# data is present in memcache, we can periodically refresh the data in memcache"},{"line_number":154,"context_line":"# without causing a thundering herd. Values around 0.0 - 0.1 (i.e., one in"},{"line_number":155,"context_line":"# every thousand requests skips cache, or fewer) are recommended."},{"line_number":156,"context_line":"# container_existence_skip_cache_pct \u003d 0.0"},{"line_number":157,"context_line":"# container_updating_shard_ranges_skip_cache_pct \u003d 0.0"},{"line_number":158,"context_line":"# container_listing_shard_ranges_skip_cache_pct \u003d 0.0"},{"line_number":159,"context_line":"# account_existence_skip_cache_pct \u003d 0.0"},{"line_number":160,"context_line":"#"},{"line_number":161,"context_line":"# object_chunk_size \u003d 65536"},{"line_number":162,"context_line":"# client_chunk_size \u003d 65536"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"21c0dffe_c83afe11","line":159,"range":{"start_line":156,"start_character":0,"end_line":159,"end_character":40},"updated":"2022-08-29 05:30:29.000000000","message":"These probably need to be added to doc/source/config/proxy_server_config.rst","commit_id":"d19eb53e5aacd8910b5b967741c01932877681be"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5da0a7cf049d309e73e1a345976ca77022eac8b8","unresolved":false,"context_lines":[{"line_number":153,"context_line":"# data is present in memcache, we can periodically refresh the data in memcache"},{"line_number":154,"context_line":"# without causing a thundering herd. Values around 0.0 - 0.1 (i.e., one in"},{"line_number":155,"context_line":"# every thousand requests skips cache, or fewer) are recommended."},{"line_number":156,"context_line":"# container_existence_skip_cache_pct \u003d 0.0"},{"line_number":157,"context_line":"# container_updating_shard_ranges_skip_cache_pct \u003d 0.0"},{"line_number":158,"context_line":"# container_listing_shard_ranges_skip_cache_pct \u003d 0.0"},{"line_number":159,"context_line":"# account_existence_skip_cache_pct \u003d 0.0"},{"line_number":160,"context_line":"#"},{"line_number":161,"context_line":"# object_chunk_size \u003d 65536"},{"line_number":162,"context_line":"# client_chunk_size \u003d 65536"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"2e7990a6_83c0bf63","line":159,"range":{"start_line":156,"start_character":0,"end_line":159,"end_character":40},"in_reply_to":"21c0dffe_c83afe11","updated":"2022-08-30 03:35:41.000000000","message":"Done","commit_id":"d19eb53e5aacd8910b5b967741c01932877681be"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a8ee944ad5abb7afb324a232d4bdcbc12baa27c","unresolved":true,"context_lines":[{"line_number":773,"context_line":"            info \u003d memcache.get(cache_key)"},{"line_number":774,"context_line":"            if logger:"},{"line_number":775,"context_line":"                logger.increment(\u0027%s.cache.%s\u0027 % ("},{"line_number":776,"context_line":"                    info_type, \u0027hit\u0027 if info else \u0027miss\u0027))"},{"line_number":777,"context_line":"        if info and six.PY2:"},{"line_number":778,"context_line":"            # Get back to native strings"},{"line_number":779,"context_line":"            new_info \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"af3635cd_f5a557a5","line":776,"updated":"2022-08-03 18:18:15.000000000","message":"These new metrics still seem like a useful thing for sorting out what we\u0027re actually doing with memcache. Maybe should be more like\n\n \u0027%s.info.cache.%s\u0027\n\nthough?","commit_id":"e6d8dab75a2f7cdbd23769c298696962214d3f5e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5da0a7cf049d309e73e1a345976ca77022eac8b8","unresolved":false,"context_lines":[{"line_number":773,"context_line":"            info \u003d memcache.get(cache_key)"},{"line_number":774,"context_line":"            if logger:"},{"line_number":775,"context_line":"                logger.increment(\u0027%s.cache.%s\u0027 % ("},{"line_number":776,"context_line":"                    info_type, \u0027hit\u0027 if info else \u0027miss\u0027))"},{"line_number":777,"context_line":"        if info and six.PY2:"},{"line_number":778,"context_line":"            # Get back to native strings"},{"line_number":779,"context_line":"            new_info \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3e75a30c_5cb7433a","line":776,"in_reply_to":"2ecd38d8_4cbedcbd","updated":"2022-08-30 03:35:41.000000000","message":"Done","commit_id":"e6d8dab75a2f7cdbd23769c298696962214d3f5e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1dc3089caaf11faa101ec3d291e0380befb7a98d","unresolved":true,"context_lines":[{"line_number":773,"context_line":"            info \u003d memcache.get(cache_key)"},{"line_number":774,"context_line":"            if logger:"},{"line_number":775,"context_line":"                logger.increment(\u0027%s.cache.%s\u0027 % ("},{"line_number":776,"context_line":"                    info_type, \u0027hit\u0027 if info else \u0027miss\u0027))"},{"line_number":777,"context_line":"        if info and six.PY2:"},{"line_number":778,"context_line":"            # Get back to native strings"},{"line_number":779,"context_line":"            new_info \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"2ecd38d8_4cbedcbd","line":776,"in_reply_to":"8832f2bc_9bfcf430","updated":"2022-08-30 02:45:28.000000000","message":"Yeah, the others are \u0027sharding_listing.cache.{hit,miss}\u0027. This one is \u0027{container,account}.cache.{hit,miss}\u0027. \n\nAt somepoint we might want to add like, \u0027token.cache.{hit,miss}\u0027. So \u0027{container,account}.info.cache.{hit,miss}\u0027 for seem better in my mind. Maybe this is a blocker.","commit_id":"e6d8dab75a2f7cdbd23769c298696962214d3f5e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1dc369447a8e53b3a9f825a487c60b9b1cf0e1d0","unresolved":true,"context_lines":[{"line_number":773,"context_line":"            info \u003d memcache.get(cache_key)"},{"line_number":774,"context_line":"            if logger:"},{"line_number":775,"context_line":"                logger.increment(\u0027%s.cache.%s\u0027 % ("},{"line_number":776,"context_line":"                    info_type, \u0027hit\u0027 if info else \u0027miss\u0027))"},{"line_number":777,"context_line":"        if info and six.PY2:"},{"line_number":778,"context_line":"            # Get back to native strings"},{"line_number":779,"context_line":"            new_info \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"8832f2bc_9bfcf430","line":776,"in_reply_to":"af3635cd_f5a557a5","updated":"2022-08-29 05:30:29.000000000","message":"Yeah, maybe more info is better? I mean if we have a bunch of cache miss and skip metrics we can just combine them in grafana, but we can\u0027t easily seperate them. \n\nAlthough, I need to remember to add this kind of miss to the tracing stuff.. man there will be a bunch of changes I need to work-through to get that to apply again.","commit_id":"e6d8dab75a2f7cdbd23769c298696962214d3f5e"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"f86ae0225314386769c69326125eabc410c97d82","unresolved":true,"context_lines":[{"line_number":750,"context_line":"    cache_key \u003d get_cache_key(account, container)"},{"line_number":751,"context_line":"    memcache \u003d cache_from_env(env, True)"},{"line_number":752,"context_line":"    if memcache:"},{"line_number":753,"context_line":"        try:"},{"line_number":754,"context_line":"            proxy_app \u003d app._pipeline_final_app"},{"line_number":755,"context_line":"        except AttributeError:"},{"line_number":756,"context_line":"            # Only the middleware entry-points get a reference to the"}],"source_content_type":"text/x-python","patch_set":5,"id":"a8d07a8e_556de81b","line":753,"updated":"2022-09-22 04:31:07.000000000","message":"I feel all the new code deserve a new function like \"_do_get_info_from_memcache\".","commit_id":"5c6407bf591121fa10f8a8b10d22b3a64b9c4fe9"}],"swift/proxy/server.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1dc369447a8e53b3a9f825a487c60b9b1cf0e1d0","unresolved":true,"context_lines":[{"line_number":195,"context_line":"                 container_ring\u003dNone):"},{"line_number":196,"context_line":"        # This is for the sake of tests which instantiate an Application"},{"line_number":197,"context_line":"        # directly rather than via loadapp()."},{"line_number":198,"context_line":"        self._pipeline_final_app \u003d self"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        if conf is None:"},{"line_number":201,"context_line":"            conf \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"d3368f07_afb21844","line":198,"updated":"2022-08-29 05:30:29.000000000","message":"Yeah, ok so this gets overwritten in loadapp() so is harmless, and usful in tests. Got it!","commit_id":"d19eb53e5aacd8910b5b967741c01932877681be"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5da0a7cf049d309e73e1a345976ca77022eac8b8","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                 container_ring\u003dNone):"},{"line_number":196,"context_line":"        # This is for the sake of tests which instantiate an Application"},{"line_number":197,"context_line":"        # directly rather than via loadapp()."},{"line_number":198,"context_line":"        self._pipeline_final_app \u003d self"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        if conf is None:"},{"line_number":201,"context_line":"            conf \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"8a374495_72542f48","line":198,"in_reply_to":"d3368f07_afb21844","updated":"2022-08-30 03:35:41.000000000","message":"Ack","commit_id":"d19eb53e5aacd8910b5b967741c01932877681be"}]}
