)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5058ea10fb03f4ab95a70ea917328ff9bf558d9b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"35666de8_a28823d1","updated":"2022-11-15 06:30:30.000000000","message":"Thanks for the review!","commit_id":"d9b280c740d0d171e297e3cd999cfa00197da779"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3e4f60352f8f7a2bc8b476f4a2192971650baabe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f2a647ad_43429807","updated":"2022-11-10 14:05:44.000000000","message":"this looks like the right diretion","commit_id":"d9b280c740d0d171e297e3cd999cfa00197da779"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5d01831aa4882b42b07b8c091508c250b88c0242","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cedb1fa1_ed89e0fa","updated":"2022-11-15 18:12:12.000000000","message":"recheck\nI think it was some random error in the pipeline.","commit_id":"d2d5d1fb757bb12c69dd0b5d0c4f5cfca44d2080"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"10e0448661b83440dabef47ada88ab98b5de9750","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"78eb3c4c_9e18bf6e","updated":"2022-11-16 16:41:56.000000000","message":"I just had a second though about this prompted by discussion on https://review.opendev.org/c/openstack/swift/+/852905 which made we wonder if there are parent-child overlaps that are not \"normal\" i.e. if a stale parent replica re-appears in the root after reclaim age. \n\nI also would like to be doubly sure we understand HOW we get \"normal\" transient overlaps i.e. which states are the overlaps for?\n\nI\u0027m concerned we could be about to mask some genuine bad cases.","commit_id":"3515141d27acad7d8244abc04323d15534079541"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"64b7fa9857d7bc0c9e7239be64c8b5d110e4bcca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"53961dc2_cd20817e","updated":"2022-11-17 11:22:14.000000000","message":"I reminded myself how the transient overlaps can occur (by reading test.probe.test_sharder.TestManagedContainerSharding.test_manage_shard_ranges_repair_parent_child_ranges):\n\n* parent shards children, and updates root with deleted parent and active children - no overlap at root. BUT assume a root replica X fails to receive that update. The root replica still has the parent as being ACTIVE.\n\n* children fetch their own shard range from root and update their state to ACTIVE.\n\n* children get modified (object rows added/deleted) so have update stats to send to root, and at same time send their own shard range to root.\n\n* root replica X does receive the update from the child, but has still not received an update from the deleted parent or replicated with peers, so it now has a stale copy of the ACTIVE parent and a copy of the ACTIVE child -\u003e overlap.\n\n* the transient overlap is automatically corrected once the replica X replicates with peers and discovers that the parent is in fact SHARDED/deleted.\n\nHowever, if the root replica X is offline for more than a reclaim age (or maybe it\u0027s 2 reclaim ages) then the other replicas will have purged their copies of the SHARDED parent and the replica X will never remove its overlapping state ACTIVE parent shard range.\n\nSo perhaps we should add a condition that parent/child overlaps are no longer ignored if the child timestamp is more than reclaim age in the past i.e. \"enough time has passed that this transient should have been corrected, so now we\u0027ll start warning\". I\u0027m just feeling very cautious about us permanently masking out what would be quite a bad situation. \n\n","commit_id":"3515141d27acad7d8244abc04323d15534079541"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"83a17ea6272e7b800c07605c5254f53f860670f0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9d019526_07b93fba","updated":"2022-11-16 16:42:33.000000000","message":"ok I think I did enough to stop this going to the gate","commit_id":"3515141d27acad7d8244abc04323d15534079541"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"d36983c6b25a089085cfec6d92b8ca10b835c52d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"0ad91800_e0e480c3","in_reply_to":"78eb3c4c_9e18bf6e","updated":"2022-11-17 06:16:03.000000000","message":"There is one \"normal\" transient overlap we created in probe test: test/probe/test_sharder.py:TestManagedContainerSharding.test_manage_shard_ranges_repair_parent_child_ranges\nThis patch should be able to avoid warning in this case.\n\nFor the case after reclaim age , maybe we can also check reclaim age when we check the overlap warning?","commit_id":"3515141d27acad7d8244abc04323d15534079541"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b59963cac06fc0f222c307af8c7998c8a90d4a18","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"0ac8d430_1f305777","updated":"2022-11-18 16:06:12.000000000","message":"I feel happier about this now having the time period. Good test coverage, I tried a few regressions and tests failed 😊\n\nGiven how much time we spend reminding ourselves *why* the sharder behaves the way it does, I\u0027m inclined to add more comment. ","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"cda33a2eb5025e84dc929fa359e2d2458f110ba8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"c60c97a0_0de71635","updated":"2022-11-18 07:19:27.000000000","message":"Thanks a lot for the review!","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"167befb4d02b6d7e16885ea7d609032298dfa2e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9ac21013_86a274e2","updated":"2022-11-19 00:03:59.000000000","message":"Thanks for the reviews!","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"}],"swift/container/sharder.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3e4f60352f8f7a2bc8b476f4a2192971650baabe","unresolved":true,"context_lines":[{"line_number":174,"context_line":"    return result"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"def find_non_parental_overlapping_ranges(shard_ranges):"},{"line_number":178,"context_line":"    \"\"\""},{"line_number":179,"context_line":"    From the given list, find and return all pairs of overlapping ranges with"},{"line_number":180,"context_line":"    no parent-child relationship."}],"source_content_type":"text/x-python","patch_set":3,"id":"ed9625d2_ed9fd0be","line":177,"updated":"2022-11-10 14:05:44.000000000","message":"could we just parameterise find_overlapping_ranges?\n\n  find_overlapping_ranges(shard_ranges, exclude_parent_child\u003dFalse)\n  \nor\n\n  find_overlapping_ranges(shard_ranges, exclude_parent_child\u003dFalse)","commit_id":"d9b280c740d0d171e297e3cd999cfa00197da779"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5058ea10fb03f4ab95a70ea917328ff9bf558d9b","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    return result"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"def find_non_parental_overlapping_ranges(shard_ranges):"},{"line_number":178,"context_line":"    \"\"\""},{"line_number":179,"context_line":"    From the given list, find and return all pairs of overlapping ranges with"},{"line_number":180,"context_line":"    no parent-child relationship."}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa3ab79_dd333fd4","line":177,"in_reply_to":"ed9625d2_ed9fd0be","updated":"2022-11-15 06:30:30.000000000","message":"Done","commit_id":"d9b280c740d0d171e297e3cd999cfa00197da779"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3e4f60352f8f7a2bc8b476f4a2192971650baabe","unresolved":true,"context_lines":[{"line_number":188,"context_line":"        overlapping \u003d ["},{"line_number":189,"context_line":"            sr for sr in shard_ranges[i + 1:]"},{"line_number":190,"context_line":"            if shard_range.name !\u003d sr.name and shard_range.overlaps(sr) and"},{"line_number":191,"context_line":"            not sr.is_child_of(shard_range) and"},{"line_number":192,"context_line":"            not shard_range.is_child_of(sr)]"},{"line_number":193,"context_line":"        if overlapping:"},{"line_number":194,"context_line":"            overlapping.append(shard_range)"},{"line_number":195,"context_line":"            overlapping.sort(key\u003dShardRange.sort_key)"}],"source_content_type":"text/x-python","patch_set":3,"id":"6e46f98c_8b137459","line":192,"range":{"start_line":191,"start_character":16,"end_line":192,"end_character":44},"updated":"2022-11-10 14:05:44.000000000","message":"maybe a helper method:\n\n  ShardRange.is_parent_child(self, other):\n      return self.is_child_of(other) or other.is_child_of(self)","commit_id":"d9b280c740d0d171e297e3cd999cfa00197da779"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5058ea10fb03f4ab95a70ea917328ff9bf558d9b","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        overlapping \u003d ["},{"line_number":189,"context_line":"            sr for sr in shard_ranges[i + 1:]"},{"line_number":190,"context_line":"            if shard_range.name !\u003d sr.name and shard_range.overlaps(sr) and"},{"line_number":191,"context_line":"            not sr.is_child_of(shard_range) and"},{"line_number":192,"context_line":"            not shard_range.is_child_of(sr)]"},{"line_number":193,"context_line":"        if overlapping:"},{"line_number":194,"context_line":"            overlapping.append(shard_range)"},{"line_number":195,"context_line":"            overlapping.sort(key\u003dShardRange.sort_key)"}],"source_content_type":"text/x-python","patch_set":3,"id":"6f30584a_b619bc00","line":192,"range":{"start_line":191,"start_character":16,"end_line":192,"end_character":44},"in_reply_to":"6e46f98c_8b137459","updated":"2022-11-15 06:30:30.000000000","message":"Done","commit_id":"d9b280c740d0d171e297e3cd999cfa00197da779"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3e4f60352f8f7a2bc8b476f4a2192971650baabe","unresolved":true,"context_lines":[{"line_number":1199,"context_line":"                # allow multiple shards in that state"},{"line_number":1200,"context_line":"                continue"},{"line_number":1201,"context_line":"            shard_ranges \u003d broker.get_shard_ranges(states\u003dstate)"},{"line_number":1202,"context_line":"            overlaps \u003d find_non_parental_overlapping_ranges(shard_ranges)"},{"line_number":1203,"context_line":"            if overlaps:"},{"line_number":1204,"context_line":"                self._increment_stat(\u0027audit_root\u0027, \u0027has_overlap\u0027)"},{"line_number":1205,"context_line":"                self._update_stat(\u0027audit_root\u0027, \u0027num_overlap\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"79124637_4d54f26a","line":1202,"updated":"2022-11-10 14:05:44.000000000","message":"NB: in audit we only look for overlaps between shards in the same state - worth bearing in mind when looking at unit tests","commit_id":"d9b280c740d0d171e297e3cd999cfa00197da779"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"5058ea10fb03f4ab95a70ea917328ff9bf558d9b","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"                # allow multiple shards in that state"},{"line_number":1200,"context_line":"                continue"},{"line_number":1201,"context_line":"            shard_ranges \u003d broker.get_shard_ranges(states\u003dstate)"},{"line_number":1202,"context_line":"            overlaps \u003d find_non_parental_overlapping_ranges(shard_ranges)"},{"line_number":1203,"context_line":"            if overlaps:"},{"line_number":1204,"context_line":"                self._increment_stat(\u0027audit_root\u0027, \u0027has_overlap\u0027)"},{"line_number":1205,"context_line":"                self._update_stat(\u0027audit_root\u0027, \u0027num_overlap\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"14b8eb52_289bd634","line":1202,"in_reply_to":"79124637_4d54f26a","updated":"2022-11-15 06:30:30.000000000","message":"Ack","commit_id":"d9b280c740d0d171e297e3cd999cfa00197da779"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ade5a7edcb62f1cd3401dede7250f6d8236ffe1a","unresolved":true,"context_lines":[{"line_number":157,"context_line":"    \"\"\""},{"line_number":158,"context_line":"    Find all pairs of overlapping ranges in the given list."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    :param shard_ranges: A list of :class:`~swift.utils.ShardRange`"},{"line_number":161,"context_line":"    :return: a set of tuples, each tuple containing ranges that overlap with"},{"line_number":162,"context_line":"        each other."},{"line_number":163,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"8aeae895_f1550336","line":160,"updated":"2022-11-16 13:33:53.000000000","message":"add new param to docstring","commit_id":"6191fd3ec4e4fc0d4aaa3241b8c20e2afa8b3194"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"cda33a2eb5025e84dc929fa359e2d2458f110ba8","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    \"\"\""},{"line_number":158,"context_line":"    Find all pairs of overlapping ranges in the given list."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    :param shard_ranges: A list of :class:`~swift.utils.ShardRange`"},{"line_number":161,"context_line":"    :return: a set of tuples, each tuple containing ranges that overlap with"},{"line_number":162,"context_line":"        each other."},{"line_number":163,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a6d41d8_953fb763","line":160,"in_reply_to":"8aeae895_f1550336","updated":"2022-11-18 07:19:27.000000000","message":"Done","commit_id":"6191fd3ec4e4fc0d4aaa3241b8c20e2afa8b3194"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b59963cac06fc0f222c307af8c7998c8a90d4a18","unresolved":true,"context_lines":[{"line_number":161,"context_line":"def _is_parent_or_child(shard_range, other, time_period):"},{"line_number":162,"context_line":"    \"\"\""},{"line_number":163,"context_line":"    Test if shard range ``shard_range`` is the parent or a child of another"},{"line_number":164,"context_line":"    shard range ``other`` within past time period ``period``. This method"},{"line_number":165,"context_line":"    is limited to work only within the scope of the same user-facing account"},{"line_number":166,"context_line":"    (with and without shard prefix)."},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"37d45a7a_a0b71189","line":164,"range":{"start_line":164,"start_character":52,"end_line":164,"end_character":58},"updated":"2022-11-18 16:06:12.000000000","message":"nit: ``time_period``","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"167befb4d02b6d7e16885ea7d609032298dfa2e0","unresolved":false,"context_lines":[{"line_number":161,"context_line":"def _is_parent_or_child(shard_range, other, time_period):"},{"line_number":162,"context_line":"    \"\"\""},{"line_number":163,"context_line":"    Test if shard range ``shard_range`` is the parent or a child of another"},{"line_number":164,"context_line":"    shard range ``other`` within past time period ``period``. This method"},{"line_number":165,"context_line":"    is limited to work only within the scope of the same user-facing account"},{"line_number":166,"context_line":"    (with and without shard prefix)."},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"0cdafc70_b0c2fbf2","line":164,"range":{"start_line":164,"start_character":52,"end_line":164,"end_character":58},"in_reply_to":"37d45a7a_a0b71189","updated":"2022-11-19 00:03:59.000000000","message":"Done","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b59963cac06fc0f222c307af8c7998c8a90d4a18","unresolved":true,"context_lines":[{"line_number":174,"context_line":"         the same account."},{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":"    exclude_age \u003d (time.time() - float(time_period)) if time_period \u003e 0 else 0"},{"line_number":177,"context_line":"    if shard_range.is_child_of(other) and shard_range.timestamp \u003e\u003d exclude_age:"},{"line_number":178,"context_line":"        return True"},{"line_number":179,"context_line":"    if other.is_child_of(shard_range) and other.timestamp \u003e\u003d exclude_age:"},{"line_number":180,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":9,"id":"48f0fd6b_3a7aba0d","line":177,"updated":"2022-11-18 16:06:12.000000000","message":"ok. the shard range timestamp will change when the shard is deleted, but deleted shard ranges are not included in the search for overlapping shards, so this is ok: for an undeleted shard the timestamp will be the time at which the shard range was created, i.e approximately when the parent sharded.","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"167befb4d02b6d7e16885ea7d609032298dfa2e0","unresolved":false,"context_lines":[{"line_number":174,"context_line":"         the same account."},{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":"    exclude_age \u003d (time.time() - float(time_period)) if time_period \u003e 0 else 0"},{"line_number":177,"context_line":"    if shard_range.is_child_of(other) and shard_range.timestamp \u003e\u003d exclude_age:"},{"line_number":178,"context_line":"        return True"},{"line_number":179,"context_line":"    if other.is_child_of(shard_range) and other.timestamp \u003e\u003d exclude_age:"},{"line_number":180,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":9,"id":"0222239e_5f1dd81a","line":177,"in_reply_to":"48f0fd6b_3a7aba0d","updated":"2022-11-19 00:03:59.000000000","message":"Ack","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b59963cac06fc0f222c307af8c7998c8a90d4a18","unresolved":true,"context_lines":[{"line_number":1237,"context_line":"            shard_ranges \u003d broker.get_shard_ranges(states\u003dstate)"},{"line_number":1238,"context_line":"            # Set \u0027exclude_parent_child\u0027 True here to avoid transient"},{"line_number":1239,"context_line":"            # parent-child overlaps during past time peroid of reclaim_age to"},{"line_number":1240,"context_line":"            # show up in the warning logs."},{"line_number":1241,"context_line":"            overlaps \u003d find_overlapping_ranges("},{"line_number":1242,"context_line":"                shard_ranges, exclude_parent_child\u003dTrue,"},{"line_number":1243,"context_line":"                time_period\u003dself.reclaim_age)"}],"source_content_type":"text/x-python","patch_set":9,"id":"8efc0ff6_b487225a","line":1240,"updated":"2022-11-18 16:06:12.000000000","message":"I think it will be worth also noting why we do want to report the overlaps after reclaim_age has passed:\n\n  # Transient overlaps can occur during the period immediately after\n  # sharding if a root learns about new child shards before it learns\n  # that the parent has sharded. These overlaps are normally corrected as \n  # an up-to-date version of the parent shard range is replicated to the\n  # root. Parent-child overlaps are therefore ignored for a\n  # reclaim age after the child was created. After that, parent-child\n  # overlaps may indicate that there is permanently stale parent shard\n  # range data, perhaps from a node that has been offline, so these are\n  # reported.","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"167befb4d02b6d7e16885ea7d609032298dfa2e0","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"            shard_ranges \u003d broker.get_shard_ranges(states\u003dstate)"},{"line_number":1238,"context_line":"            # Set \u0027exclude_parent_child\u0027 True here to avoid transient"},{"line_number":1239,"context_line":"            # parent-child overlaps during past time peroid of reclaim_age to"},{"line_number":1240,"context_line":"            # show up in the warning logs."},{"line_number":1241,"context_line":"            overlaps \u003d find_overlapping_ranges("},{"line_number":1242,"context_line":"                shard_ranges, exclude_parent_child\u003dTrue,"},{"line_number":1243,"context_line":"                time_period\u003dself.reclaim_age)"}],"source_content_type":"text/x-python","patch_set":9,"id":"40383cfa_fe85323b","line":1240,"in_reply_to":"8efc0ff6_b487225a","updated":"2022-11-19 00:03:59.000000000","message":"Done","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ade5a7edcb62f1cd3401dede7250f6d8236ffe1a","unresolved":true,"context_lines":[{"line_number":5768,"context_line":"    \"\"\""},{"line_number":5769,"context_line":"    Like range(limit), but with extra context switching to screw things up."},{"line_number":5770,"context_line":"    \"\"\""},{"line_number":5771,"context_line":""},{"line_number":5772,"context_line":"    def __init__(self, upper_bound):"},{"line_number":5773,"context_line":"        self.current \u003d 0"},{"line_number":5774,"context_line":"        self.concurrent_calls \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"815ba9a8_b5ffdc27","line":5771,"updated":"2022-11-16 13:33:53.000000000","message":"nit: unrelated whitespace change","commit_id":"d2d5d1fb757bb12c69dd0b5d0c4f5cfca44d2080"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"cda33a2eb5025e84dc929fa359e2d2458f110ba8","unresolved":false,"context_lines":[{"line_number":5768,"context_line":"    \"\"\""},{"line_number":5769,"context_line":"    Like range(limit), but with extra context switching to screw things up."},{"line_number":5770,"context_line":"    \"\"\""},{"line_number":5771,"context_line":""},{"line_number":5772,"context_line":"    def __init__(self, upper_bound):"},{"line_number":5773,"context_line":"        self.current \u003d 0"},{"line_number":5774,"context_line":"        self.concurrent_calls \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"72881038_bf190862","line":5771,"in_reply_to":"815ba9a8_b5ffdc27","updated":"2022-11-18 07:19:27.000000000","message":"Done","commit_id":"d2d5d1fb757bb12c69dd0b5d0c4f5cfca44d2080"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b59963cac06fc0f222c307af8c7998c8a90d4a18","unresolved":true,"context_lines":[{"line_number":5768,"context_line":"    \"\"\""},{"line_number":5769,"context_line":"    Like range(limit), but with extra context switching to screw things up."},{"line_number":5770,"context_line":"    \"\"\""},{"line_number":5771,"context_line":""},{"line_number":5772,"context_line":"    def __init__(self, upper_bound):"},{"line_number":5773,"context_line":"        self.current \u003d 0"},{"line_number":5774,"context_line":"        self.concurrent_calls \u003d 0"}],"source_content_type":"text/x-python","patch_set":9,"id":"fef3d3bc_908fa870","line":5771,"updated":"2022-11-18 16:06:12.000000000","message":"unrelated change","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"167befb4d02b6d7e16885ea7d609032298dfa2e0","unresolved":false,"context_lines":[{"line_number":5768,"context_line":"    \"\"\""},{"line_number":5769,"context_line":"    Like range(limit), but with extra context switching to screw things up."},{"line_number":5770,"context_line":"    \"\"\""},{"line_number":5771,"context_line":""},{"line_number":5772,"context_line":"    def __init__(self, upper_bound):"},{"line_number":5773,"context_line":"        self.current \u003d 0"},{"line_number":5774,"context_line":"        self.concurrent_calls \u003d 0"}],"source_content_type":"text/x-python","patch_set":9,"id":"ad0c1638_e81ed552","line":5771,"in_reply_to":"fef3d3bc_908fa870","updated":"2022-11-19 00:03:59.000000000","message":"Thanks for pointing it out. I have to fix my VS code plugin, it randomly insert this kind of blank line. :-(","commit_id":"a1989b075a3502cba6856e3f53a757368f1f15c1"}],"test/unit/container/test_sharder.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ade5a7edcb62f1cd3401dede7250f6d8236ffe1a","unresolved":true,"context_lines":[{"line_number":5599,"context_line":"        self._assert_stats(expected_stats, sharder, \u0027audit_root\u0027)"},{"line_number":5600,"context_line":"        self.assertFalse(sharder.logger.get_lines_for_level(\u0027warning\u0027))"},{"line_number":5601,"context_line":"        self.assertFalse(sharder.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":5602,"context_line":"        mocked.assert_not_called()"},{"line_number":5603,"context_line":""},{"line_number":5604,"context_line":"    def test_audit_deleted_root_container(self):"},{"line_number":5605,"context_line":"        broker \u003d self._make_broker()"}],"source_content_type":"text/x-python","patch_set":6,"id":"15dd64be_a2317844","line":5602,"updated":"2022-11-16 13:33:53.000000000","message":"ok. this fails if the exclude_parent_child\u003dTrue is removed from the call to find_overlapping_ranges 👍","commit_id":"6191fd3ec4e4fc0d4aaa3241b8c20e2afa8b3194"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ade5a7edcb62f1cd3401dede7250f6d8236ffe1a","unresolved":true,"context_lines":[{"line_number":8255,"context_line":"            overlapping_ranges)"},{"line_number":8256,"context_line":"        overlapping_ranges \u003d find_overlapping_ranges("},{"line_number":8257,"context_line":"            ranges + child_ranges, exclude_parent_child\u003dTrue)"},{"line_number":8258,"context_line":"        self.assertEqual({(ranges[2], ranges[3])}, overlapping_ranges)"},{"line_number":8259,"context_line":""},{"line_number":8260,"context_line":""},{"line_number":8261,"context_line":"class TestContainerSharderConf(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"71fa1211_a3754fd9","line":8258,"updated":"2022-11-16 13:33:53.000000000","message":"great!","commit_id":"6191fd3ec4e4fc0d4aaa3241b8c20e2afa8b3194"}]}
