)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Jianjian Huo \u003cjhuo@nvidia.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-09-22 13:20:08 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"swift_proxy: add memcache skip success/error stats for shard range."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ib8be30d3969b4b4808664c43e94db53d10e6ef4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fd16405b_860c59ef","line":7,"updated":"2022-09-27 15:48:29.000000000","message":"I think it would be useful to list the new metric names","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Jianjian Huo \u003cjhuo@nvidia.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-09-22 13:20:08 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"swift_proxy: add memcache skip success/error stats for shard range."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ib8be30d3969b4b4808664c43e94db53d10e6ef4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"f479d18b_636efbf5","line":7,"in_reply_to":"fd16405b_860c59ef","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43dd51f1a2a0131c66080c98d5bb4f2358a08283","unresolved":true,"context_lines":[{"line_number":27,"context_line":"      error: memcache connection error."},{"line_number":28,"context_line":"    For each kind of operation metrics, suffix \u003cstatus_int\u003e will"},{"line_number":29,"context_line":"    count operations with different status. Then a sum of all"},{"line_number":30,"context_line":"    status sub-metrics will the total metrics of that operation."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Change-Id: Ib8be30d3969b4b4808664c43e94db53d10e6ef4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"8a6f9f94_a8865d0c","line":30,"updated":"2022-09-29 15:56:29.000000000","message":"this is incrediblly detailed - exactly what we\u0027re looking for - EVERYTHING makes so much more sense to me now.\n\nshould have the \"Upgrade-Impact\" tag","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"06c487b14dad13b82ffec23a2a4680884968c07a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"      error: memcache connection error."},{"line_number":28,"context_line":"    For each kind of operation metrics, suffix \u003cstatus_int\u003e will"},{"line_number":29,"context_line":"    count operations with different status. Then a sum of all"},{"line_number":30,"context_line":"    status sub-metrics will the total metrics of that operation."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Change-Id: Ib8be30d3969b4b4808664c43e94db53d10e6ef4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"0edfa413_a3e032b5","line":30,"in_reply_to":"8a6f9f94_a8865d0c","updated":"2022-09-30 05:58:27.000000000","message":"Done","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"dd05a73cd01f7f316948d7fc87a55ad00fd5b97e","unresolved":true,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"UpgradeImpact"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":"Grafana dashboard will need updates to display those metrics correctly,"},{"line_number":37,"context_line":"also infocache hits are newly added, please see above message for all"},{"line_number":38,"context_line":"changes needed."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Co-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e"},{"line_number":41,"context_line":"Change-Id: Ib8be30d3969b4b4808664c43e94db53d10e6ef4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"486f543d_58f0a066","line":38,"range":{"start_line":36,"start_character":0,"end_line":38,"end_character":15},"updated":"2022-11-02 10:22:11.000000000","message":"I think it is helpful to alert that the stats names are changing, but Grafana is an op\u0027s choice so I\u0027m not sure it\u0027s appropriate to call that out specifically.","commit_id":"163a671f10c512f986234cec55db8a3ab72d7d08"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"UpgradeImpact"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":"Grafana dashboard will need updates to display those metrics correctly,"},{"line_number":37,"context_line":"also infocache hits are newly added, please see above message for all"},{"line_number":38,"context_line":"changes needed."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Co-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e"},{"line_number":41,"context_line":"Change-Id: Ib8be30d3969b4b4808664c43e94db53d10e6ef4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"366098cf_af7e70f1","line":38,"range":{"start_line":36,"start_character":0,"end_line":38,"end_character":15},"in_reply_to":"486f543d_58f0a066","updated":"2022-12-13 12:21:43.000000000","message":"Done","commit_id":"163a671f10c512f986234cec55db8a3ab72d7d08"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":25,"context_line":"      miss: cache misses."},{"line_number":26,"context_line":"      skip: the selective skips per skip percentage config."},{"line_number":27,"context_line":"      force_skip: the request with \u0027x-newest\u0027 header."},{"line_number":28,"context_line":"      disabled: memcache is disabled."},{"line_number":29,"context_line":"      error: memcache connection error."},{"line_number":30,"context_line":"    For each kind of operation metrics, suffix \u003cstatus_int\u003e will"},{"line_number":31,"context_line":"    count operations with different status. Then a sum of all"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"c143d09b_ad827b4e","line":28,"range":{"start_line":28,"start_character":5,"end_line":28,"end_character":37},"updated":"2022-12-13 12:21:43.000000000","message":"IIUC this has much wider scope for listing shards","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":25,"context_line":"      miss: cache misses."},{"line_number":26,"context_line":"      skip: the selective skips per skip percentage config."},{"line_number":27,"context_line":"      force_skip: the request with \u0027x-newest\u0027 header."},{"line_number":28,"context_line":"      disabled: memcache is disabled."},{"line_number":29,"context_line":"      error: memcache connection error."},{"line_number":30,"context_line":"    For each kind of operation metrics, suffix \u003cstatus_int\u003e will"},{"line_number":31,"context_line":"    count operations with different status. Then a sum of all"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"37df0cd6_c27c8106","line":28,"range":{"start_line":28,"start_character":5,"end_line":28,"end_character":37},"in_reply_to":"c143d09b_ad827b4e","updated":"2023-01-13 19:05:06.000000000","message":"Done","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a0a44d1fa27c442940fc7f278432b8477496b033","unresolved":false,"context_lines":[{"line_number":24,"context_line":"                    .\u003cstatus_int\u003e"},{"line_number":25,"context_line":"    Those are operations made to backend due to below reasons."},{"line_number":26,"context_line":"      miss: cache misses."},{"line_number":27,"context_line":"      bypass: metadata didn\u0027t support a cache lookup"},{"line_number":28,"context_line":"      skip: the selective skips per skip percentage config."},{"line_number":29,"context_line":"      force_skip: the request with \u0027x-newest\u0027 header."},{"line_number":30,"context_line":"      disabled: memcache is disabled."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"2290cdd9_58688ea0","line":27,"updated":"2023-01-18 10:26:33.000000000","message":"+1","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"048fa581f50bbd1706b4b30ef9479e06bb2b1956","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"34649ab3_4b1ed195","updated":"2022-09-22 17:35:46.000000000","message":"Ugh, these shard_range cache metrics have gotten a little messy - let\u0027s clear up what we want before we do tests:\n\nI don\u0027t like counting skips in one metric and the skips.status_int in another - if you want the total skips it should just be a sum over all the skips.status_int\n\nthen we should have some symmetry for the miss.status_int\n\nthen hit I guess is just it\u0027s own thing that never has status_int (except maybe for container_info where I guess we could report on what was in memcache!?)","commit_id":"d3b9c44ee6a9b575ded77f148ced94f4e7962eb8"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"2179f44bf7d6eeb9b11b030995775771196c3342","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0782cea7_ba706914","updated":"2022-09-22 20:24:26.000000000","message":"thanks for the view.","commit_id":"d3b9c44ee6a9b575ded77f148ced94f4e7962eb8"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"2179f44bf7d6eeb9b11b030995775771196c3342","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8106899b_43268441","in_reply_to":"34649ab3_4b1ed195","updated":"2022-09-22 20:24:26.000000000","message":"I feel it\u0027s okay to do counting skips and misses in separate metrics. It\u0027s logically clear when we maintain two different dimensions of metrics (shard_updating.cache and shard_updating.backend), versus mixing them up together?","commit_id":"d3b9c44ee6a9b575ded77f148ced94f4e7962eb8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9a445095_d0e916db","updated":"2022-09-27 15:48:29.000000000","message":"IIUC we currently have:\n\n  shard_\u003cop\u003e.cache.[hit|miss|skip]\n  shard_\u003cop\u003e.backend.\u003cstatus_int\u003e\n\nwhere op is \u0027listing\u0027 or \u0027updating\u0027\n\nand the goal *might* be to have:\n\n  shard_\u003cop\u003e.cache.[hit|miss|skip|force_skip]\n  shard_\u003cop\u003e.backend.[miss|skip|force_skip|disabled].\u003cstatus_int\u003e\n\nbut the patch currently gives us:\n\n  shard_\u003cop\u003e.cache.[hit|miss|skip|force_update]\n  shard_\u003cop\u003e.backend.[skip|force_update].\u003cstatus_int\u003e\n  shard_\u003cop\u003e.backend.\u003cstatus_int\u003e\n","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d240e151f1c182eb3d5e7d5b166a8a21044945ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a0d37e1a_09b7c49b","updated":"2022-09-22 20:30:08.000000000","message":"i think your intuition to concretize the metrics pattern with a re-usable method is spot on!  Can you keep going - or do we need to talk with Tim/Al and figure out better what we want?","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5dcf89a8_9484a906","updated":"2022-09-29 05:13:45.000000000","message":"thanks a lot for the review.","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"fabe281a_55d8d98b","in_reply_to":"633c4e5c_877b9795","updated":"2022-09-27 15:48:29.000000000","message":"if there is some incompatibility with current metrics then that should be documented in the commit message","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"e985c2b46ccd834c0a8b4d190ad7270f18a0e997","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"633c4e5c_877b9795","in_reply_to":"a0d37e1a_09b7c49b","updated":"2022-09-22 22:56:41.000000000","message":"yeah, since this direction won\u0027t be compatible with current metrics, let\u0027s wait for opinions from Tim/Al.","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ac9ee0fa_c9c9429b","in_reply_to":"fabe281a_55d8d98b","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43dd51f1a2a0131c66080c98d5bb4f2358a08283","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7d4a5e51_b38f0a77","updated":"2022-09-29 15:56:29.000000000","message":"I love where this is going!  We need to get the style nits fixed and add Upgrade-Impact to the commit message at some point, the test/code ratio looks low for a behavioral change but I haven\u0027t looked at any *new* tests yet..\n\nThere\u0027s something going on with shard_listing (and info?) cache skip metrics that\u0027s different than the update metrics that I don\u0027t think i quite understand yet. What is a shard_resp ... type?","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f8d8d4fad7191e56f907baef32ab350bded7d6de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1c0553fb_d51bdeed","updated":"2022-09-30 17:03:44.000000000","message":"I can do another review, but i wanted to drop a few thoughts I have now","commit_id":"10c3f29fc58c8a35977e6410c721166e73cff03f"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"b5dca4622d21940415ef46b7f197ec3e6373b428","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"635abfca_78c45af2","updated":"2022-09-30 15:14:05.000000000","message":"recheck\nCouldn\u0027t reproduce the test failure in local box: test/functional/tests.py:TestAccount.testInvalidPath","commit_id":"10c3f29fc58c8a35977e6410c721166e73cff03f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd3e3f7ee6eec580728455136b17a5904a1011e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f8642505_76ab0812","updated":"2022-10-04 15:28:56.000000000","message":"I still have some confuse; but I think this is ok.\n\nI think some more method extraction would make it more obvious that we\u0027re doing the cache_state metrics consistently:\n\nhttps://review.opendev.org/c/openstack/swift/+/860273","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5aa438cadc642356dd96a3d76f0da5598783d120","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"46319815_30f84793","updated":"2022-10-05 23:40:10.000000000","message":"Thanks for the review!","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a8aef5c0c0589eb82e5569e33fd02937008d896b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"6f4ab034_86029ac6","updated":"2022-11-30 10:52:38.000000000","message":"Fixed merge conflicts","commit_id":"e841815543d142549f1cb2405de716e29a02c858"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"f8aea4a5_8c6e841e","updated":"2022-12-13 12:21:43.000000000","message":"Nice! this is heading in the right direction, but -1 because I think an extra conversion of ShardRange to dict (over a potentially large list) has crept into the (hopefully) common path, and also because I\u0027m not sure about the use of disabled for container GETs that are not actually for listing shards.\n\nThe refactoring/extraction is great, thanks.","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"1d18b782_6014298f","updated":"2023-01-13 19:05:06.000000000","message":"thanks for the reviews!","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b5f2820fb1c0d89a864f9831229ea912bf073c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"150dc393_0b7d656a","updated":"2023-01-16 11:45:38.000000000","message":"Thanks for the updates.\n\nI think it is worth more consideration of the scope of \u0027miss\u0027. Otherwise just minor comments.","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"3cb11ee87776b2430c6ffa182a1f5ddc85417948","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"4763614f_7300b129","updated":"2023-01-17 22:09:23.000000000","message":"Below probe test failed in last Zuul report, but I couldn\u0027t reproduce it locally after more than 200 runs.\nWill do \"recheck\" after review passes.\ntest/probe/test_sharder.py:TestContainerShardingMoreUTF8.test_sharded_listing_no_replicators","commit_id":"71d4ca709515a86ced8a0285fd50dea9b1e87ea1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"14c1a57985d8130a19b970c672a1aac8b8863042","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a329c833_f6cf9391","updated":"2023-01-20 01:18:24.000000000","message":"I like the look of this, and I think I\u0027ve convinced myself that it\u0027s a refactor if we ignore the metrics. Got a question on the listing stats when updating, though it seems to pass... :-/","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"925b17dde599eebec354f14c57d340ecd45e1771","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"1f123142_9106de3f","updated":"2023-01-20 16:38:04.000000000","message":"Thanks for the review!","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a0a44d1fa27c442940fc7f278432b8477496b033","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"cd0a8e26_2fcd9d1e","updated":"2023-01-18 10:26:33.000000000","message":"great work!","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a0a11416a6740fb66cc3bf0ec7711035e4828188","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"320904e6_fe0961cb","updated":"2023-01-20 20:01:47.000000000","message":"Only emit listing stats if may_get_listing_shards; the small delta from last patchset makes sense!","commit_id":"2f32d07707a8603c12a13b9d1a0bff6622f398cd"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"048fa581f50bbd1706b4b30ef9479e06bb2b1956","unresolved":true,"context_lines":[{"line_number":2418,"context_line":"            shard_ranges, response \u003d self._get_shard_ranges("},{"line_number":2419,"context_line":"                req, account, container, states\u003d\u0027updating\u0027)"},{"line_number":2420,"context_line":"            self.logger.increment("},{"line_number":2421,"context_line":"                \u0027shard_updating.backend.%s\u0027 % response.status_int)"},{"line_number":2422,"context_line":"            if cache_skipped:"},{"line_number":2423,"context_line":"                self.logger.increment("},{"line_number":2424,"context_line":"                    \u0027shard_updating.cache.skip.backend.%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":2,"id":"98249e90_0947ae81","line":2421,"updated":"2022-09-22 17:35:46.000000000","message":"probably we want *just* add a new demension to this metric\n\n  shard_updating.backend.miss.200\n  shard_updating.backend.skip.200\n\n\n... and so it probably needs an UpgradeImpact","commit_id":"d3b9c44ee6a9b575ded77f148ced94f4e7962eb8"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"2179f44bf7d6eeb9b11b030995775771196c3342","unresolved":false,"context_lines":[{"line_number":2418,"context_line":"            shard_ranges, response \u003d self._get_shard_ranges("},{"line_number":2419,"context_line":"                req, account, container, states\u003d\u0027updating\u0027)"},{"line_number":2420,"context_line":"            self.logger.increment("},{"line_number":2421,"context_line":"                \u0027shard_updating.backend.%s\u0027 % response.status_int)"},{"line_number":2422,"context_line":"            if cache_skipped:"},{"line_number":2423,"context_line":"                self.logger.increment("},{"line_number":2424,"context_line":"                    \u0027shard_updating.cache.skip.backend.%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":2,"id":"f0595f34_4c8e2810","line":2421,"in_reply_to":"98249e90_0947ae81","updated":"2022-09-22 20:24:26.000000000","message":"Good idea, I like this new dimension. Done.","commit_id":"d3b9c44ee6a9b575ded77f148ced94f4e7962eb8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d240e151f1c182eb3d5e7d5b166a8a21044945ef","unresolved":true,"context_lines":[{"line_number":2406,"context_line":"                    cache_state \u003d \u0027hit\u0027 if cached_ranges else \u0027miss\u0027"},{"line_number":2407,"context_line":"                except MemcacheConnectionError:"},{"line_number":2408,"context_line":"                    cache_state \u003d \u0027error\u0027"},{"line_number":2409,"context_line":"                self.logger.increment(\u0027shard_updating.cache.%s\u0027 % cache_state)"},{"line_number":2410,"context_line":""},{"line_number":2411,"context_line":"        if cached_ranges:"},{"line_number":2412,"context_line":"            shard_ranges \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"6a894a99_a6eda7b2","side":"PARENT","line":2409,"updated":"2022-09-22 20:30:08.000000000","message":"it\u0027s not obvious to me when we think we should use shard_updating.cache vs. shard_updating.backend","commit_id":"c96d2bdd529f3d203dc19db720a825e2c6888331"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[{"line_number":2406,"context_line":"                    cache_state \u003d \u0027hit\u0027 if cached_ranges else \u0027miss\u0027"},{"line_number":2407,"context_line":"                except MemcacheConnectionError:"},{"line_number":2408,"context_line":"                    cache_state \u003d \u0027error\u0027"},{"line_number":2409,"context_line":"                self.logger.increment(\u0027shard_updating.cache.%s\u0027 % cache_state)"},{"line_number":2410,"context_line":""},{"line_number":2411,"context_line":"        if cached_ranges:"},{"line_number":2412,"context_line":"            shard_ranges \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"a5cd5024_b20dbc91","side":"PARENT","line":2409,"in_reply_to":"6a894a99_a6eda7b2","updated":"2022-09-27 15:48:29.000000000","message":"IIRC cache vs backend tells us where the response came from","commit_id":"c96d2bdd529f3d203dc19db720a825e2c6888331"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":2406,"context_line":"                    cache_state \u003d \u0027hit\u0027 if cached_ranges else \u0027miss\u0027"},{"line_number":2407,"context_line":"                except MemcacheConnectionError:"},{"line_number":2408,"context_line":"                    cache_state \u003d \u0027error\u0027"},{"line_number":2409,"context_line":"                self.logger.increment(\u0027shard_updating.cache.%s\u0027 % cache_state)"},{"line_number":2410,"context_line":""},{"line_number":2411,"context_line":"        if cached_ranges:"},{"line_number":2412,"context_line":"            shard_ranges \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"cdb8694b_68ab4c53","side":"PARENT","line":2409,"in_reply_to":"a5cd5024_b20dbc91","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"c96d2bdd529f3d203dc19db720a825e2c6888331"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[{"line_number":2364,"context_line":"            req, account, container, headers\u003dheaders, params\u003dparams)"},{"line_number":2365,"context_line":"        return self._parse_shard_ranges(req, listing, response), response"},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"    def _log_shard_updating_backend_metrics(self, memcache_state, resp):"},{"line_number":2368,"context_line":"        if memcache_state \u003d\u003d \u0027none\u0027:"},{"line_number":2369,"context_line":"            self.logger.increment("},{"line_number":2370,"context_line":"                \u0027shard_updating.backend.%s\u0027 % resp.status_int)"}],"source_content_type":"text/x-python","patch_set":3,"id":"440c6faa_46b5b542","line":2367,"range":{"start_line":2367,"start_character":50,"end_line":2367,"end_character":64},"updated":"2022-09-27 15:48:29.000000000","message":"could this be an optional arg that defaults to None? It looks like it is an optional suffix for the fixed part of the name \u0027shard_updating.backend\u0027","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d240e151f1c182eb3d5e7d5b166a8a21044945ef","unresolved":true,"context_lines":[{"line_number":2364,"context_line":"            req, account, container, headers\u003dheaders, params\u003dparams)"},{"line_number":2365,"context_line":"        return self._parse_shard_ranges(req, listing, response), response"},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"    def _log_shard_updating_backend_metrics(self, memcache_state, resp):"},{"line_number":2368,"context_line":"        if memcache_state \u003d\u003d \u0027none\u0027:"},{"line_number":2369,"context_line":"            self.logger.increment("},{"line_number":2370,"context_line":"                \u0027shard_updating.backend.%s\u0027 % resp.status_int)"}],"source_content_type":"text/x-python","patch_set":3,"id":"82084dc9_27f1c352","line":2367,"updated":"2022-09-22 20:30:08.000000000","message":"this interface looks pretty versital - can we use it everywhere?","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":2364,"context_line":"            req, account, container, headers\u003dheaders, params\u003dparams)"},{"line_number":2365,"context_line":"        return self._parse_shard_ranges(req, listing, response), response"},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"    def _log_shard_updating_backend_metrics(self, memcache_state, resp):"},{"line_number":2368,"context_line":"        if memcache_state \u003d\u003d \u0027none\u0027:"},{"line_number":2369,"context_line":"            self.logger.increment("},{"line_number":2370,"context_line":"                \u0027shard_updating.backend.%s\u0027 % resp.status_int)"}],"source_content_type":"text/x-python","patch_set":3,"id":"f7e7aa6b_deeaaf2c","line":2367,"range":{"start_line":2367,"start_character":50,"end_line":2367,"end_character":64},"in_reply_to":"440c6faa_46b5b542","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":2364,"context_line":"            req, account, container, headers\u003dheaders, params\u003dparams)"},{"line_number":2365,"context_line":"        return self._parse_shard_ranges(req, listing, response), response"},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"    def _log_shard_updating_backend_metrics(self, memcache_state, resp):"},{"line_number":2368,"context_line":"        if memcache_state \u003d\u003d \u0027none\u0027:"},{"line_number":2369,"context_line":"            self.logger.increment("},{"line_number":2370,"context_line":"                \u0027shard_updating.backend.%s\u0027 % resp.status_int)"}],"source_content_type":"text/x-python","patch_set":3,"id":"55023eb6_f2c76f9a","line":2367,"in_reply_to":"82084dc9_27f1c352","updated":"2022-09-29 05:13:45.000000000","message":"I made it a common method, will convert \"container.info.cache.***\" to use it too in next patch.","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[{"line_number":2367,"context_line":"    def _log_shard_updating_backend_metrics(self, memcache_state, resp):"},{"line_number":2368,"context_line":"        if memcache_state \u003d\u003d \u0027none\u0027:"},{"line_number":2369,"context_line":"            self.logger.increment("},{"line_number":2370,"context_line":"                \u0027shard_updating.backend.%s\u0027 % resp.status_int)"},{"line_number":2371,"context_line":"        else:"},{"line_number":2372,"context_line":"            self.logger.increment("},{"line_number":2373,"context_line":"                \u0027shard_updating.backend.%s.%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":3,"id":"22f2df23_81b7b14e","line":2370,"updated":"2022-09-27 15:48:29.000000000","message":"IIUC this is going to be backend requests due to a cache miss or caching is disabled?","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":2367,"context_line":"    def _log_shard_updating_backend_metrics(self, memcache_state, resp):"},{"line_number":2368,"context_line":"        if memcache_state \u003d\u003d \u0027none\u0027:"},{"line_number":2369,"context_line":"            self.logger.increment("},{"line_number":2370,"context_line":"                \u0027shard_updating.backend.%s\u0027 % resp.status_int)"},{"line_number":2371,"context_line":"        else:"},{"line_number":2372,"context_line":"            self.logger.increment("},{"line_number":2373,"context_line":"                \u0027shard_updating.backend.%s.%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ebe126b_f6d815af","line":2370,"in_reply_to":"22f2df23_81b7b14e","updated":"2022-09-29 05:13:45.000000000","message":"sorry for confusion, previous version is a paused WIP.","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[{"line_number":2371,"context_line":"        else:"},{"line_number":2372,"context_line":"            self.logger.increment("},{"line_number":2373,"context_line":"                \u0027shard_updating.backend.%s.%s\u0027 %"},{"line_number":2374,"context_line":"                (memcache_state, resp.status_int))"},{"line_number":2375,"context_line":""},{"line_number":2376,"context_line":"    def _get_update_shard(self, req, account, container, obj):"},{"line_number":2377,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"93e1b0c1_584f53eb","line":2374,"updated":"2022-09-27 15:48:29.000000000","message":"...and this is going to be backend requests due to skip?","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":2371,"context_line":"        else:"},{"line_number":2372,"context_line":"            self.logger.increment("},{"line_number":2373,"context_line":"                \u0027shard_updating.backend.%s.%s\u0027 %"},{"line_number":2374,"context_line":"                (memcache_state, resp.status_int))"},{"line_number":2375,"context_line":""},{"line_number":2376,"context_line":"    def _get_update_shard(self, req, account, container, obj):"},{"line_number":2377,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"8d7f83ea_4a6e2d83","line":2374,"in_reply_to":"93e1b0c1_584f53eb","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"eb48c539502fdcb1bb25783584545ad3a02029ef","unresolved":true,"context_lines":[{"line_number":2388,"context_line":"        :return: an instance of :class:`swift.common.utils.ShardRange`,"},{"line_number":2389,"context_line":"            or None if the update should go back to the root"},{"line_number":2390,"context_line":"        \"\"\""},{"line_number":2391,"context_line":"        memcache_state \u003d \u0027none\u0027"},{"line_number":2392,"context_line":"        if not self.app.recheck_updating_shard_ranges:"},{"line_number":2393,"context_line":"            # caching is disabled; fall back to old behavior"},{"line_number":2394,"context_line":"            shard_ranges, response \u003d self._get_shard_ranges("}],"source_content_type":"text/x-python","patch_set":3,"id":"870fe5f4_15e69bd8","line":2391,"updated":"2022-09-22 20:26:31.000000000","message":"I should define a enum of strings, if this is the correct direction to pursue.","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":2388,"context_line":"        :return: an instance of :class:`swift.common.utils.ShardRange`,"},{"line_number":2389,"context_line":"            or None if the update should go back to the root"},{"line_number":2390,"context_line":"        \"\"\""},{"line_number":2391,"context_line":"        memcache_state \u003d \u0027none\u0027"},{"line_number":2392,"context_line":"        if not self.app.recheck_updating_shard_ranges:"},{"line_number":2393,"context_line":"            # caching is disabled; fall back to old behavior"},{"line_number":2394,"context_line":"            shard_ranges, response \u003d self._get_shard_ranges("}],"source_content_type":"text/x-python","patch_set":3,"id":"8adda9a4_09bce2db","line":2391,"in_reply_to":"870fe5f4_15e69bd8","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d240e151f1c182eb3d5e7d5b166a8a21044945ef","unresolved":true,"context_lines":[{"line_number":2408,"context_line":"                self.app.container_updating_shard_ranges_skip_cache"},{"line_number":2409,"context_line":"            if skip_chance and random.random() \u003c skip_chance:"},{"line_number":2410,"context_line":"                memcache_state \u003d \u0027skip\u0027"},{"line_number":2411,"context_line":"                self.logger.increment(\u0027shard_updating.cache.skip\u0027)"},{"line_number":2412,"context_line":"            else:"},{"line_number":2413,"context_line":"                try:"},{"line_number":2414,"context_line":"                    cached_ranges \u003d memcache.get("}],"source_content_type":"text/x-python","patch_set":3,"id":"cb5d28d0_a2654366","line":2411,"updated":"2022-09-22 20:30:08.000000000","message":"now that we have the new versital interface it makes it seem like anytime we increment a stat directly it\u0027s a smell.","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":2408,"context_line":"                self.app.container_updating_shard_ranges_skip_cache"},{"line_number":2409,"context_line":"            if skip_chance and random.random() \u003c skip_chance:"},{"line_number":2410,"context_line":"                memcache_state \u003d \u0027skip\u0027"},{"line_number":2411,"context_line":"                self.logger.increment(\u0027shard_updating.cache.skip\u0027)"},{"line_number":2412,"context_line":"            else:"},{"line_number":2413,"context_line":"                try:"},{"line_number":2414,"context_line":"                    cached_ranges \u003d memcache.get("}],"source_content_type":"text/x-python","patch_set":3,"id":"ed6059c2_293ff3bc","line":2411,"in_reply_to":"cb5d28d0_a2654366","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d240e151f1c182eb3d5e7d5b166a8a21044945ef","unresolved":true,"context_lines":[{"line_number":2413,"context_line":"                try:"},{"line_number":2414,"context_line":"                    cached_ranges \u003d memcache.get("},{"line_number":2415,"context_line":"                        cache_key, raise_on_error\u003dTrue)"},{"line_number":2416,"context_line":"                    memcache_state \u003d \u0027hit\u0027 if cached_ranges else \u0027miss\u0027"},{"line_number":2417,"context_line":"                except MemcacheConnectionError:"},{"line_number":2418,"context_line":"                    memcache_state \u003d \u0027error\u0027"},{"line_number":2419,"context_line":"                self.logger.increment("}],"source_content_type":"text/x-python","patch_set":3,"id":"016a02e7_a31555e7","line":2416,"updated":"2022-09-22 20:30:08.000000000","message":"so it\u0027s a little hard for me to see - but \u0027hit\u0027 is the only value for \u0027memcache_state\u0027 that won\u0027t get passed to the new interface.","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":2413,"context_line":"                try:"},{"line_number":2414,"context_line":"                    cached_ranges \u003d memcache.get("},{"line_number":2415,"context_line":"                        cache_key, raise_on_error\u003dTrue)"},{"line_number":2416,"context_line":"                    memcache_state \u003d \u0027hit\u0027 if cached_ranges else \u0027miss\u0027"},{"line_number":2417,"context_line":"                except MemcacheConnectionError:"},{"line_number":2418,"context_line":"                    memcache_state \u003d \u0027error\u0027"},{"line_number":2419,"context_line":"                self.logger.increment("}],"source_content_type":"text/x-python","patch_set":3,"id":"ee4d8f19_20ef6e70","line":2416,"in_reply_to":"016a02e7_a31555e7","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43dd51f1a2a0131c66080c98d5bb4f2358a08283","unresolved":true,"context_lines":[{"line_number":748,"context_line":"              cases like \u0027miss\u0027 or \u0027skip\u0027 which will make to backend, expect a"},{"line_number":749,"context_line":"              valid \u0027resp\u0027."},{"line_number":750,"context_line":"    :param  resp: the response from backend for all cases except cache hits."},{"line_number":751,"context_line":"    \"\"\""},{"line_number":752,"context_line":"    if memcache_state \u003d\u003d None:"},{"line_number":753,"context_line":"        return"},{"line_number":754,"context_line":"    elif memcache_state \u003d\u003d \u0027hit\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ebdae71_a8fccb63","line":751,"updated":"2022-09-29 15:56:29.000000000","message":"I LOVE LOVE LOVE that this is a pure function!!! it should make it SUPER easy to add some very targeted unittests that enumerate all the expected inputs and outputs - great design call.  👍","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"06c487b14dad13b82ffec23a2a4680884968c07a","unresolved":false,"context_lines":[{"line_number":748,"context_line":"              cases like \u0027miss\u0027 or \u0027skip\u0027 which will make to backend, expect a"},{"line_number":749,"context_line":"              valid \u0027resp\u0027."},{"line_number":750,"context_line":"    :param  resp: the response from backend for all cases except cache hits."},{"line_number":751,"context_line":"    \"\"\""},{"line_number":752,"context_line":"    if memcache_state \u003d\u003d None:"},{"line_number":753,"context_line":"        return"},{"line_number":754,"context_line":"    elif memcache_state \u003d\u003d \u0027hit\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"84fc5000_71952d9c","line":751,"in_reply_to":"9ebdae71_a8fccb63","updated":"2022-09-30 05:58:27.000000000","message":"Done","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"06c487b14dad13b82ffec23a2a4680884968c07a","unresolved":false,"context_lines":[{"line_number":749,"context_line":"              valid \u0027resp\u0027."},{"line_number":750,"context_line":"    :param  resp: the response from backend for all cases except cache hits."},{"line_number":751,"context_line":"    \"\"\""},{"line_number":752,"context_line":"    if memcache_state \u003d\u003d None:"},{"line_number":753,"context_line":"        return"},{"line_number":754,"context_line":"    elif memcache_state \u003d\u003d \u0027hit\u0027:"},{"line_number":755,"context_line":"        logger.increment(\u0027%s.cache.%s\u0027 % (op_type, memcache_state))"}],"source_content_type":"text/x-python","patch_set":4,"id":"6c2bca1a_f4b725b2","line":752,"in_reply_to":"2757c8e7_c2deed92","updated":"2022-09-30 05:58:27.000000000","message":"I have only pep8 running on each save. Thanks for the tips, totally agree with you, I need turn on flake8.","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43dd51f1a2a0131c66080c98d5bb4f2358a08283","unresolved":true,"context_lines":[{"line_number":749,"context_line":"              valid \u0027resp\u0027."},{"line_number":750,"context_line":"    :param  resp: the response from backend for all cases except cache hits."},{"line_number":751,"context_line":"    \"\"\""},{"line_number":752,"context_line":"    if memcache_state \u003d\u003d None:"},{"line_number":753,"context_line":"        return"},{"line_number":754,"context_line":"    elif memcache_state \u003d\u003d \u0027hit\u0027:"},{"line_number":755,"context_line":"        logger.increment(\u0027%s.cache.%s\u0027 % (op_type, memcache_state))"}],"source_content_type":"text/x-python","patch_set":4,"id":"2757c8e7_c2deed92","line":752,"in_reply_to":"8ea3b19a_188addf7","updated":"2022-09-29 15:56:29.000000000","message":"So... I think a lot of us swift devs have been trained to run our linters (flake8) anytime we *save* a file - so that we are forced to integrate style fixes into our editing workflows.\n\nYou might be able to get away with an opionated style formatter like black that cleans things up for you when run automatically against your edits on commit ... but I worry there\u0027d be some churn to deal with.\n\nRegardless, you\u0027ll have to fix this astetic issue before it will merge because of the way the mainterainers team has decided to setup CI - but you could wait for a material review if you think there\u0027s multiple things that need fixing and you\u0027ve already moved onto something else.","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43dd51f1a2a0131c66080c98d5bb4f2358a08283","unresolved":true,"context_lines":[{"line_number":750,"context_line":"    :param  resp: the response from backend for all cases except cache hits."},{"line_number":751,"context_line":"    \"\"\""},{"line_number":752,"context_line":"    if memcache_state \u003d\u003d None:"},{"line_number":753,"context_line":"        return"},{"line_number":754,"context_line":"    elif memcache_state \u003d\u003d \u0027hit\u0027:"},{"line_number":755,"context_line":"        logger.increment(\u0027%s.cache.%s\u0027 % (op_type, memcache_state))"},{"line_number":756,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"d8d6038d_bbce28d9","line":753,"updated":"2022-09-29 15:56:29.000000000","message":"why is this the correct behavior - when is memcache_state None?","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"06c487b14dad13b82ffec23a2a4680884968c07a","unresolved":false,"context_lines":[{"line_number":750,"context_line":"    :param  resp: the response from backend for all cases except cache hits."},{"line_number":751,"context_line":"    \"\"\""},{"line_number":752,"context_line":"    if memcache_state \u003d\u003d None:"},{"line_number":753,"context_line":"        return"},{"line_number":754,"context_line":"    elif memcache_state \u003d\u003d \u0027hit\u0027:"},{"line_number":755,"context_line":"        logger.increment(\u0027%s.cache.%s\u0027 % (op_type, memcache_state))"},{"line_number":756,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"55fc9505_15a7b2ab","line":753,"in_reply_to":"d8d6038d_bbce28d9","updated":"2022-09-30 05:58:27.000000000","message":"Good eye, it will never be None. I will remove it.","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43dd51f1a2a0131c66080c98d5bb4f2358a08283","unresolved":true,"context_lines":[{"line_number":759,"context_line":"                \"Response can\u0027t be None when logging %s cache\""},{"line_number":760,"context_line":"                \"metrics with non-hit cases, memcache_state: %s\","},{"line_number":761,"context_line":"                op_type, memcache_state)"},{"line_number":762,"context_line":"            return"},{"line_number":763,"context_line":"        logger.increment("},{"line_number":764,"context_line":"            \u0027%s.cache.%s.%d\u0027 % (op_type, memcache_state, resp.status_int))"},{"line_number":765,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"0fdac556_9bfd29e5","line":762,"updated":"2022-09-29 15:56:29.000000000","message":"this is not obviously the correct behavior to me - shouldn\u0027t we increment *something* - is this the correct log-level?  Does it happen in practice?","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"06c487b14dad13b82ffec23a2a4680884968c07a","unresolved":false,"context_lines":[{"line_number":759,"context_line":"                \"Response can\u0027t be None when logging %s cache\""},{"line_number":760,"context_line":"                \"metrics with non-hit cases, memcache_state: %s\","},{"line_number":761,"context_line":"                op_type, memcache_state)"},{"line_number":762,"context_line":"            return"},{"line_number":763,"context_line":"        logger.increment("},{"line_number":764,"context_line":"            \u0027%s.cache.%s.%d\u0027 % (op_type, memcache_state, resp.status_int))"},{"line_number":765,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ec3a7d02_3a1ffc33","line":762,"in_reply_to":"0fdac556_9bfd29e5","updated":"2022-09-30 05:58:27.000000000","message":"I think it\u0027s still my previous coding style which bothers me here. When memcache_state \u003d\u003d \u0027hit\u0027, \u0027resp\u0027 will be None; otherwise, \u0027resp\u0027 shouldn\u0027t be None. What I wanted to do here is, building an extra defense to catch potential bugs from whoever calls this function, but I couldn\u0027t find a python replacement of something similar to DCHECK. After looking around and check what other codes are doing, I made the change to follow LBYL look-before-you-leap style.","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43dd51f1a2a0131c66080c98d5bb4f2358a08283","unresolved":true,"context_lines":[{"line_number":2439,"context_line":"                req, account, container, states\u003d\u0027updating\u0027, includes\u003dobj)"},{"line_number":2440,"context_line":"            memcache_state \u003d \u0027disabled\u0027"},{"line_number":2441,"context_line":"            _record_memcache_op_metrics("},{"line_number":2442,"context_line":"                self.logger, \u0027shard_updating\u0027, memcache_state, response)"},{"line_number":2443,"context_line":"            if not shard_ranges:"},{"line_number":2444,"context_line":"                return None"},{"line_number":2445,"context_line":"            return shard_ranges[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"59f51637_0b2358a0","line":2442,"updated":"2022-09-29 15:56:29.000000000","message":"here the response is obviously None - but I think the kwarg makes it un-needed.\n\n\tdiff --git a/swift/proxy/controllers/base.py b/swift/proxy/controllers/base.py\n\tindex 09e449eee..4cf0e90cb 100644\n\t--- a/swift/proxy/controllers/base.py\n\t+++ b/swift/proxy/controllers/base.py\n\t@@ -2431,15 +2431,12 @@ class Controller(object):\n\t\t :return: an instance of :class:`swift.common.utils.ShardRange`,\n\t\t     or None if the update should go back to the root\n\t\t \"\"\"\n\t-        memcache_state \u003d None\n\t-        response \u003d None\n\t\t if not self.app.recheck_updating_shard_ranges:\n\t\t     # caching is disabled; fall back to old behavior\n\t\t     shard_ranges, response \u003d self._get_shard_ranges(\n\t\t\t req, account, container, states\u003d\u0027updating\u0027, includes\u003dobj)\n\t-            memcache_state \u003d \u0027disabled\u0027\n\t\t     _record_memcache_op_metrics(\n\t-                self.logger, \u0027shard_updating\u0027, memcache_state, response)\n\t+                self.logger, \u0027shard_updating\u0027, \u0027disabled\u0027)\n\t\t     if not shard_ranges:\n\t\t\t return None\n\t\t     return shard_ranges[0]\n\t@@ -2461,8 +2458,12 @@ class Controller(object):\n\t\t\t     memcache_state \u003d \u0027hit\u0027 if cached_ranges else \u0027miss\u0027\n\t\t\t except MemcacheConnectionError:\n\t\t\t     memcache_state \u003d \u0027error\u0027\n\t+        else:\n\t+            # maybe \"disbaled\" ???\n\t+            memcache_state \u003d \u0027none\u0027\n\t \n\t\t if cached_ranges:\n\t+            response \u003d None\n\t\t     shard_ranges \u003d [\n\t\t\t ShardRange.from_dict(shard_range)\n\t\t\t for shard_range in cached_ranges]\n\n\n^ something like this also seems to work and I think it might be more maintainable for me - what do you think?","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"06c487b14dad13b82ffec23a2a4680884968c07a","unresolved":false,"context_lines":[{"line_number":2439,"context_line":"                req, account, container, states\u003d\u0027updating\u0027, includes\u003dobj)"},{"line_number":2440,"context_line":"            memcache_state \u003d \u0027disabled\u0027"},{"line_number":2441,"context_line":"            _record_memcache_op_metrics("},{"line_number":2442,"context_line":"                self.logger, \u0027shard_updating\u0027, memcache_state, response)"},{"line_number":2443,"context_line":"            if not shard_ranges:"},{"line_number":2444,"context_line":"                return None"},{"line_number":2445,"context_line":"            return shard_ranges[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"98e8f4a7_874d0427","line":2442,"in_reply_to":"59f51637_0b2358a0","updated":"2022-09-30 05:58:27.000000000","message":"Done","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43dd51f1a2a0131c66080c98d5bb4f2358a08283","unresolved":true,"context_lines":[{"line_number":2442,"context_line":"                self.logger, \u0027shard_updating\u0027, memcache_state, response)"},{"line_number":2443,"context_line":"            if not shard_ranges:"},{"line_number":2444,"context_line":"                return None"},{"line_number":2445,"context_line":"            return shard_ranges[0]"},{"line_number":2446,"context_line":""},{"line_number":2447,"context_line":"        cache_key \u003d get_cache_key(account, container, shard\u003d\u0027updating\u0027)"},{"line_number":2448,"context_line":"        infocache \u003d req.environ.setdefault(\u0027swift.infocache\u0027, {})"}],"source_content_type":"text/x-python","patch_set":4,"id":"123308a4_4dcbb4b5","line":2445,"updated":"2022-09-29 15:56:29.000000000","message":"we\u0027ve seen recently some of these guard returns can make it difficult to extract/unify some kinds of metrics/logging from our longer methods.\n\nhttps://review.opendev.org/c/openstack/swift/+/859630\n\nshould we fix that here now too?","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd3e3f7ee6eec580728455136b17a5904a1011e8","unresolved":false,"context_lines":[{"line_number":2442,"context_line":"                self.logger, \u0027shard_updating\u0027, memcache_state, response)"},{"line_number":2443,"context_line":"            if not shard_ranges:"},{"line_number":2444,"context_line":"                return None"},{"line_number":2445,"context_line":"            return shard_ranges[0]"},{"line_number":2446,"context_line":""},{"line_number":2447,"context_line":"        cache_key \u003d get_cache_key(account, container, shard\u003d\u0027updating\u0027)"},{"line_number":2448,"context_line":"        infocache \u003d req.environ.setdefault(\u0027swift.infocache\u0027, {})"}],"source_content_type":"text/x-python","patch_set":4,"id":"951c497f_cb7e2744","line":2445,"in_reply_to":"123308a4_4dcbb4b5","updated":"2022-10-04 15:28:56.000000000","message":"Ack","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd3e3f7ee6eec580728455136b17a5904a1011e8","unresolved":true,"context_lines":[{"line_number":750,"context_line":"    :param  resp: the response from backend for all cases except cache hits."},{"line_number":751,"context_line":"    \"\"\""},{"line_number":752,"context_line":"    if cache_state \u003d\u003d \u0027infocache_hit\u0027:"},{"line_number":753,"context_line":"        logger.increment(\u0027%s.infocache.hit\u0027 % op_type)"},{"line_number":754,"context_line":"        return"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    if cache_state \u003d\u003d \u0027hit\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"0acb247e_ea872c74","line":753,"updated":"2022-10-04 15:28:56.000000000","message":"I guess you could sum shard_updating.*.hit if you wanted to know how many requests didn\u0027t go to the backend... but I sort of expected shad_updating.cache.hit.* to sum over infocache and memcache or something... just like shard_updating.cache.miss.* sums over all the different backend responses.","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5aa438cadc642356dd96a3d76f0da5598783d120","unresolved":false,"context_lines":[{"line_number":750,"context_line":"    :param  resp: the response from backend for all cases except cache hits."},{"line_number":751,"context_line":"    \"\"\""},{"line_number":752,"context_line":"    if cache_state \u003d\u003d \u0027infocache_hit\u0027:"},{"line_number":753,"context_line":"        logger.increment(\u0027%s.infocache.hit\u0027 % op_type)"},{"line_number":754,"context_line":"        return"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    if cache_state \u003d\u003d \u0027hit\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"376570f7_81270631","line":753,"in_reply_to":"0acb247e_ea872c74","updated":"2022-10-05 23:40:10.000000000","message":"yeah, Grafana can do that. Here we have \u0027infocache.hit\u0027 and \u0027cache.hit\u0027, Grafana can do a sum and get total hits.","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd3e3f7ee6eec580728455136b17a5904a1011e8","unresolved":true,"context_lines":[{"line_number":751,"context_line":"    \"\"\""},{"line_number":752,"context_line":"    if cache_state \u003d\u003d \u0027infocache_hit\u0027:"},{"line_number":753,"context_line":"        logger.increment(\u0027%s.infocache.hit\u0027 % op_type)"},{"line_number":754,"context_line":"        return"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    if cache_state \u003d\u003d \u0027hit\u0027:"},{"line_number":757,"context_line":"        # memcache hits."}],"source_content_type":"text/x-python","patch_set":7,"id":"8d8e7924_af604b01","line":754,"updated":"2022-10-04 15:28:56.000000000","message":"instead of guard returns maybe an elif chain would look better","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5aa438cadc642356dd96a3d76f0da5598783d120","unresolved":false,"context_lines":[{"line_number":751,"context_line":"    \"\"\""},{"line_number":752,"context_line":"    if cache_state \u003d\u003d \u0027infocache_hit\u0027:"},{"line_number":753,"context_line":"        logger.increment(\u0027%s.infocache.hit\u0027 % op_type)"},{"line_number":754,"context_line":"        return"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    if cache_state \u003d\u003d \u0027hit\u0027:"},{"line_number":757,"context_line":"        # memcache hits."}],"source_content_type":"text/x-python","patch_set":7,"id":"9841eb5d_6c28fa67","line":754,"in_reply_to":"8d8e7924_af604b01","updated":"2022-10-05 23:40:10.000000000","message":"Done","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd3e3f7ee6eec580728455136b17a5904a1011e8","unresolved":true,"context_lines":[{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    if cache_state \u003d\u003d \u0027hit\u0027:"},{"line_number":757,"context_line":"        # memcache hits."},{"line_number":758,"context_line":"        logger.increment(\u0027%s.cache.%s\u0027 % (op_type, cache_state))"},{"line_number":759,"context_line":"        return"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"    # the cases of cache_state is memcache miss, error, skip, force_skip or"}],"source_content_type":"text/x-python","patch_set":7,"id":"802037a3_77d510ba","line":758,"updated":"2022-10-04 15:28:56.000000000","message":"it bugs me that we interpolate cache_state here but not in the infocache_hit branch","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5aa438cadc642356dd96a3d76f0da5598783d120","unresolved":false,"context_lines":[{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    if cache_state \u003d\u003d \u0027hit\u0027:"},{"line_number":757,"context_line":"        # memcache hits."},{"line_number":758,"context_line":"        logger.increment(\u0027%s.cache.%s\u0027 % (op_type, cache_state))"},{"line_number":759,"context_line":"        return"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"    # the cases of cache_state is memcache miss, error, skip, force_skip or"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a651ea0_54fd182f","line":758,"in_reply_to":"802037a3_77d510ba","updated":"2022-10-05 23:40:10.000000000","message":"Done","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":754,"context_line":"    elif cache_state \u003d\u003d \u0027hit\u0027:"},{"line_number":755,"context_line":"        # memcache hits."},{"line_number":756,"context_line":"        logger.increment(\u0027%s.cache.hit\u0027 % op_type)"},{"line_number":757,"context_line":"    elif resp is not None:"},{"line_number":758,"context_line":"        # the cases of cache_state is memcache miss, error, skip, force_skip"},{"line_number":759,"context_line":"        # or disabled."},{"line_number":760,"context_line":"        logger.increment("}],"source_content_type":"text/x-python","patch_set":12,"id":"b1c7d7a5_df7897f1","line":757,"updated":"2022-12-13 12:21:43.000000000","message":"is the \u0027else\u0027 condition possible i.e. resp is None but cache_state\u003d\u003dmiss?","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":754,"context_line":"    elif cache_state \u003d\u003d \u0027hit\u0027:"},{"line_number":755,"context_line":"        # memcache hits."},{"line_number":756,"context_line":"        logger.increment(\u0027%s.cache.hit\u0027 % op_type)"},{"line_number":757,"context_line":"    elif resp is not None:"},{"line_number":758,"context_line":"        # the cases of cache_state is memcache miss, error, skip, force_skip"},{"line_number":759,"context_line":"        # or disabled."},{"line_number":760,"context_line":"        logger.increment("}],"source_content_type":"text/x-python","patch_set":12,"id":"5e25d30a_dc2993fd","line":757,"in_reply_to":"b1c7d7a5_df7897f1","updated":"2023-01-13 19:05:06.000000000","message":"In previous code, \"resp.status_int\" were used for all cases without checking if resp is None, so resp won\u0027t be None in call cases.","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":758,"context_line":"        # the cases of cache_state is memcache miss, error, skip, force_skip"},{"line_number":759,"context_line":"        # or disabled."},{"line_number":760,"context_line":"        logger.increment("},{"line_number":761,"context_line":"            \u0027%s.cache.%s.%d\u0027 % (op_type, cache_state, resp.status_int))"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"def _get_info_from_memcache(app, env, account, container\u003dNone):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ec3ce6f4_e0539eee","line":761,"updated":"2022-12-13 12:21:43.000000000","message":"ok. The logger is a MetrixPrefixLoggerAdapter which has a get_metric_name() method that adds an \u0027object.\u0027 or \u0027container.\u0027 to the metrix name depending on the controller type, so we end up with e.g.:\n\n  object.shard_updating.cache.hit\n  object.shard_updating.cache.miss.200","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        # the cases of cache_state is memcache miss, error, skip, force_skip"},{"line_number":759,"context_line":"        # or disabled."},{"line_number":760,"context_line":"        logger.increment("},{"line_number":761,"context_line":"            \u0027%s.cache.%s.%d\u0027 % (op_type, cache_state, resp.status_int))"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"def _get_info_from_memcache(app, env, account, container\u003dNone):"}],"source_content_type":"text/x-python","patch_set":12,"id":"cb0d6816_0a356659","line":761,"in_reply_to":"ec3ce6f4_e0539eee","updated":"2023-01-13 19:05:06.000000000","message":"Ack","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":2422,"context_line":"        shard_ranges \u003d ["},{"line_number":2423,"context_line":"            ShardRange.from_dict(shard_range)"},{"line_number":2424,"context_line":"            for shard_range in cached_ranges]"},{"line_number":2425,"context_line":"        return shard_ranges, cache_state"},{"line_number":2426,"context_line":""},{"line_number":2427,"context_line":"    def _get_update_shard(self, req, account, container, obj):"},{"line_number":2428,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"28472aa2_41caf52c","line":2425,"updated":"2022-12-13 12:21:43.000000000","message":"+1 nice extraction","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":2422,"context_line":"        shard_ranges \u003d ["},{"line_number":2423,"context_line":"            ShardRange.from_dict(shard_range)"},{"line_number":2424,"context_line":"            for shard_range in cached_ranges]"},{"line_number":2425,"context_line":"        return shard_ranges, cache_state"},{"line_number":2426,"context_line":""},{"line_number":2427,"context_line":"    def _get_update_shard(self, req, account, container, obj):"},{"line_number":2428,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"fe997cde_ede79fc0","line":2425,"in_reply_to":"28472aa2_41caf52c","updated":"2023-01-13 19:05:06.000000000","message":"Ack","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":2461,"context_line":"            else:"},{"line_number":2462,"context_line":"                set_in_memcache \u003d False"},{"line_number":2463,"context_line":"            if shard_ranges:"},{"line_number":2464,"context_line":"                cached_ranges \u003d [dict(sr) for sr in shard_ranges]"},{"line_number":2465,"context_line":"                infocache[cache_key] \u003d tuple(cached_ranges)"},{"line_number":2466,"context_line":"                if memcache and set_in_memcache:"},{"line_number":2467,"context_line":"                    memcache.set(cache_key, cached_ranges,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f33b2b5_cc7816b9","line":2464,"updated":"2022-12-13 12:21:43.000000000","message":"before, if we hit memcache, then we would not have to convert shard ranges back to dicts in order to set into infocache, but now we do always 😞\n\nhow about returning the list of dicts from _get_cached_updating_shard_ranges, and converting to a list of ShardRanges in this method?\n\nso (this is close to the original so I\u0027m not sure I am making anything better!?)...\n\n  cached_ranges, cache_state \u003d self._get_cached_updating_shard_ranges(\n                infocache, memcache, cache_key)\n  if cached_ranges:\n      infocache[cache_key] \u003d tuple(cached_ranges)\n      shard_ranges \u003d [ShardRange.from_dict(shard_range)\n                      for shard_range in cached_ranges]\n  else:\n      # pull full set of updating shards from backend and cache\n      shard_ranges, response \u003d self._get_shard_ranges(\n          req, account, container, states\u003d\u0027updating\u0027)\n      if shard_ranges:\n          cached_ranges \u003d [dict(sr) for sr in shard_ranges]        \n          infocache[cache_key] \u003d tuple(cached_ranges)\n          if memcache:\n              memcache.set(cache_key, cached_ranges,\n                           time\u003dself.app.recheck_updating_shard_ranges)","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":2461,"context_line":"            else:"},{"line_number":2462,"context_line":"                set_in_memcache \u003d False"},{"line_number":2463,"context_line":"            if shard_ranges:"},{"line_number":2464,"context_line":"                cached_ranges \u003d [dict(sr) for sr in shard_ranges]"},{"line_number":2465,"context_line":"                infocache[cache_key] \u003d tuple(cached_ranges)"},{"line_number":2466,"context_line":"                if memcache and set_in_memcache:"},{"line_number":2467,"context_line":"                    memcache.set(cache_key, cached_ranges,"}],"source_content_type":"text/x-python","patch_set":12,"id":"28f4aafb_ce7a1d50","line":2464,"in_reply_to":"9f33b2b5_cc7816b9","updated":"2023-01-13 19:05:06.000000000","message":"Done","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":2469,"context_line":""},{"line_number":2470,"context_line":"        record_cache_op_metrics("},{"line_number":2471,"context_line":"            self.logger, \u0027shard_updating\u0027, cache_state, response)"},{"line_number":2472,"context_line":"        return find_shard_range(obj, shard_ranges or [])"}],"source_content_type":"text/x-python","patch_set":12,"id":"77efc325_945faeff","line":2472,"range":{"start_line":2472,"start_character":15,"end_line":2472,"end_character":31},"updated":"2022-12-13 12:21:43.000000000","message":"ok, we\u0027ll always pass in a list. If the list is empty we\u0027ll get back None.","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":2469,"context_line":""},{"line_number":2470,"context_line":"        record_cache_op_metrics("},{"line_number":2471,"context_line":"            self.logger, \u0027shard_updating\u0027, cache_state, response)"},{"line_number":2472,"context_line":"        return find_shard_range(obj, shard_ranges or [])"}],"source_content_type":"text/x-python","patch_set":12,"id":"3663b1b6_574a5e88","line":2472,"range":{"start_line":2472,"start_character":15,"end_line":2472,"end_character":31},"in_reply_to":"77efc325_945faeff","updated":"2023-01-13 19:05:06.000000000","message":"Ack","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"76a84456f89c1404739a0550608f99e50227fe38","unresolved":true,"context_lines":[{"line_number":2372,"context_line":"                req.path_qs, err)"},{"line_number":2373,"context_line":"            return None"},{"line_number":2374,"context_line":""},{"line_number":2375,"context_line":"    def _get_shard_ranges_from_backend("},{"line_number":2376,"context_line":"            self, req, account, container, includes\u003dNone, states\u003dNone):"},{"line_number":2377,"context_line":"        \"\"\""},{"line_number":2378,"context_line":"        Fetch shard ranges from given `account/container`. If `includes` is"}],"source_content_type":"text/x-python","patch_set":13,"id":"78c6f672_4d6d74d6","line":2375,"updated":"2023-01-14 01:25:23.000000000","message":"After I changed this function name to \"_get_shard_ranges_from_backend\", I found out controller/container.py has a function with same name, but different signature. Everything seems okay, just to check if I need rename it to something else.","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"27b460cc6be0b6ff84a1f08f2bdd944489afbba2","unresolved":false,"context_lines":[{"line_number":2372,"context_line":"                req.path_qs, err)"},{"line_number":2373,"context_line":"            return None"},{"line_number":2374,"context_line":""},{"line_number":2375,"context_line":"    def _get_shard_ranges_from_backend("},{"line_number":2376,"context_line":"            self, req, account, container, includes\u003dNone, states\u003dNone):"},{"line_number":2377,"context_line":"        \"\"\""},{"line_number":2378,"context_line":"        Fetch shard ranges from given `account/container`. If `includes` is"}],"source_content_type":"text/x-python","patch_set":13,"id":"125af687_16763570","line":2375,"in_reply_to":"5b2ac3d3_0230aae5","updated":"2023-01-17 03:47:44.000000000","message":"thanks for your detailed suggestion, I agree with you on this, we should move \u0027_get_update_shard\u0027 to obj.py. I will create a JIRA later for that, for now I will just roll back the name change.","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b5f2820fb1c0d89a864f9831229ea912bf073c2","unresolved":true,"context_lines":[{"line_number":2372,"context_line":"                req.path_qs, err)"},{"line_number":2373,"context_line":"            return None"},{"line_number":2374,"context_line":""},{"line_number":2375,"context_line":"    def _get_shard_ranges_from_backend("},{"line_number":2376,"context_line":"            self, req, account, container, includes\u003dNone, states\u003dNone):"},{"line_number":2377,"context_line":"        \"\"\""},{"line_number":2378,"context_line":"        Fetch shard ranges from given `account/container`. If `includes` is"}],"source_content_type":"text/x-python","patch_set":13,"id":"5b2ac3d3_0230aae5","line":2375,"in_reply_to":"78c6f672_4d6d74d6","updated":"2023-01-16 11:45:38.000000000","message":"I\u0027d prefer the names not to clash - it\u0027s not even a deliberate override (i.e. container.py is not specialising the behavior of base.py by overriding this method).\n\nI guess it may have been thought that this was a useful helper method, but in fact it is only ever called with states\u003d\u0027updating\u0027. In fact, I wonder why this method (and _get_cached_updating_shard_ranges and _get_update_shard) are in base.py and not obj.py. If they were in obj.py I\u0027d be happy with the name change 😊\n\nFor now, if you want to avoid the churn of moving the methods, I\u0027d suggest just not renaming.","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b5f2820fb1c0d89a864f9831229ea912bf073c2","unresolved":true,"context_lines":[{"line_number":2406,"context_line":"        Fetch cached shard ranges from infocache and memcache."},{"line_number":2407,"context_line":""},{"line_number":2408,"context_line":"        :param infocache: the infocache instance."},{"line_number":2409,"context_line":"        :param memcache: the memcached instance."},{"line_number":2410,"context_line":"        :param cache_key: the cache key for both infocache and memcache."},{"line_number":2411,"context_line":"        :return: a list of shard ranges in dict format."},{"line_number":2412,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"629a8f75_35a13544","line":2409,"range":{"start_line":2409,"start_character":29,"end_line":2409,"end_character":39},"updated":"2023-01-16 11:45:38.000000000","message":"nit: it\u0027s actually a MemcacheRing, or in abstract terms, an instance of a memcache client.","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"27b460cc6be0b6ff84a1f08f2bdd944489afbba2","unresolved":false,"context_lines":[{"line_number":2406,"context_line":"        Fetch cached shard ranges from infocache and memcache."},{"line_number":2407,"context_line":""},{"line_number":2408,"context_line":"        :param infocache: the infocache instance."},{"line_number":2409,"context_line":"        :param memcache: the memcached instance."},{"line_number":2410,"context_line":"        :param cache_key: the cache key for both infocache and memcache."},{"line_number":2411,"context_line":"        :return: a list of shard ranges in dict format."},{"line_number":2412,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"fd1a3c0e_9329cfd3","line":2409,"range":{"start_line":2409,"start_character":29,"end_line":2409,"end_character":39},"in_reply_to":"629a8f75_35a13544","updated":"2023-01-17 03:47:44.000000000","message":"Done","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b5f2820fb1c0d89a864f9831229ea912bf073c2","unresolved":true,"context_lines":[{"line_number":2408,"context_line":"        :param infocache: the infocache instance."},{"line_number":2409,"context_line":"        :param memcache: the memcached instance."},{"line_number":2410,"context_line":"        :param cache_key: the cache key for both infocache and memcache."},{"line_number":2411,"context_line":"        :return: a list of shard ranges in dict format."},{"line_number":2412,"context_line":"        \"\"\""},{"line_number":2413,"context_line":"        cached_ranges \u003d infocache.get(cache_key)"},{"line_number":2414,"context_line":"        if cached_ranges:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a316c07_878d340e","line":2411,"range":{"start_line":2411,"start_character":17,"end_line":2411,"end_character":54},"updated":"2023-01-16 11:45:38.000000000","message":"+1 useful to be clear about the return type (dicts vs ShardRanges)\n\n-1 the return value is actually a tuple ;-)","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"27b460cc6be0b6ff84a1f08f2bdd944489afbba2","unresolved":false,"context_lines":[{"line_number":2408,"context_line":"        :param infocache: the infocache instance."},{"line_number":2409,"context_line":"        :param memcache: the memcached instance."},{"line_number":2410,"context_line":"        :param cache_key: the cache key for both infocache and memcache."},{"line_number":2411,"context_line":"        :return: a list of shard ranges in dict format."},{"line_number":2412,"context_line":"        \"\"\""},{"line_number":2413,"context_line":"        cached_ranges \u003d infocache.get(cache_key)"},{"line_number":2414,"context_line":"        if cached_ranges:"}],"source_content_type":"text/x-python","patch_set":13,"id":"cccc9ef9_5a312046","line":2411,"range":{"start_line":2411,"start_character":17,"end_line":2411,"end_character":54},"in_reply_to":"7a316c07_878d340e","updated":"2023-01-17 03:47:44.000000000","message":"Done","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"048fa581f50bbd1706b4b30ef9479e06bb2b1956","unresolved":true,"context_lines":[{"line_number":200,"context_line":"        resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":201,"context_line":"        if cache_skipped:"},{"line_number":202,"context_line":"            self.logger.increment("},{"line_number":203,"context_line":"                \u0027shard_listing.cache.skip.backend.%s\u0027 % resp.status_int)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        sharding_state \u003d resp.headers.get("},{"line_number":206,"context_line":"            \u0027x-backend-sharding-state\u0027, \u0027\u0027).lower()"}],"source_content_type":"text/x-python","patch_set":2,"id":"8a335fd1_3467f1ce","line":203,"updated":"2022-09-22 17:35:46.000000000","message":"do we not already have status_int metric for shard_listing.backend?","commit_id":"d3b9c44ee6a9b575ded77f148ced94f4e7962eb8"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"2179f44bf7d6eeb9b11b030995775771196c3342","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":201,"context_line":"        if cache_skipped:"},{"line_number":202,"context_line":"            self.logger.increment("},{"line_number":203,"context_line":"                \u0027shard_listing.cache.skip.backend.%s\u0027 % resp.status_int)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        sharding_state \u003d resp.headers.get("},{"line_number":206,"context_line":"            \u0027x-backend-sharding-state\u0027, \u0027\u0027).lower()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9cf6088e_cb50271c","line":203,"in_reply_to":"8a335fd1_3467f1ce","updated":"2022-09-22 20:24:26.000000000","message":"Done","commit_id":"d3b9c44ee6a9b575ded77f148ced94f4e7962eb8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[{"line_number":322,"context_line":"            resp \u003d self._get_from_shards(req, resp)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        if not config_true_value("},{"line_number":325,"context_line":"                resp.headers.get(\u0027X-Backend-Cached-Results\u0027)):"},{"line_number":326,"context_line":"            # Cache container metadata. We just made a request to a storage"},{"line_number":327,"context_line":"            # node and got up-to-date information for the container."},{"line_number":328,"context_line":"            resp.headers[\u0027X-Backend-Recheck-Container-Existence\u0027] \u003d str("}],"source_content_type":"text/x-python","patch_set":3,"id":"11d05f4b_4830b3d1","side":"PARENT","line":325,"updated":"2022-09-27 15:48:29.000000000","message":"note that resp is assigned at line 322 so the X-Backend-Cached-Results header here may not be the same as at line 296, but the proposed change assumes it is. I need to remind myself when the header is set or modified.","commit_id":"c96d2bdd529f3d203dc19db720a825e2c6888331"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":322,"context_line":"            resp \u003d self._get_from_shards(req, resp)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        if not config_true_value("},{"line_number":325,"context_line":"                resp.headers.get(\u0027X-Backend-Cached-Results\u0027)):"},{"line_number":326,"context_line":"            # Cache container metadata. We just made a request to a storage"},{"line_number":327,"context_line":"            # node and got up-to-date information for the container."},{"line_number":328,"context_line":"            resp.headers[\u0027X-Backend-Recheck-Container-Existence\u0027] \u003d str("}],"source_content_type":"text/x-python","patch_set":3,"id":"98cb92a6_fa01857d","side":"PARENT","line":325,"in_reply_to":"11d05f4b_4830b3d1","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"c96d2bdd529f3d203dc19db720a825e2c6888331"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[{"line_number":133,"context_line":"        get_newest \u003d config_true_value(req.headers.get(\u0027x-newest\u0027, False))"},{"line_number":134,"context_line":"        cache_state \u003d \u0027none\u0027"},{"line_number":135,"context_line":"        if get_newest:"},{"line_number":136,"context_line":"            cache_state \u003d \u0027force_update\u0027"},{"line_number":137,"context_line":"            self.logger.debug("},{"line_number":138,"context_line":"                \u0027Skipping shard cache lookup (x-newest) for %s\u0027, req.path_qs)"},{"line_number":139,"context_line":"        elif (info and is_success(info[\u0027status\u0027]) and"}],"source_content_type":"text/x-python","patch_set":3,"id":"162eece7_f2bbb7ed","line":136,"range":{"start_line":136,"start_character":27,"end_line":136,"end_character":39},"updated":"2022-09-27 15:48:29.000000000","message":"\u0027force_skip\u0027 might be a better label w.r.t. \u0027skip\u0027","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        get_newest \u003d config_true_value(req.headers.get(\u0027x-newest\u0027, False))"},{"line_number":134,"context_line":"        cache_state \u003d \u0027none\u0027"},{"line_number":135,"context_line":"        if get_newest:"},{"line_number":136,"context_line":"            cache_state \u003d \u0027force_update\u0027"},{"line_number":137,"context_line":"            self.logger.debug("},{"line_number":138,"context_line":"                \u0027Skipping shard cache lookup (x-newest) for %s\u0027, req.path_qs)"},{"line_number":139,"context_line":"        elif (info and is_success(info[\u0027status\u0027]) and"}],"source_content_type":"text/x-python","patch_set":3,"id":"511d7bb7_cabcc327","line":136,"range":{"start_line":136,"start_character":27,"end_line":136,"end_character":39},"in_reply_to":"162eece7_f2bbb7ed","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[{"line_number":241,"context_line":"    def _log_shard_listing_backend_metrics(self, memcache_state, resp):"},{"line_number":242,"context_line":"        if memcache_state \u003d\u003d \u0027none\u0027:"},{"line_number":243,"context_line":"            self.logger.increment("},{"line_number":244,"context_line":"                \u0027shard_listing.backend.%s\u0027 % resp.status_int)"},{"line_number":245,"context_line":"        else:"},{"line_number":246,"context_line":"            self.logger.increment("},{"line_number":247,"context_line":"                \u0027shard_listing.backend.%s.%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":3,"id":"31251e7a_26a57b59","line":244,"updated":"2022-09-27 15:48:29.000000000","message":"miss? I wonder if we should make \u0027miss\u0027 an explicit part of the metric name like \u0027skip\u0027 and \u0027force_update\u0027 are?","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    def _log_shard_listing_backend_metrics(self, memcache_state, resp):"},{"line_number":242,"context_line":"        if memcache_state \u003d\u003d \u0027none\u0027:"},{"line_number":243,"context_line":"            self.logger.increment("},{"line_number":244,"context_line":"                \u0027shard_listing.backend.%s\u0027 % resp.status_int)"},{"line_number":245,"context_line":"        else:"},{"line_number":246,"context_line":"            self.logger.increment("},{"line_number":247,"context_line":"                \u0027shard_listing.backend.%s.%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":3,"id":"b9df1ce3_d58dc0d2","line":244,"in_reply_to":"31251e7a_26a57b59","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[{"line_number":245,"context_line":"        else:"},{"line_number":246,"context_line":"            self.logger.increment("},{"line_number":247,"context_line":"                \u0027shard_listing.backend.%s.%s\u0027 %"},{"line_number":248,"context_line":"                (memcache_state, resp.status_int))"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def GETorHEAD(self, req):"},{"line_number":251,"context_line":"        \"\"\"Handler for HTTP GET/HEAD requests.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"6c46e435_488e948c","line":248,"updated":"2022-09-27 15:48:29.000000000","message":"force_update and skip?","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        else:"},{"line_number":246,"context_line":"            self.logger.increment("},{"line_number":247,"context_line":"                \u0027shard_listing.backend.%s.%s\u0027 %"},{"line_number":248,"context_line":"                (memcache_state, resp.status_int))"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def GETorHEAD(self, req):"},{"line_number":251,"context_line":"        \"\"\"Handler for HTTP GET/HEAD requests.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9bfd4939_f4fe0127","line":248,"in_reply_to":"6c46e435_488e948c","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62ddfeb6a12fe328f085a515cc12a78f58bd2a9e","unresolved":true,"context_lines":[{"line_number":289,"context_line":"            info \u003d None"},{"line_number":290,"context_line":"            may_get_listing_shards \u003d False"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        memcache_state \u003d \u0027none\u0027"},{"line_number":293,"context_line":"        if (may_get_listing_shards and"},{"line_number":294,"context_line":"                self.app.recheck_listing_shard_ranges \u003e 0"},{"line_number":295,"context_line":"                and memcache"}],"source_content_type":"text/x-python","patch_set":3,"id":"6b06fdb6_9b4c6d6c","line":292,"updated":"2022-09-27 15:48:29.000000000","message":"I\u0027d prefer to use None as the default","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c354dbf0352f585f33477ed30de4dfbdebbd1734","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            info \u003d None"},{"line_number":290,"context_line":"            may_get_listing_shards \u003d False"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        memcache_state \u003d \u0027none\u0027"},{"line_number":293,"context_line":"        if (may_get_listing_shards and"},{"line_number":294,"context_line":"                self.app.recheck_listing_shard_ranges \u003e 0"},{"line_number":295,"context_line":"                and memcache"}],"source_content_type":"text/x-python","patch_set":3,"id":"68998345_ad34e466","line":292,"in_reply_to":"6b06fdb6_9b4c6d6c","updated":"2022-09-29 05:13:45.000000000","message":"Done","commit_id":"de9973d5babbc2eadec72f76eb70f49a7c58dde5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43dd51f1a2a0131c66080c98d5bb4f2358a08283","unresolved":true,"context_lines":[{"line_number":263,"context_line":"                    self.logger, \u0027shard_listing\u0027, memcache_state, resp)"},{"line_number":264,"context_line":"        # else:"},{"line_number":265,"context_line":"        #  The request failed, but in the absence of info we cannot assume"},{"line_number":266,"context_line":"        #  the container is sharded, so we don\u0027t increment the metric"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def GETorHEAD(self, req):"},{"line_number":269,"context_line":"        \"\"\"Handler for HTTP GET/HEAD requests.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"0602acac_f4a43e34","line":266,"updated":"2022-09-29 15:56:29.000000000","message":"i expected given the commit message and the uniformity of the shard_listing and shard_updating *output* metrics that they\u0027d share more implementatoin.  This seems like a non-trivial method wrapping the _record_memcache_op_metrics function and it\u0027s ... maybe ... doing ...\n\n... can you please add a doc-string to this method?","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"06c487b14dad13b82ffec23a2a4680884968c07a","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                    self.logger, \u0027shard_listing\u0027, memcache_state, resp)"},{"line_number":264,"context_line":"        # else:"},{"line_number":265,"context_line":"        #  The request failed, but in the absence of info we cannot assume"},{"line_number":266,"context_line":"        #  the container is sharded, so we don\u0027t increment the metric"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def GETorHEAD(self, req):"},{"line_number":269,"context_line":"        \"\"\"Handler for HTTP GET/HEAD requests.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"a5073d94_09357202","line":266,"in_reply_to":"0602acac_f4a43e34","updated":"2022-09-30 05:58:27.000000000","message":"Done","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"ea18e7003123c09256fbadd5d37daaf68855cbf9","unresolved":true,"context_lines":[{"line_number":320,"context_line":"            resp, memcache_state \u003d self._GET_using_cache(req, info)"},{"line_number":321,"context_line":"        else:"},{"line_number":322,"context_line":"            resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":323,"context_line":"            memcache_state \u003d \u0027disabled\u0027"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":326,"context_line":"        self._record_shard_listing_cache_metrics("}],"source_content_type":"text/x-python","patch_set":4,"id":"852e0dbe_01e3d264","line":323,"updated":"2022-09-29 05:18:41.000000000","message":"this seems a drive-by fix, we had shard_listing.backend metrics didn\u0027t recorded previously? that\u0027s why a lot of shard_listing.cache.disabled.200 shows up in the test_server test cases.","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43dd51f1a2a0131c66080c98d5bb4f2358a08283","unresolved":true,"context_lines":[{"line_number":320,"context_line":"            resp, memcache_state \u003d self._GET_using_cache(req, info)"},{"line_number":321,"context_line":"        else:"},{"line_number":322,"context_line":"            resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":323,"context_line":"            memcache_state \u003d \u0027disabled\u0027"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":326,"context_line":"        self._record_shard_listing_cache_metrics("}],"source_content_type":"text/x-python","patch_set":4,"id":"c3dd755f_b416be23","line":323,"in_reply_to":"852e0dbe_01e3d264","updated":"2022-09-29 15:56:29.000000000","message":"so maybe we should standardize on memcache_state \u003d \u0027disabled\u0027 and not allow the function to be called with None","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"06c487b14dad13b82ffec23a2a4680884968c07a","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            resp, memcache_state \u003d self._GET_using_cache(req, info)"},{"line_number":321,"context_line":"        else:"},{"line_number":322,"context_line":"            resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":323,"context_line":"            memcache_state \u003d \u0027disabled\u0027"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":326,"context_line":"        self._record_shard_listing_cache_metrics("}],"source_content_type":"text/x-python","patch_set":4,"id":"cc07d014_9f3b7785","line":323,"in_reply_to":"c3dd755f_b416be23","updated":"2022-09-30 05:58:27.000000000","message":"Done","commit_id":"599b40855d3b688be26d6c189b5610c78cbe9ef1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f8d8d4fad7191e56f907baef32ab350bded7d6de","unresolved":true,"context_lines":[{"line_number":149,"context_line":"                                          shard\u003d\u0027listing\u0027)"},{"line_number":150,"context_line":"                cached_ranges \u003d infocache.get(cache_key)"},{"line_number":151,"context_line":"                if cached_ranges:"},{"line_number":152,"context_line":"                    cache_state \u003d \u0027infocache_hit\u0027"},{"line_number":153,"context_line":"                elif memcache:"},{"line_number":154,"context_line":"                    skip_chance \u003d \\"},{"line_number":155,"context_line":"                        self.app.container_listing_shard_ranges_skip_cache"}],"source_content_type":"text/x-python","patch_set":5,"id":"42f7d38e_6395382f","line":152,"updated":"2022-09-30 17:03:44.000000000","message":"i think this block is un-tested","commit_id":"10c3f29fc58c8a35977e6410c721166e73cff03f"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"6df050de5e82fc2d174daf5902cb9ac032a24c2e","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                          shard\u003d\u0027listing\u0027)"},{"line_number":150,"context_line":"                cached_ranges \u003d infocache.get(cache_key)"},{"line_number":151,"context_line":"                if cached_ranges:"},{"line_number":152,"context_line":"                    cache_state \u003d \u0027infocache_hit\u0027"},{"line_number":153,"context_line":"                elif memcache:"},{"line_number":154,"context_line":"                    skip_chance \u003d \\"},{"line_number":155,"context_line":"                        self.app.container_listing_shard_ranges_skip_cache"}],"source_content_type":"text/x-python","patch_set":5,"id":"faa21775_7ef9770c","line":152,"in_reply_to":"42f7d38e_6395382f","updated":"2022-10-03 04:40:23.000000000","message":"Done","commit_id":"10c3f29fc58c8a35977e6410c721166e73cff03f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f8d8d4fad7191e56f907baef32ab350bded7d6de","unresolved":true,"context_lines":[{"line_number":329,"context_line":"            resp, cache_state \u003d self._GET_using_cache(req, info)"},{"line_number":330,"context_line":"        else:"},{"line_number":331,"context_line":"            resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":332,"context_line":"            cache_state \u003d \u0027disabled\u0027"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":335,"context_line":"        self._record_shard_listing_cache_metrics("}],"source_content_type":"text/x-python","patch_set":5,"id":"27ba2a4e_3c67403b","line":332,"updated":"2022-09-30 17:03:44.000000000","message":"it this always the right cache_state for this else block?  is cache \"disabled\" when req.headers[\u0027x-backend-include-deleted\u0027] \u003d True or is that more of \"force_skip\"","commit_id":"10c3f29fc58c8a35977e6410c721166e73cff03f"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"6df050de5e82fc2d174daf5902cb9ac032a24c2e","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            resp, cache_state \u003d self._GET_using_cache(req, info)"},{"line_number":330,"context_line":"        else:"},{"line_number":331,"context_line":"            resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":332,"context_line":"            cache_state \u003d \u0027disabled\u0027"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":335,"context_line":"        self._record_shard_listing_cache_metrics("}],"source_content_type":"text/x-python","patch_set":5,"id":"01556a3e_57d84214","line":332,"in_reply_to":"27ba2a4e_3c67403b","updated":"2022-10-03 04:40:23.000000000","message":"x-backend-include-deleted is only used for the sharder, it shouldn\u0027t reach to the proxy, line 323 is a purely check on a condition shouldn\u0027t happen. I think we should remove line 323, and in the entry of proxy, check those headers shouldn\u0027t be set.","commit_id":"10c3f29fc58c8a35977e6410c721166e73cff03f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd3e3f7ee6eec580728455136b17a5904a1011e8","unresolved":true,"context_lines":[{"line_number":312,"context_line":"                    # sharded but we assume info was correct and increment the"},{"line_number":313,"context_line":"                    # failure metric"},{"line_number":314,"context_line":"                    self.logger.increment("},{"line_number":315,"context_line":"                        \u0027shard_listing.backend.%s\u0027 % resp.status_int)"},{"line_number":316,"context_line":"            # else:"},{"line_number":317,"context_line":"            #  The request failed, but in the absence of info we cannot assume"},{"line_number":318,"context_line":"            #  the container is sharded, so we don\u0027t increment the metric"}],"source_content_type":"text/x-python","patch_set":7,"id":"10a82d69_87dbb3d8","side":"PARENT","line":315,"updated":"2022-10-04 15:28:56.000000000","message":"maybe this block of code became stupid when we switched from just success/fail metrics to recording the status_int","commit_id":"429702e30de95ca3f0188b89d51364f6b47d5121"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5aa438cadc642356dd96a3d76f0da5598783d120","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                    # sharded but we assume info was correct and increment the"},{"line_number":313,"context_line":"                    # failure metric"},{"line_number":314,"context_line":"                    self.logger.increment("},{"line_number":315,"context_line":"                        \u0027shard_listing.backend.%s\u0027 % resp.status_int)"},{"line_number":316,"context_line":"            # else:"},{"line_number":317,"context_line":"            #  The request failed, but in the absence of info we cannot assume"},{"line_number":318,"context_line":"            #  the container is sharded, so we don\u0027t increment the metric"}],"source_content_type":"text/x-python","patch_set":7,"id":"805cf270_a75172e5","side":"PARENT","line":315,"in_reply_to":"10a82d69_87dbb3d8","updated":"2022-10-05 23:40:10.000000000","message":"this is outdated code in older version of this patch.","commit_id":"429702e30de95ca3f0188b89d51364f6b47d5121"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd3e3f7ee6eec580728455136b17a5904a1011e8","unresolved":true,"context_lines":[{"line_number":159,"context_line":"                        try:"},{"line_number":160,"context_line":"                            cached_ranges \u003d memcache.get("},{"line_number":161,"context_line":"                                cache_key, raise_on_error\u003dTrue)"},{"line_number":162,"context_line":"                            cache_state \u003d \u0027hit\u0027 if cached_ranges else \u0027miss\u0027"},{"line_number":163,"context_line":"                        except MemcacheConnectionError:"},{"line_number":164,"context_line":"                            cache_state \u003d \u0027error\u0027"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"6ee73d16_fe3c676c","line":162,"updated":"2022-10-04 15:28:56.000000000","message":"sometimes i think this line will make cache_state \u003d \u0027miss\u0027 even thought it was already initialized to \u0027miss\u0027","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5aa438cadc642356dd96a3d76f0da5598783d120","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                        try:"},{"line_number":160,"context_line":"                            cached_ranges \u003d memcache.get("},{"line_number":161,"context_line":"                                cache_key, raise_on_error\u003dTrue)"},{"line_number":162,"context_line":"                            cache_state \u003d \u0027hit\u0027 if cached_ranges else \u0027miss\u0027"},{"line_number":163,"context_line":"                        except MemcacheConnectionError:"},{"line_number":164,"context_line":"                            cache_state \u003d \u0027error\u0027"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"715a86bb_59d535ea","line":162,"in_reply_to":"6ee73d16_fe3c676c","updated":"2022-10-05 23:40:10.000000000","message":"actually we didn\u0027t initialize \u0027cache_state\u0027 anymore in this function.","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd3e3f7ee6eec580728455136b17a5904a1011e8","unresolved":true,"context_lines":[{"line_number":183,"context_line":"                        \u0027x-timestamp\u0027)"},{"line_number":184,"context_line":"                    resp.accept_ranges \u003d \u0027bytes\u0027"},{"line_number":185,"context_line":"                    resp.content_type \u003d \u0027application/json\u0027"},{"line_number":186,"context_line":"                    return resp, cache_state"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        # The request was not fulfilled from cache so send to the backend"},{"line_number":189,"context_line":"        # server, but instruct the backend server to ignore name constraints in"}],"source_content_type":"text/x-python","patch_set":7,"id":"28dacb34_97ce66c5","line":186,"updated":"2022-10-04 15:28:56.000000000","message":"but here cache_state is never miss","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5aa438cadc642356dd96a3d76f0da5598783d120","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                        \u0027x-timestamp\u0027)"},{"line_number":184,"context_line":"                    resp.accept_ranges \u003d \u0027bytes\u0027"},{"line_number":185,"context_line":"                    resp.content_type \u003d \u0027application/json\u0027"},{"line_number":186,"context_line":"                    return resp, cache_state"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        # The request was not fulfilled from cache so send to the backend"},{"line_number":189,"context_line":"        # server, but instruct the backend server to ignore name constraints in"}],"source_content_type":"text/x-python","patch_set":7,"id":"6babcdad_129587d7","line":186,"in_reply_to":"28dacb34_97ce66c5","updated":"2022-10-05 23:40:10.000000000","message":"Ack","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd3e3f7ee6eec580728455136b17a5904a1011e8","unresolved":true,"context_lines":[{"line_number":236,"context_line":"                # filter returned shard ranges according to request constraints"},{"line_number":237,"context_line":"                resp.body \u003d self._filter_resp_shard_ranges(req, cached_ranges)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        return resp, cache_state"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _record_shard_listing_cache_metrics("},{"line_number":242,"context_line":"            self, cache_state, resp, resp_record_type, info):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7e824253_c1915ba6","line":239,"updated":"2022-10-04 15:28:56.000000000","message":"and here cache state is ... just miss ... or i guess it might have been force_skip","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5aa438cadc642356dd96a3d76f0da5598783d120","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                # filter returned shard ranges according to request constraints"},{"line_number":237,"context_line":"                resp.body \u003d self._filter_resp_shard_ranges(req, cached_ranges)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        return resp, cache_state"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _record_shard_listing_cache_metrics("},{"line_number":242,"context_line":"            self, cache_state, resp, resp_record_type, info):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7795fb1b_bbb3b7f1","line":239,"in_reply_to":"7e824253_c1915ba6","updated":"2022-10-05 23:40:10.000000000","message":"yes, could be miss or force_skip.","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dd3e3f7ee6eec580728455136b17a5904a1011e8","unresolved":true,"context_lines":[{"line_number":272,"context_line":"            # backend. We can\u0027t be sure that the container is sharded but we"},{"line_number":273,"context_line":"            # assume info was correct and increment the failure metrics."},{"line_number":274,"context_line":"            record_cache_op_metrics("},{"line_number":275,"context_line":"                self.logger, \u0027shard_listing\u0027, cache_state, resp)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def GETorHEAD(self, req):"},{"line_number":278,"context_line":"        \"\"\"Handler for HTTP GET/HEAD requests.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"be423ddb_3e69f348","line":275,"updated":"2022-10-04 15:28:56.000000000","message":"Thank you for the doc string, I still don\u0027t understand what this method/wrapper is trying to do.\n\nOn my machine this diff (a straight pass through; i.e. ignore resp_record_type \u0026 info) passes all proxy/controller unit tests:\n\n\tdiff --git a/swift/proxy/controllers/container.py b/swift/proxy/controllers/container.py\n\tindex a3367e868..be4bbf450 100644\n\t--- a/swift/proxy/controllers/container.py\n\t+++ b/swift/proxy/controllers/container.py\n\t@@ -252,27 +252,8 @@ class ContainerController(Controller):\n\t\t\t   \u0027shard\u0027 for shard range listing, \u0027object\u0027 for object listing.\n\t\t :param  info: the cached container info.\n\t\t \"\"\"\n\t-        if is_success(resp.status_int):\n\t-            if resp_record_type \u003d\u003d \u0027shard\u0027:\n\t-                # Here we either got shard ranges by hitting the cache, or we\n\t-                # got shard ranges from backend successfully for cache_state\n\t-                # other than cache hit. Note: it\u0027s possible that later we find\n\t-                # that shard ranges can\u0027t be parsed.\n\t-                record_cache_op_metrics(\n\t-                    self.logger, \u0027shard_listing\u0027, cache_state, resp)\n\t-            return\n\t-\n\t-        # The shard listing request failed when getting shard ranges from\n\t-        # backend.\n\t-        # Note: In the absence of \u0027info\u0027 we cannot assume the container is\n\t-        # sharded, so we don\u0027t increment the metric if \u0027info\u0027 is None.\n\t-        if (info and is_success(info[\u0027status\u0027])\n\t-                and info.get(\u0027sharding_state\u0027) \u003d\u003d \u0027sharded\u0027):\n\t-            # The shard listing request failed when getting shard ranges from\n\t-            # backend. We can\u0027t be sure that the container is sharded but we\n\t-            # assume info was correct and increment the failure metrics.\n\t-            record_cache_op_metrics(\n\t-                self.logger, \u0027shard_listing\u0027, cache_state, resp)\n\t+        record_cache_op_metrics(\n\t+            self.logger, \u0027shard_listing\u0027, cache_state, resp)\n\t \n\t     def GETorHEAD(self, req):\n\t\t \"\"\"Handler for HTTP GET/HEAD requests.\"\"\"\n\n\nThere\u0027s just *one* test that wasn\u0027t expecting the extra metrics:\n swift/test/unit/proxy/test_server.py::TestReplicatedObjectController::test_backend_headers_update_shard_container_errors\n\n\tdiff --git a/test/unit/proxy/test_server.py b/test/unit/proxy/test_server.py\n\tindex 3cf42c015..ae938c9d7 100644\n\t--- a/test/unit/proxy/test_server.py\n\t+++ b/test/unit/proxy/test_server.py\n\t@@ -4580,10 +4580,11 @@ class TestReplicatedObjectController(\n\t\t\t resp \u003d req.get_response(self.app)\n\t \n\t\t     self.assertEqual(resp.status_int, 202)\n\t-            stats \u003d self.app.logger.get_increment_counts()\n\t-            self.assertEqual(\n\t-                {\u0027object.shard_updating.cache.disabled.404\u0027: 1},\n\t-                stats)\n\t+            self.assertEqual([\n\t+                \u0027container.shard_listing.cache.disabled.200\u0027,\n\t+                \u0027container.shard_listing.cache.disabled.404\u0027,\n\t+                \u0027object.shard_updating.cache.disabled.404\u0027,\n\t+            ], self.app.logger.get_increments())\n\t \n\t\t     backend_requests \u003d fake_conn.requests\n\t\t     account_request \u003d backend_requests[0]\n\n\n\n... but why are trying to supress the metrics in the first place?  what am I missing?","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5aa438cadc642356dd96a3d76f0da5598783d120","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            # backend. We can\u0027t be sure that the container is sharded but we"},{"line_number":273,"context_line":"            # assume info was correct and increment the failure metrics."},{"line_number":274,"context_line":"            record_cache_op_metrics("},{"line_number":275,"context_line":"                self.logger, \u0027shard_listing\u0027, cache_state, resp)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def GETorHEAD(self, req):"},{"line_number":278,"context_line":"        \"\"\"Handler for HTTP GET/HEAD requests.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9b8a99b6_e2335dc6","line":275,"in_reply_to":"be423ddb_3e69f348","updated":"2022-10-05 23:40:10.000000000","message":"All those shard listings are setup to fail and not show up in the metrics, I think we still need those original logic in _record_shard_listing_cache_metrics, and only to record metrics in those specific conditions.","commit_id":"0088f1d9a9fe7cc520765f1c9e2829cf660e7fd1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":338,"context_line":"                    # failure metric"},{"line_number":339,"context_line":"                    self.logger.increment("},{"line_number":340,"context_line":"                        \u0027shard_listing.backend.%s\u0027 % resp.status_int)"},{"line_number":341,"context_line":"            # else:"},{"line_number":342,"context_line":"            #  The request failed, but in the absence of info we cannot assume"},{"line_number":343,"context_line":"            #  the container is sharded, so we don\u0027t increment the metric"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        if all((req.method \u003d\u003d \"GET\", record_type \u003d\u003d \u0027auto\u0027,"},{"line_number":346,"context_line":"               resp_record_type.lower() \u003d\u003d \u0027shard\u0027)):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ea380cc0_ecc75a35","side":"PARENT","line":343,"range":{"start_line":341,"start_character":12,"end_line":343,"end_character":73},"updated":"2022-12-13 12:21:43.000000000","message":"I think it would be useful to retain this comment in _record_shard_listing_cache_metrics()","commit_id":"d503ddaf14b8ecf569a3b1bd01f3098c91140dbb"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                    # failure metric"},{"line_number":339,"context_line":"                    self.logger.increment("},{"line_number":340,"context_line":"                        \u0027shard_listing.backend.%s\u0027 % resp.status_int)"},{"line_number":341,"context_line":"            # else:"},{"line_number":342,"context_line":"            #  The request failed, but in the absence of info we cannot assume"},{"line_number":343,"context_line":"            #  the container is sharded, so we don\u0027t increment the metric"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        if all((req.method \u003d\u003d \"GET\", record_type \u003d\u003d \u0027auto\u0027,"},{"line_number":346,"context_line":"               resp_record_type.lower() \u003d\u003d \u0027shard\u0027)):"}],"source_content_type":"text/x-python","patch_set":12,"id":"885aef8f_e0be3304","side":"PARENT","line":343,"range":{"start_line":341,"start_character":12,"end_line":343,"end_character":73},"in_reply_to":"ea380cc0_ecc75a35","updated":"2023-01-13 19:05:06.000000000","message":"Done","commit_id":"d503ddaf14b8ecf569a3b1bd01f3098c91140dbb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":293,"context_line":"            if resp:"},{"line_number":294,"context_line":"                return resp, cache_state"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            cache_state \u003d \u0027miss\u0027"},{"line_number":297,"context_line":"        # The request was not fulfilled from cache so send to backend server"},{"line_number":298,"context_line":"        return self._get_shard_ranges_from_backend(req), cache_state"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"22b873d2_f981a495","line":296,"updated":"2022-12-13 12:21:43.000000000","message":"so we didn\u0027t even look for shard ranges in cache, but this is a miss because the container metadata didn\u0027t support a cache lookup for shard ranges","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"27b460cc6be0b6ff84a1f08f2bdd944489afbba2","unresolved":true,"context_lines":[{"line_number":293,"context_line":"            if resp:"},{"line_number":294,"context_line":"                return resp, cache_state"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            cache_state \u003d \u0027miss\u0027"},{"line_number":297,"context_line":"        # The request was not fulfilled from cache so send to backend server"},{"line_number":298,"context_line":"        return self._get_shard_ranges_from_backend(req), cache_state"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"a8de2873_910e0f7e","line":296,"in_reply_to":"0287e674_a76d3e51","updated":"2023-01-17 03:47:44.000000000","message":"Sure, several different of \u0027skip\u0027 look good to me too. Yes, let\u0027s get more opinions on this before making changes.","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":true,"context_lines":[{"line_number":293,"context_line":"            if resp:"},{"line_number":294,"context_line":"                return resp, cache_state"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            cache_state \u003d \u0027miss\u0027"},{"line_number":297,"context_line":"        # The request was not fulfilled from cache so send to backend server"},{"line_number":298,"context_line":"        return self._get_shard_ranges_from_backend(req), cache_state"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"b689f5c7_aa8c6ab1","line":296,"in_reply_to":"22b873d2_f981a495","updated":"2023-01-13 19:05:06.000000000","message":"yes, should we give it a new name?","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"01d9a10d7269e0ab2659d345b62f08ed1db4ba0e","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            if resp:"},{"line_number":294,"context_line":"                return resp, cache_state"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            cache_state \u003d \u0027miss\u0027"},{"line_number":297,"context_line":"        # The request was not fulfilled from cache so send to backend server"},{"line_number":298,"context_line":"        return self._get_shard_ranges_from_backend(req), cache_state"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"254419dd_4576ffda","line":296,"in_reply_to":"a8de2873_910e0f7e","updated":"2023-01-17 18:46:03.000000000","message":"Use \u0027bypass\u0027 per offline discussion.","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b5f2820fb1c0d89a864f9831229ea912bf073c2","unresolved":true,"context_lines":[{"line_number":293,"context_line":"            if resp:"},{"line_number":294,"context_line":"                return resp, cache_state"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            cache_state \u003d \u0027miss\u0027"},{"line_number":297,"context_line":"        # The request was not fulfilled from cache so send to backend server"},{"line_number":298,"context_line":"        return self._get_shard_ranges_from_backend(req), cache_state"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"0287e674_a76d3e51","line":296,"in_reply_to":"b689f5c7_aa8c6ab1","updated":"2023-01-16 11:45:38.000000000","message":"hmmm, maybe. Calling it a \u0027miss\u0027 when the sharding state in not sharded distorts the measure of how well caching is working. I think that is true for every unsharded container. Can we just leave cache_state \u003d\u003d None in this case?\n\nOn the other hand, not being able to use cache because the container metadata was not in cache can be thought of as a genuine \u0027miss\u0027, but then we don\u0027t know the container was sharded, so again I wonder if we should leave cache_state \u003d\u003d None.\n\nIt depends whether we want miss to mean \u0027we did not get shard ranges from cache, possibly because the container is unsharded\u0027 or to mean \u0027we tried to get shard ranges from cache, expecting them to be there, but failed\u0027. \n\nI wonder...if our current use of \u0027skip\u0027 was called \u0027random_skip\u0027, we could use \u0027skip\u0027 for these cases and never have cache_state\u003d\u003dNone. So we\u0027d have \u0027skip\u0027, \u0027force_skip\u0027 and \u0027random_skip\u0027. However, I\u0027d suggest getting more opinions before making that change!","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":352,"context_line":"            resp, cache_state \u003d self._GET_using_cache(req, info)"},{"line_number":353,"context_line":"        else:"},{"line_number":354,"context_line":"            resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":355,"context_line":"            cache_state \u003d \u0027disabled\u0027"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":358,"context_line":"        self._record_shard_listing_cache_metrics("}],"source_content_type":"text/x-python","patch_set":12,"id":"b0ea3a64_3beae3ed","line":355,"updated":"2022-12-13 12:21:43.000000000","message":"for shard_updating, disabled means \u0027no memcache\u0027, but here it has a much wider scope - all HEADs, GETs that are not for listing shards, no memcache, GETs that include deleted. Do we need a different category? Before, we just didn\u0027t emit a metric for these because they are not actually shard listing GETs - maybe that should remain the case.","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            resp, cache_state \u003d self._GET_using_cache(req, info)"},{"line_number":353,"context_line":"        else:"},{"line_number":354,"context_line":"            resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":355,"context_line":"            cache_state \u003d \u0027disabled\u0027"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":358,"context_line":"        self._record_shard_listing_cache_metrics("}],"source_content_type":"text/x-python","patch_set":12,"id":"773f8b8d_853fd1d6","line":355,"in_reply_to":"b0ea3a64_3beae3ed","updated":"2023-01-13 19:05:06.000000000","message":"Ack","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":355,"context_line":"            cache_state \u003d \u0027disabled\u0027"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":358,"context_line":"        self._record_shard_listing_cache_metrics("},{"line_number":359,"context_line":"            cache_state, resp, resp_record_type, info)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        if all((req.method \u003d\u003d \"GET\", record_type \u003d\u003d \u0027auto\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ad7685de_04a93e83","line":358,"updated":"2022-12-13 12:21:43.000000000","message":"before this was conditional on may_get_listing_shards, but now we emit a disabled metric for the cases when may_get_listing_shards\u003d\u003dFalse","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            cache_state \u003d \u0027disabled\u0027"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":358,"context_line":"        self._record_shard_listing_cache_metrics("},{"line_number":359,"context_line":"            cache_state, resp, resp_record_type, info)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        if all((req.method \u003d\u003d \"GET\", record_type \u003d\u003d \u0027auto\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"f0e0aa71_a9fa69e0","line":358,"in_reply_to":"ad7685de_04a93e83","updated":"2023-01-13 19:05:06.000000000","message":"fixed.","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b5f2820fb1c0d89a864f9831229ea912bf073c2","unresolved":true,"context_lines":[{"line_number":272,"context_line":"            should_record \u003d True"},{"line_number":273,"context_line":"        # else:"},{"line_number":274,"context_line":"        #  The request failed, but in the absence of info we cannot assume"},{"line_number":275,"context_line":"        #  the container is sharded, so we don\u0027t increment the metric."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        if should_record:"},{"line_number":278,"context_line":"            record_cache_op_metrics("}],"source_content_type":"text/x-python","patch_set":13,"id":"dea9d313_5f556f43","line":275,"updated":"2023-01-16 11:45:38.000000000","message":"+1","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"27b460cc6be0b6ff84a1f08f2bdd944489afbba2","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            should_record \u003d True"},{"line_number":273,"context_line":"        # else:"},{"line_number":274,"context_line":"        #  The request failed, but in the absence of info we cannot assume"},{"line_number":275,"context_line":"        #  the container is sharded, so we don\u0027t increment the metric."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        if should_record:"},{"line_number":278,"context_line":"            record_cache_op_metrics("}],"source_content_type":"text/x-python","patch_set":13,"id":"457691b8_b86b9866","line":275,"in_reply_to":"dea9d313_5f556f43","updated":"2023-01-17 03:47:44.000000000","message":"Ack","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b5f2820fb1c0d89a864f9831229ea912bf073c2","unresolved":true,"context_lines":[{"line_number":358,"context_line":"            resp, cache_state \u003d self._GET_using_cache(req, info)"},{"line_number":359,"context_line":"        else:"},{"line_number":360,"context_line":"            resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":361,"context_line":"            if (not self.app.recheck_listing_shard_ranges or not memcache):"},{"line_number":362,"context_line":"                cache_state \u003d \u0027disabled\u0027"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"f26c67e4_0b5e5a64","line":361,"range":{"start_line":361,"start_character":15,"end_line":361,"end_character":74},"updated":"2023-01-16 11:45:38.000000000","message":"nit: parentheses not needed","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"27b460cc6be0b6ff84a1f08f2bdd944489afbba2","unresolved":false,"context_lines":[{"line_number":358,"context_line":"            resp, cache_state \u003d self._GET_using_cache(req, info)"},{"line_number":359,"context_line":"        else:"},{"line_number":360,"context_line":"            resp \u003d self._GETorHEAD_from_backend(req)"},{"line_number":361,"context_line":"            if (not self.app.recheck_listing_shard_ranges or not memcache):"},{"line_number":362,"context_line":"                cache_state \u003d \u0027disabled\u0027"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"89051b20_3ab4cd20","line":361,"range":{"start_line":361,"start_character":15,"end_line":361,"end_character":74},"in_reply_to":"f26c67e4_0b5e5a64","updated":"2023-01-17 03:47:44.000000000","message":"Done","commit_id":"b1aa0bc894b24ccad16a24359251b0587b2228cc"}],"test/unit/proxy/controllers/test_base.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f8d8d4fad7191e56f907baef32ab350bded7d6de","unresolved":true,"context_lines":[{"line_number":557,"context_line":"        record_cache_op_metrics("},{"line_number":558,"context_line":"            self.app.logger, \u0027shard_updating\u0027, \u0027disabled\u0027, resp)"},{"line_number":559,"context_line":"        self.app.logger.increment.assert_called_once_with("},{"line_number":560,"context_line":"            \u0027shard_updating.cache.disabled.503\u0027)"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def test_get_account_info_swift_source(self):"},{"line_number":563,"context_line":"        app \u003d FakeApp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"0858afab_f3c00893","line":560,"updated":"2022-09-30 17:03:44.000000000","message":"I don\u0027t like assert_called_once_with - something about forgetting a mock reset can cause a test bug\n\nlook at get_stats_counts or get_increments","commit_id":"10c3f29fc58c8a35977e6410c721166e73cff03f"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"6df050de5e82fc2d174daf5902cb9ac032a24c2e","unresolved":false,"context_lines":[{"line_number":557,"context_line":"        record_cache_op_metrics("},{"line_number":558,"context_line":"            self.app.logger, \u0027shard_updating\u0027, \u0027disabled\u0027, resp)"},{"line_number":559,"context_line":"        self.app.logger.increment.assert_called_once_with("},{"line_number":560,"context_line":"            \u0027shard_updating.cache.disabled.503\u0027)"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def test_get_account_info_swift_source(self):"},{"line_number":563,"context_line":"        app \u003d FakeApp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"c2464e6f_8bcf3103","line":560,"in_reply_to":"0858afab_f3c00893","updated":"2022-10-03 04:40:23.000000000","message":"okay, I converted most of them, except one case I need assert_not_called.","commit_id":"10c3f29fc58c8a35977e6410c721166e73cff03f"}],"test/unit/proxy/controllers/test_container.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f8d8d4fad7191e56f907baef32ab350bded7d6de","unresolved":true,"context_lines":[{"line_number":2482,"context_line":"        self.assertEqual(b\u0027\u0027, resp.body)"},{"line_number":2483,"context_line":"        self.assertEqual(404, resp.status_int)"},{"line_number":2484,"context_line":"        self.assertEqual({\u0027container.info.cache.hit\u0027: 1,"},{"line_number":2485,"context_line":"                          \u0027container.shard_listing.cache.miss.404\u0027: 1},"},{"line_number":2486,"context_line":"                         self.logger.get_increment_counts())"},{"line_number":2487,"context_line":""},{"line_number":2488,"context_line":"    def test_GET_shard_ranges_read_from_cache_error(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"4e81f66e_e8a57f12","line":2485,"updated":"2022-09-30 17:03:44.000000000","message":"these changes all look great!  you can really see what it was - and what it will be now.  Excellent!\n\nAre ALL of the various combinations of cache_op and cache/backend.status represented here - or should I do an audit?","commit_id":"10c3f29fc58c8a35977e6410c721166e73cff03f"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"6df050de5e82fc2d174daf5902cb9ac032a24c2e","unresolved":false,"context_lines":[{"line_number":2482,"context_line":"        self.assertEqual(b\u0027\u0027, resp.body)"},{"line_number":2483,"context_line":"        self.assertEqual(404, resp.status_int)"},{"line_number":2484,"context_line":"        self.assertEqual({\u0027container.info.cache.hit\u0027: 1,"},{"line_number":2485,"context_line":"                          \u0027container.shard_listing.cache.miss.404\u0027: 1},"},{"line_number":2486,"context_line":"                         self.logger.get_increment_counts())"},{"line_number":2487,"context_line":""},{"line_number":2488,"context_line":"    def test_GET_shard_ranges_read_from_cache_error(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"f972d18c_bf737e5a","line":2485,"in_reply_to":"4e81f66e_e8a57f12","updated":"2022-10-03 04:40:23.000000000","message":"Added \"infocache.hit\", all of them are covered in test now.","commit_id":"10c3f29fc58c8a35977e6410c721166e73cff03f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":3330,"context_line":"        self.assertEqual(resp.headers.get(\u0027X-Backend-Sharding-State\u0027),"},{"line_number":3331,"context_line":"                         self.memcache.calls[1][1][1][\u0027sharding_state\u0027])"},{"line_number":3332,"context_line":"        self.assertEqual({\u0027container.info.cache.miss\u0027: 1,"},{"line_number":3333,"context_line":"                          \u0027container.shard_listing.cache.miss.200\u0027: 1},"},{"line_number":3334,"context_line":"                         self.logger.get_increment_counts())"},{"line_number":3335,"context_line":"        self.memcache.delete_all()"},{"line_number":3336,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"98fac6d2_f300cb72","line":3333,"updated":"2022-12-13 12:21:43.000000000","message":"I didn\u0027t see any assertions for \u0027disabled\u0027","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":3330,"context_line":"        self.assertEqual(resp.headers.get(\u0027X-Backend-Sharding-State\u0027),"},{"line_number":3331,"context_line":"                         self.memcache.calls[1][1][1][\u0027sharding_state\u0027])"},{"line_number":3332,"context_line":"        self.assertEqual({\u0027container.info.cache.miss\u0027: 1,"},{"line_number":3333,"context_line":"                          \u0027container.shard_listing.cache.miss.200\u0027: 1},"},{"line_number":3334,"context_line":"                         self.logger.get_increment_counts())"},{"line_number":3335,"context_line":"        self.memcache.delete_all()"},{"line_number":3336,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"a0b19479_64fcc933","line":3333,"in_reply_to":"98fac6d2_f300cb72","updated":"2023-01-13 19:05:06.000000000","message":"Done","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a0a44d1fa27c442940fc7f278432b8477496b033","unresolved":false,"context_lines":[{"line_number":2619,"context_line":"        self.assertEqual("},{"line_number":2620,"context_line":"            [x[0][0] for x in self.logger.logger.log_dict[\u0027increment\u0027]],"},{"line_number":2621,"context_line":"            [\u0027container.info.cache.miss\u0027,"},{"line_number":2622,"context_line":"             \u0027container.shard_listing.cache.bypass.200\u0027])"},{"line_number":2623,"context_line":""},{"line_number":2624,"context_line":"        # container is sharded and proxy has that state cached, but"},{"line_number":2625,"context_line":"        # no shard ranges cached; expect a cache miss and write-back"}],"source_content_type":"text/x-python","patch_set":16,"id":"988189ca_299bf758","line":2622,"updated":"2023-01-18 10:26:33.000000000","message":"ok. this test is illustrating the distinction between bypass and miss.\n\nHere we have \"container is sharded but proxy does not have that state cached\"...","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a0a44d1fa27c442940fc7f278432b8477496b033","unresolved":false,"context_lines":[{"line_number":2657,"context_line":"        self.assertEqual("},{"line_number":2658,"context_line":"            [x[0][0] for x in self.logger.logger.log_dict[\u0027increment\u0027]],"},{"line_number":2659,"context_line":"            [\u0027container.info.cache.hit\u0027,"},{"line_number":2660,"context_line":"             \u0027container.shard_listing.cache.miss.200\u0027])"},{"line_number":2661,"context_line":""},{"line_number":2662,"context_line":"        # container is sharded and proxy does have that state cached and"},{"line_number":2663,"context_line":"        # also has shard ranges cached; expect a read from cache"}],"source_content_type":"text/x-python","patch_set":16,"id":"171f1472_e7f28b47","line":2660,"updated":"2023-01-18 10:26:33.000000000","message":"...here we have \"container is sharded and proxy has that state cached, but no shard ranges cached\"","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a0a44d1fa27c442940fc7f278432b8477496b033","unresolved":false,"context_lines":[{"line_number":2681,"context_line":"        self.assertEqual("},{"line_number":2682,"context_line":"            [x[0][0] for x in self.logger.logger.log_dict[\u0027increment\u0027]],"},{"line_number":2683,"context_line":"            [\u0027container.info.cache.hit\u0027,"},{"line_number":2684,"context_line":"             \u0027container.shard_listing.cache.hit\u0027])"},{"line_number":2685,"context_line":""},{"line_number":2686,"context_line":"        # if there\u0027s a chance to skip cache, maybe we go to disk again..."},{"line_number":2687,"context_line":"        self.memcache.clear_calls()"}],"source_content_type":"text/x-python","patch_set":16,"id":"081ab959_0fafc0c0","line":2684,"updated":"2023-01-18 10:26:33.000000000","message":"...and now we get a hit","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a0a44d1fa27c442940fc7f278432b8477496b033","unresolved":false,"context_lines":[{"line_number":2750,"context_line":"        req \u003d self._build_request("},{"line_number":2751,"context_line":"            {\u0027X-Backend-Record-Type\u0027: record_type},"},{"line_number":2752,"context_line":"            {\u0027states\u0027: \u0027listing\u0027},"},{"line_number":2753,"context_line":"            infocache\u003dreq.environ[\u0027swift.infocache\u0027])"},{"line_number":2754,"context_line":"        with mock.patch(\u0027random.random\u0027, return_value\u003d0.11):"},{"line_number":2755,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":2756,"context_line":"        self._check_response(resp, self.sr_dicts, {"}],"source_content_type":"text/x-python","patch_set":16,"id":"4fbd07bf_bfa3c4c9","line":2753,"range":{"start_line":2753,"start_character":12,"end_line":2753,"end_character":52},"updated":"2023-01-18 10:26:33.000000000","message":"ok, we\u0027re copying the previous request\u0027s infocache into this request so that it is pre-warmed with shard ranges","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4186bdafb080bb57b5d8340facc50c009d536783","unresolved":true,"context_lines":[{"line_number":4373,"context_line":"            stats \u003d self.app.logger.get_increment_counts()"},{"line_number":4374,"context_line":"            self.assertEqual({\u0027account.info.cache.miss\u0027: 1,"},{"line_number":4375,"context_line":"                              \u0027container.info.cache.miss\u0027: 1,"},{"line_number":4376,"context_line":"                              \u0027container.shard_listing.cache.disabled.200\u0027: 1,"},{"line_number":4377,"context_line":"                              \u0027object.shard_updating.cache.hit\u0027: 1}, stats)"},{"line_number":4378,"context_line":"            # verify statsd prefix is not mutated"},{"line_number":4379,"context_line":"            self.assertEqual([], self.app.logger.log_dict[\u0027set_statsd_prefix\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"88ea92c4_5e435cb2","line":4376,"updated":"2022-12-13 12:21:43.000000000","message":"here\u0027s an example where the \u0027disabled\u0027 could be confusing??","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"908f0d850c9ea77e9ad4cedc0bd9b2fe0a9753e0","unresolved":false,"context_lines":[{"line_number":4373,"context_line":"            stats \u003d self.app.logger.get_increment_counts()"},{"line_number":4374,"context_line":"            self.assertEqual({\u0027account.info.cache.miss\u0027: 1,"},{"line_number":4375,"context_line":"                              \u0027container.info.cache.miss\u0027: 1,"},{"line_number":4376,"context_line":"                              \u0027container.shard_listing.cache.disabled.200\u0027: 1,"},{"line_number":4377,"context_line":"                              \u0027object.shard_updating.cache.hit\u0027: 1}, stats)"},{"line_number":4378,"context_line":"            # verify statsd prefix is not mutated"},{"line_number":4379,"context_line":"            self.assertEqual([], self.app.logger.log_dict[\u0027set_statsd_prefix\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"23d8307e_63070538","line":4376,"in_reply_to":"88ea92c4_5e435cb2","updated":"2023-01-13 19:05:06.000000000","message":"fixed.","commit_id":"83348f1bed916545ca14e8a65ea46866bfb1caba"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"14c1a57985d8130a19b970c672a1aac8b8863042","unresolved":true,"context_lines":[{"line_number":4207,"context_line":"            self.assertEqual(resp.status_int, 202)"},{"line_number":4208,"context_line":"            stats \u003d self.app.logger.get_increment_counts()"},{"line_number":4209,"context_line":"            self.assertEqual("},{"line_number":4210,"context_line":"                {\u0027container.shard_listing.cache.disabled.200\u0027: 2,"},{"line_number":4211,"context_line":"                 \u0027object.shard_updating.cache.disabled.200\u0027: 1},"},{"line_number":4212,"context_line":"                stats)"},{"line_number":4213,"context_line":"            backend_requests \u003d fake_conn.requests"}],"source_content_type":"text/x-python","patch_set":16,"id":"13bea2e7_dfe5d48a","line":4210,"updated":"2023-01-20 01:18:24.000000000","message":"I\u0027m a little confused here -- why do we have listing stats for an object POST?","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"925b17dde599eebec354f14c57d340ecd45e1771","unresolved":false,"context_lines":[{"line_number":4207,"context_line":"            self.assertEqual(resp.status_int, 202)"},{"line_number":4208,"context_line":"            stats \u003d self.app.logger.get_increment_counts()"},{"line_number":4209,"context_line":"            self.assertEqual("},{"line_number":4210,"context_line":"                {\u0027container.shard_listing.cache.disabled.200\u0027: 2,"},{"line_number":4211,"context_line":"                 \u0027object.shard_updating.cache.disabled.200\u0027: 1},"},{"line_number":4212,"context_line":"                stats)"},{"line_number":4213,"context_line":"            backend_requests \u003d fake_conn.requests"}],"source_content_type":"text/x-python","patch_set":16,"id":"f818c321_2bdac072","line":4210,"in_reply_to":"13bea2e7_dfe5d48a","updated":"2023-01-20 16:38:04.000000000","message":"oh, good eye! it emits a wrong metric where it shouldn\u0027t. I assumed the function I modified to emit listing shard range metrics is only used for listing, while that\u0027s not correct. thanks!","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"14c1a57985d8130a19b970c672a1aac8b8863042","unresolved":true,"context_lines":[{"line_number":4496,"context_line":"            # verify request hitted infocache."},{"line_number":4497,"context_line":"            self.assertEqual(resp.status_int, 202)"},{"line_number":4498,"context_line":"            stats \u003d self.app.logger.get_increment_counts()"},{"line_number":4499,"context_line":"            self.assertEqual({\u0027container.shard_listing.cache.disabled.200\u0027: 1,"},{"line_number":4500,"context_line":"                              \u0027object.shard_updating.infocache.hit\u0027: 1}, stats)"},{"line_number":4501,"context_line":"            # verify statsd prefix is not mutated"},{"line_number":4502,"context_line":"            self.assertEqual([], self.app.logger.log_dict[\u0027set_statsd_prefix\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"a5d6b051_9a23432e","line":4499,"updated":"2023-01-20 01:18:24.000000000","message":"Similarly: where\u0027d this listing stat come from?","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"925b17dde599eebec354f14c57d340ecd45e1771","unresolved":false,"context_lines":[{"line_number":4496,"context_line":"            # verify request hitted infocache."},{"line_number":4497,"context_line":"            self.assertEqual(resp.status_int, 202)"},{"line_number":4498,"context_line":"            stats \u003d self.app.logger.get_increment_counts()"},{"line_number":4499,"context_line":"            self.assertEqual({\u0027container.shard_listing.cache.disabled.200\u0027: 1,"},{"line_number":4500,"context_line":"                              \u0027object.shard_updating.infocache.hit\u0027: 1}, stats)"},{"line_number":4501,"context_line":"            # verify statsd prefix is not mutated"},{"line_number":4502,"context_line":"            self.assertEqual([], self.app.logger.log_dict[\u0027set_statsd_prefix\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"b46f7ae4_ffea9637","line":4499,"in_reply_to":"a5d6b051_9a23432e","updated":"2023-01-20 16:38:04.000000000","message":"fixed.","commit_id":"f1679b59616e018145caf0b0c9cbdb3af0feaa66"}]}
