)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"204dd388a78f7a0508dea06976e1a45e928f9203","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"866b4001_8ff5ea91","updated":"2025-11-04 16:46:06.000000000","message":"Two new labeled metrics are added in the correct location, nice job! ``-1`` because the new recon stat need go to a different patch, and we need some basic test cases to assert value of new metrics/labels.","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"3555373bc9fbf21d3f55de5f30dad2c314d495b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"086cde57_c8723370","updated":"2025-11-03 21:06:09.000000000","message":"recheck","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"bf2c2457a96933fc08950a39f247d937edfb2b82","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7fc381a4_3bdffba4","updated":"2025-11-03 19:14:53.000000000","message":"recheck","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"fbd1632653a6aed491f7503531b8e3705a7e3ca4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"9146f588_b704b15a","updated":"2025-11-13 17:10:17.000000000","message":"lgtm","commit_id":"b12992aef2191ac43d92452f67eaaf24f12ccb0d"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"54e9766154a84bf703806f1fd8bd10ef2719693a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"72e6d0e2_996b1acf","updated":"2025-11-27 00:16:01.000000000","message":"recheck","commit_id":"8f293955b1242ebd3f1c17bd3472a6b4923f3d48"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"01a10f6460e90100c1d6e34d471c168c555855cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"1b98694c_8bdeb60b","updated":"2025-12-04 21:01:28.000000000","message":"this patch introduced two new labeled metrics to sharder, for the existing statsd metrics, there will be follow-up patches to convert them to be labeled metrics as well.","commit_id":"d228a732397ac8278a33fcd5bacae46b37f701c5"}],"swift/container/sharder.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"204dd388a78f7a0508dea06976e1a45e928f9203","unresolved":true,"context_lines":[{"line_number":2203,"context_line":"        if cleaving_context.ranges_done \u003d\u003d 0 and own_shard_range:"},{"line_number":2204,"context_line":"            self.statsd.timing("},{"line_number":2205,"context_line":"                \u0027sharder.sharding.time_to_first_cleave\u0027,"},{"line_number":2206,"context_line":"                time.time() - float(own_shard_range.epoch), labels\u003d{"},{"line_number":2207,"context_line":"                    \u0027ranges_todo\u0027: cleaving_context.ranges_todo})"},{"line_number":2208,"context_line":""},{"line_number":2209,"context_line":"        ranges_done \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"fe3a3cbc_ce217f37","line":2206,"updated":"2025-11-04 16:46:06.000000000","message":"labels of ``account`` name and ``container`` name will be good to have as well","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"471a0ea08c33cbd970d733388684e3ba51509078","unresolved":false,"context_lines":[{"line_number":2203,"context_line":"        if cleaving_context.ranges_done \u003d\u003d 0 and own_shard_range:"},{"line_number":2204,"context_line":"            self.statsd.timing("},{"line_number":2205,"context_line":"                \u0027sharder.sharding.time_to_first_cleave\u0027,"},{"line_number":2206,"context_line":"                time.time() - float(own_shard_range.epoch), labels\u003d{"},{"line_number":2207,"context_line":"                    \u0027ranges_todo\u0027: cleaving_context.ranges_todo})"},{"line_number":2208,"context_line":""},{"line_number":2209,"context_line":"        ranges_done \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"776e48e8_6da9977d","line":2206,"in_reply_to":"fe3a3cbc_ce217f37","updated":"2025-11-04 18:29:18.000000000","message":"Done","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"204dd388a78f7a0508dea06976e1a45e928f9203","unresolved":true,"context_lines":[{"line_number":2216,"context_line":"                break"},{"line_number":2217,"context_line":""},{"line_number":2218,"context_line":"            if len(ranges_done) \u003d\u003d self.cleave_batch_size:"},{"line_number":2219,"context_line":"                self._increment_stat(\u0027cleaved\u0027, \u0027hit_cleave_batch_size\u0027,"},{"line_number":2220,"context_line":"                                     statsd\u003dTrue)"},{"line_number":2221,"context_line":"                break"},{"line_number":2222,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5358943b_8a31da6a","line":2219,"updated":"2025-11-04 16:46:06.000000000","message":"I am not sure what does new recon metric do. ``hit_cleave_batch_size`` should be one per each sharding container?\n\nalso, if we need it, this should go to patch: 962305: Enhances sharding_in_progress metrics in recon log | https://review.opendev.org/c/openstack/swift/+/962305","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"471a0ea08c33cbd970d733388684e3ba51509078","unresolved":false,"context_lines":[{"line_number":2216,"context_line":"                break"},{"line_number":2217,"context_line":""},{"line_number":2218,"context_line":"            if len(ranges_done) \u003d\u003d self.cleave_batch_size:"},{"line_number":2219,"context_line":"                self._increment_stat(\u0027cleaved\u0027, \u0027hit_cleave_batch_size\u0027,"},{"line_number":2220,"context_line":"                                     statsd\u003dTrue)"},{"line_number":2221,"context_line":"                break"},{"line_number":2222,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"afbcb35c_e92297aa","line":2219,"in_reply_to":"5358943b_8a31da6a","updated":"2025-11-04 18:29:18.000000000","message":"Acknowledged, removed to get added in a different patch","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"204dd388a78f7a0508dea06976e1a45e928f9203","unresolved":true,"context_lines":[{"line_number":2253,"context_line":"        if (cleaving_context.cleaving_done):"},{"line_number":2254,"context_line":"            self.statsd.timing("},{"line_number":2255,"context_line":"                \u0027sharder.sharding.time_to_last_cleave\u0027,"},{"line_number":2256,"context_line":"                time.time() - float(own_shard_range.epoch), labels\u003d{"},{"line_number":2257,"context_line":"                    \u0027ranges_done\u0027: cleaving_context.ranges_done})"},{"line_number":2258,"context_line":""},{"line_number":2259,"context_line":"        return (cleaving_context.misplaced_done and"}],"source_content_type":"text/x-python","patch_set":10,"id":"41e1282b_36b5bdf3","line":2256,"updated":"2025-11-04 16:46:06.000000000","message":"also labels of ``account`` name and ``container`` name","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"471a0ea08c33cbd970d733388684e3ba51509078","unresolved":false,"context_lines":[{"line_number":2253,"context_line":"        if (cleaving_context.cleaving_done):"},{"line_number":2254,"context_line":"            self.statsd.timing("},{"line_number":2255,"context_line":"                \u0027sharder.sharding.time_to_last_cleave\u0027,"},{"line_number":2256,"context_line":"                time.time() - float(own_shard_range.epoch), labels\u003d{"},{"line_number":2257,"context_line":"                    \u0027ranges_done\u0027: cleaving_context.ranges_done})"},{"line_number":2258,"context_line":""},{"line_number":2259,"context_line":"        return (cleaving_context.misplaced_done and"}],"source_content_type":"text/x-python","patch_set":10,"id":"15da6ff6_a529a9af","line":2256,"in_reply_to":"41e1282b_36b5bdf3","updated":"2025-11-04 18:29:18.000000000","message":"Done","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"66c64eb38d2bbba446cc25c65c0bb34a8d76f425","unresolved":true,"context_lines":[{"line_number":2200,"context_line":"            self.db_logger.warning(broker, \u0027Failed to get own_shard_range\u0027)"},{"line_number":2201,"context_line":"            ranges_todo \u003d []  # skip cleaving"},{"line_number":2202,"context_line":""},{"line_number":2203,"context_line":"        if cleaving_context.ranges_done \u003d\u003d 0 and own_shard_range:"},{"line_number":2204,"context_line":"            self.statsd.timing("},{"line_number":2205,"context_line":"                \u0027sharder.sharding.time_to_first_cleave\u0027,"},{"line_number":2206,"context_line":"                time.time() - float(own_shard_range.epoch), labels\u003d{"}],"source_content_type":"text/x-python","patch_set":11,"id":"57864230_c70a658c","line":2203,"updated":"2025-11-04 18:50:19.000000000","message":"how about adding a basic label object with only account and container labels before this? then both time_to_first_cleave and time_to_last_cleave timing calls can reuse it.","commit_id":"eb9ba188c6c6af2d552c298769e072c660c0d134"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"ca234cedd8b34e52c2c1de4681b86d4cc588f932","unresolved":false,"context_lines":[{"line_number":2200,"context_line":"            self.db_logger.warning(broker, \u0027Failed to get own_shard_range\u0027)"},{"line_number":2201,"context_line":"            ranges_todo \u003d []  # skip cleaving"},{"line_number":2202,"context_line":""},{"line_number":2203,"context_line":"        if cleaving_context.ranges_done \u003d\u003d 0 and own_shard_range:"},{"line_number":2204,"context_line":"            self.statsd.timing("},{"line_number":2205,"context_line":"                \u0027sharder.sharding.time_to_first_cleave\u0027,"},{"line_number":2206,"context_line":"                time.time() - float(own_shard_range.epoch), labels\u003d{"}],"source_content_type":"text/x-python","patch_set":11,"id":"33a37a7e_b800d5f5","line":2203,"in_reply_to":"57864230_c70a658c","updated":"2025-11-04 19:02:19.000000000","message":"Good idea, added","commit_id":"eb9ba188c6c6af2d552c298769e072c660c0d134"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"60ffc13ea86d35dbf78d8600f2d847007fb799d6","unresolved":true,"context_lines":[{"line_number":2206,"context_line":"        }"},{"line_number":2207,"context_line":"        if cleaving_context.ranges_done \u003d\u003d 0 and own_shard_range:"},{"line_number":2208,"context_line":"            self.statsd.timing("},{"line_number":2209,"context_line":"                \u0027sharder.sharding.time_to_first_cleave\u0027,"},{"line_number":2210,"context_line":"                time.time() - float(own_shard_range.epoch), labels\u003d{"},{"line_number":2211,"context_line":"                    **labels,"},{"line_number":2212,"context_line":"                    \u0027ranges_todo\u0027: cleaving_context.ranges_todo})"}],"source_content_type":"text/x-python","patch_set":13,"id":"08e1525f_e4abf5dd","line":2209,"range":{"start_line":2209,"start_character":17,"end_line":2209,"end_character":55},"updated":"2025-11-06 18:25:59.000000000","message":"We were using a.b.c version for legacy metrics, we have decided to use a_b_c format for labeled metrics.\nMoreover, we need to prefix metric name with swift_\n\nswift_\u003cserver-type\u003e_\u003cservice\u003e_ - so probably swift_container_sharder_\u003cname_of_metric\u003e","commit_id":"c57e1362a5414cd05999da0f50ecf0030fef32d7"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"e82413c03d539d3cd762aa87d17463cabff49d54","unresolved":true,"context_lines":[{"line_number":2206,"context_line":"        }"},{"line_number":2207,"context_line":"        if cleaving_context.ranges_done \u003d\u003d 0 and own_shard_range:"},{"line_number":2208,"context_line":"            self.statsd.timing("},{"line_number":2209,"context_line":"                \u0027sharder.sharding.time_to_first_cleave\u0027,"},{"line_number":2210,"context_line":"                time.time() - float(own_shard_range.epoch), labels\u003d{"},{"line_number":2211,"context_line":"                    **labels,"},{"line_number":2212,"context_line":"                    \u0027ranges_todo\u0027: cleaving_context.ranges_todo})"}],"source_content_type":"text/x-python","patch_set":13,"id":"1fc1dd38_d3de192b","line":2209,"range":{"start_line":2209,"start_character":17,"end_line":2209,"end_character":55},"in_reply_to":"08e1525f_e4abf5dd","updated":"2025-11-07 00:51:23.000000000","message":"Yeah just ran into some issues verifying this on a demo node, corrected!","commit_id":"c57e1362a5414cd05999da0f50ecf0030fef32d7"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"fbd1632653a6aed491f7503531b8e3705a7e3ca4","unresolved":false,"context_lines":[{"line_number":2206,"context_line":"        }"},{"line_number":2207,"context_line":"        if cleaving_context.ranges_done \u003d\u003d 0 and own_shard_range:"},{"line_number":2208,"context_line":"            self.statsd.timing("},{"line_number":2209,"context_line":"                \u0027sharder.sharding.time_to_first_cleave\u0027,"},{"line_number":2210,"context_line":"                time.time() - float(own_shard_range.epoch), labels\u003d{"},{"line_number":2211,"context_line":"                    **labels,"},{"line_number":2212,"context_line":"                    \u0027ranges_todo\u0027: cleaving_context.ranges_todo})"}],"source_content_type":"text/x-python","patch_set":13,"id":"6b2f36f1_52fb9b0e","line":2209,"range":{"start_line":2209,"start_character":17,"end_line":2209,"end_character":55},"in_reply_to":"1fc1dd38_d3de192b","updated":"2025-11-13 17:10:17.000000000","message":"Done","commit_id":"c57e1362a5414cd05999da0f50ecf0030fef32d7"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"d6220ab473c8bb8faa8dad6b5c7ed7234eb68059","unresolved":true,"context_lines":[{"line_number":2248,"context_line":"        self.db_logger.debug("},{"line_number":2249,"context_line":"            broker, \u0027Cleaved %s shard ranges\u0027, len(ranges_done))"},{"line_number":2250,"context_line":""},{"line_number":2251,"context_line":"        if (cleaving_context.cleaving_done):"},{"line_number":2252,"context_line":"            self.statsd.timing_since("},{"line_number":2253,"context_line":"                \u0027swift_container_sharder_time_to_last_cleave\u0027,"},{"line_number":2254,"context_line":"                float(own_shard_range.epoch), labels\u003d{"}],"source_content_type":"text/x-python","patch_set":21,"id":"631c128c_c8e4bb05","line":2251,"updated":"2025-12-04 20:11:43.000000000","message":"no need to have () around single condition, just:\n ``if cleaving_context.cleaving_done:``","commit_id":"9c55330846d5be8e1903c8a806c7ff9494cba40f"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"c18b7461b9347be89c1fc9d21c7376cb950615dc","unresolved":false,"context_lines":[{"line_number":2248,"context_line":"        self.db_logger.debug("},{"line_number":2249,"context_line":"            broker, \u0027Cleaved %s shard ranges\u0027, len(ranges_done))"},{"line_number":2250,"context_line":""},{"line_number":2251,"context_line":"        if (cleaving_context.cleaving_done):"},{"line_number":2252,"context_line":"            self.statsd.timing_since("},{"line_number":2253,"context_line":"                \u0027swift_container_sharder_time_to_last_cleave\u0027,"},{"line_number":2254,"context_line":"                float(own_shard_range.epoch), labels\u003d{"}],"source_content_type":"text/x-python","patch_set":21,"id":"1ca61d54_3d92fe43","line":2251,"in_reply_to":"631c128c_c8e4bb05","updated":"2025-12-04 20:31:30.000000000","message":"Done","commit_id":"9c55330846d5be8e1903c8a806c7ff9494cba40f"}],"test/unit/container/test_sharder.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"204dd388a78f7a0508dea06976e1a45e928f9203","unresolved":true,"context_lines":[{"line_number":2610,"context_line":"        # reasons it always returned an empty defaultdict"},{"line_number":2611,"context_line":"        timing_calls \u003d self.statsd.calls[\u0027timing\u0027]"},{"line_number":2612,"context_line":"        metric_names \u003d [call[0][0] for call in timing_calls]"},{"line_number":2613,"context_line":"        self.assertIn(\u0027sharder.sharding.time_to_first_cleave\u0027, metric_names)"},{"line_number":2614,"context_line":"        self.assertIn(\u0027sharder.sharding.time_to_last_cleave\u0027, metric_names)"},{"line_number":2615,"context_line":""},{"line_number":2616,"context_line":"        for call in timing_calls:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5639a2cd_6691c41f","line":2613,"updated":"2025-11-04 16:46:06.000000000","message":"need test cases to assert that ``time_to_first_cleave`` and ``time_to_last_cleave`` are valid positive float numbers, and also those labels exist and have valid value too.","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5598afae272d7c5d7d408084402c0b443b3e77be","unresolved":false,"context_lines":[{"line_number":2610,"context_line":"        # reasons it always returned an empty defaultdict"},{"line_number":2611,"context_line":"        timing_calls \u003d self.statsd.calls[\u0027timing\u0027]"},{"line_number":2612,"context_line":"        metric_names \u003d [call[0][0] for call in timing_calls]"},{"line_number":2613,"context_line":"        self.assertIn(\u0027sharder.sharding.time_to_first_cleave\u0027, metric_names)"},{"line_number":2614,"context_line":"        self.assertIn(\u0027sharder.sharding.time_to_last_cleave\u0027, metric_names)"},{"line_number":2615,"context_line":""},{"line_number":2616,"context_line":"        for call in timing_calls:"}],"source_content_type":"text/x-python","patch_set":10,"id":"817653d2_b1c83732","line":2613,"in_reply_to":"561ae9e6_e6395e02","updated":"2025-11-04 22:10:07.000000000","message":"Done","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"b395d6e916f3550f6c49b4ecebef34ba38a6814f","unresolved":false,"context_lines":[{"line_number":2610,"context_line":"        # reasons it always returned an empty defaultdict"},{"line_number":2611,"context_line":"        timing_calls \u003d self.statsd.calls[\u0027timing\u0027]"},{"line_number":2612,"context_line":"        metric_names \u003d [call[0][0] for call in timing_calls]"},{"line_number":2613,"context_line":"        self.assertIn(\u0027sharder.sharding.time_to_first_cleave\u0027, metric_names)"},{"line_number":2614,"context_line":"        self.assertIn(\u0027sharder.sharding.time_to_last_cleave\u0027, metric_names)"},{"line_number":2615,"context_line":""},{"line_number":2616,"context_line":"        for call in timing_calls:"}],"source_content_type":"text/x-python","patch_set":10,"id":"36517049_06bfec89","line":2613,"in_reply_to":"561ae9e6_e6395e02","updated":"2025-11-04 19:26:11.000000000","message":"Modified the test to be slightly clearer WRT when we check the time_to_x metrics vs labeled values","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"66c64eb38d2bbba446cc25c65c0bb34a8d76f425","unresolved":true,"context_lines":[{"line_number":2610,"context_line":"        # reasons it always returned an empty defaultdict"},{"line_number":2611,"context_line":"        timing_calls \u003d self.statsd.calls[\u0027timing\u0027]"},{"line_number":2612,"context_line":"        metric_names \u003d [call[0][0] for call in timing_calls]"},{"line_number":2613,"context_line":"        self.assertIn(\u0027sharder.sharding.time_to_first_cleave\u0027, metric_names)"},{"line_number":2614,"context_line":"        self.assertIn(\u0027sharder.sharding.time_to_last_cleave\u0027, metric_names)"},{"line_number":2615,"context_line":""},{"line_number":2616,"context_line":"        for call in timing_calls:"}],"source_content_type":"text/x-python","patch_set":10,"id":"561ae9e6_e6395e02","line":2613,"in_reply_to":"5639a2cd_6691c41f","updated":"2025-11-04 18:50:19.000000000","message":"still needs assertions that ``time_to_first_cleave`` and ``time_to_last_cleave`` are valid positive float numbers","commit_id":"7994d0b2027fda69edca0e1db646efddc8539115"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"60ffc13ea86d35dbf78d8600f2d847007fb799d6","unresolved":true,"context_lines":[{"line_number":866,"context_line":"                         \u0027found\u0027: 0, \u0027created\u0027: 2, \u0027cleaved\u0027: 1, \u0027active\u0027: 2,"},{"line_number":867,"context_line":"                         \u0027state\u0027: \u0027sharding\u0027, \u0027db_state\u0027: \u0027unsharded\u0027,"},{"line_number":868,"context_line":"                         \u0027error\u0027: \u0027kapow!\u0027}]}"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"            self._assert_stats("},{"line_number":871,"context_line":"                expected_in_progress_stats, sharder, \u0027sharding_in_progress\u0027)"},{"line_number":872,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"04f2a8f7_82d8b600","line":869,"updated":"2025-11-06 18:25:59.000000000","message":"nit: maybe unnecessary","commit_id":"c57e1362a5414cd05999da0f50ecf0030fef32d7"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"e82413c03d539d3cd762aa87d17463cabff49d54","unresolved":false,"context_lines":[{"line_number":866,"context_line":"                         \u0027found\u0027: 0, \u0027created\u0027: 2, \u0027cleaved\u0027: 1, \u0027active\u0027: 2,"},{"line_number":867,"context_line":"                         \u0027state\u0027: \u0027sharding\u0027, \u0027db_state\u0027: \u0027unsharded\u0027,"},{"line_number":868,"context_line":"                         \u0027error\u0027: \u0027kapow!\u0027}]}"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"            self._assert_stats("},{"line_number":871,"context_line":"                expected_in_progress_stats, sharder, \u0027sharding_in_progress\u0027)"},{"line_number":872,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"2d01632e_054cd57a","line":869,"in_reply_to":"04f2a8f7_82d8b600","updated":"2025-11-07 00:51:23.000000000","message":"Acknowledged","commit_id":"c57e1362a5414cd05999da0f50ecf0030fef32d7"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"60ffc13ea86d35dbf78d8600f2d847007fb799d6","unresolved":true,"context_lines":[{"line_number":2606,"context_line":"        self.assertGreater("},{"line_number":2607,"context_line":"            self.logger.statsd_client.calls[\u0027timing_since\u0027][-1][0][1], 0)"},{"line_number":2608,"context_line":""},{"line_number":2609,"context_line":"        # tried using get_labeled_stats_counts here but for inexplicable"},{"line_number":2610,"context_line":"        # reasons it always returned an empty defaultdict"},{"line_number":2611,"context_line":"        timing_calls \u003d self.statsd.calls[\u0027timing\u0027]"},{"line_number":2612,"context_line":"        main_metrics \u003d [call[0] for call in timing_calls]"},{"line_number":2613,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"09052806_870670b6","line":2610,"range":{"start_line":2609,"start_character":8,"end_line":2610,"end_character":57},"updated":"2025-11-06 18:25:59.000000000","message":"I\u0027ll check this","commit_id":"c57e1362a5414cd05999da0f50ecf0030fef32d7"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"9a125698eb921a9488a22dae57dc7135f6d8e46c","unresolved":true,"context_lines":[{"line_number":2606,"context_line":"        self.assertGreater("},{"line_number":2607,"context_line":"            self.logger.statsd_client.calls[\u0027timing_since\u0027][-1][0][1], 0)"},{"line_number":2608,"context_line":""},{"line_number":2609,"context_line":"        # tried using get_labeled_stats_counts here but for inexplicable"},{"line_number":2610,"context_line":"        # reasons it always returned an empty defaultdict"},{"line_number":2611,"context_line":"        timing_calls \u003d self.statsd.calls[\u0027timing\u0027]"},{"line_number":2612,"context_line":"        main_metrics \u003d [call[0] for call in timing_calls]"},{"line_number":2613,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"91aec50c_a7f75a93","line":2610,"range":{"start_line":2609,"start_character":8,"end_line":2610,"end_character":57},"in_reply_to":"09052806_870670b6","updated":"2025-11-06 19:07:38.000000000","message":"Apparently, get_labeled_stats_counts is in debug_logger, which only returns counts, i.e., update_stats and increments. \nWe may be able to do it as \n1. get_labeled_stats_counts_and_timing (too much test churn)\n2. write get_labeled_stats_timing to get timings specifically\n3. leave self.statsd.calls[\u0027timing\u0027] as is.\n\nPlease suggest @alistairncoles@gmail.com @clay.gerrard@gmail.com @yanxiao@nvidia.com","commit_id":"c57e1362a5414cd05999da0f50ecf0030fef32d7"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"e82413c03d539d3cd762aa87d17463cabff49d54","unresolved":true,"context_lines":[{"line_number":2606,"context_line":"        self.assertGreater("},{"line_number":2607,"context_line":"            self.logger.statsd_client.calls[\u0027timing_since\u0027][-1][0][1], 0)"},{"line_number":2608,"context_line":""},{"line_number":2609,"context_line":"        # tried using get_labeled_stats_counts here but for inexplicable"},{"line_number":2610,"context_line":"        # reasons it always returned an empty defaultdict"},{"line_number":2611,"context_line":"        timing_calls \u003d self.statsd.calls[\u0027timing\u0027]"},{"line_number":2612,"context_line":"        main_metrics \u003d [call[0] for call in timing_calls]"},{"line_number":2613,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"723a4bba_32f9cd5d","line":2610,"range":{"start_line":2609,"start_character":8,"end_line":2610,"end_character":57},"in_reply_to":"0d4f982b_746540b7","updated":"2025-11-07 00:51:23.000000000","message":"Good idea! Me + jian + clay agreed to modify the implementation a bit to use timing_since instead so I added the helper function you mentioned but for timing_since calls","commit_id":"c57e1362a5414cd05999da0f50ecf0030fef32d7"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"fbd1632653a6aed491f7503531b8e3705a7e3ca4","unresolved":false,"context_lines":[{"line_number":2606,"context_line":"        self.assertGreater("},{"line_number":2607,"context_line":"            self.logger.statsd_client.calls[\u0027timing_since\u0027][-1][0][1], 0)"},{"line_number":2608,"context_line":""},{"line_number":2609,"context_line":"        # tried using get_labeled_stats_counts here but for inexplicable"},{"line_number":2610,"context_line":"        # reasons it always returned an empty defaultdict"},{"line_number":2611,"context_line":"        timing_calls \u003d self.statsd.calls[\u0027timing\u0027]"},{"line_number":2612,"context_line":"        main_metrics \u003d [call[0] for call in timing_calls]"},{"line_number":2613,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"f3d3754e_6a27141e","line":2610,"range":{"start_line":2609,"start_character":8,"end_line":2610,"end_character":57},"in_reply_to":"723a4bba_32f9cd5d","updated":"2025-11-13 17:10:17.000000000","message":"Done","commit_id":"c57e1362a5414cd05999da0f50ecf0030fef32d7"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"a091334ad82066aba3b6ad89a50bf2380309954e","unresolved":true,"context_lines":[{"line_number":2606,"context_line":"        self.assertGreater("},{"line_number":2607,"context_line":"            self.logger.statsd_client.calls[\u0027timing_since\u0027][-1][0][1], 0)"},{"line_number":2608,"context_line":""},{"line_number":2609,"context_line":"        # tried using get_labeled_stats_counts here but for inexplicable"},{"line_number":2610,"context_line":"        # reasons it always returned an empty defaultdict"},{"line_number":2611,"context_line":"        timing_calls \u003d self.statsd.calls[\u0027timing\u0027]"},{"line_number":2612,"context_line":"        main_metrics \u003d [call[0] for call in timing_calls]"},{"line_number":2613,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"0d4f982b_746540b7","line":2610,"range":{"start_line":2609,"start_character":8,"end_line":2610,"end_character":57},"in_reply_to":"91aec50c_a7f75a93","updated":"2025-11-06 22:23:28.000000000","message":"the get_labeled_stats_counts function aggregates the counters in update_stats calls, while for timing calls it would be not very useful to aggregate the values. For that reason it seems better to add a common helper function similar to assertLabeledTimingStats in test_proxy_logging.py if necessary","commit_id":"c57e1362a5414cd05999da0f50ecf0030fef32d7"}]}
