)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ac39e1d6b6155a18439a6b2db03e704a2ccb310f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1d22bec9_37ed1223","updated":"2022-05-10 16:06:01.000000000","message":"@Matt - thanks so much for getting the test code started - I have taken your code and developed on it","commit_id":"1323513fde2089d55b35609079982560e121f079"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"9a9cbc0ad7836202fab11859364e90374e547aac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6a9f91cf_3d2fb27e","updated":"2022-05-11 01:27:55.000000000","message":"Will abandon this one now. Nice additions to the test Al. ","commit_id":"1323513fde2089d55b35609079982560e121f079"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b2d55b1571a2d26390d5e07b20ef29216d8737fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8ca43d87_8833d303","updated":"2022-05-10 14:02:52.000000000","message":"i\u0027m not sure these tests make sense to me yet","commit_id":"1323513fde2089d55b35609079982560e121f079"}],"swift/cli/manage_shard_ranges.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ac39e1d6b6155a18439a6b2db03e704a2ccb310f","unresolved":true,"context_lines":[{"line_number":615,"context_line":"    paths_with_gaps \u003d []"},{"line_number":616,"context_line":"    start \u003d ShardRange.MIN"},{"line_number":617,"context_line":"    if shard_ranges.lower !\u003d ShardRange.MIN:"},{"line_number":618,"context_line":"        start \u003d None"},{"line_number":619,"context_line":"    while True:"},{"line_number":620,"context_line":"        start_path, end_path \u003d _find_gap(paths, start)"},{"line_number":621,"context_line":"        if not end_path:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c4e27f5_f786c908","line":618,"updated":"2022-05-10 16:06:01.000000000","message":"I took a slightly different approach here","commit_id":"1323513fde2089d55b35609079982560e121f079"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ac39e1d6b6155a18439a6b2db03e704a2ccb310f","unresolved":true,"context_lines":[{"line_number":748,"context_line":"    if not broker.is_root_container():"},{"line_number":749,"context_line":"        print(\u0027WARNING: Shard containers cannot be repaired.\u0027)"},{"line_number":750,"context_line":"        print(\u0027This command should be used on a root container.\u0027)"},{"line_number":751,"context_line":"        return EXIT_ERROR"},{"line_number":752,"context_line":"    if args.gaps:"},{"line_number":753,"context_line":"        return repair_gaps(broker, args)"},{"line_number":754,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"cdee7264_62b8f37f","line":751,"updated":"2022-05-10 16:06:01.000000000","message":"+1","commit_id":"1323513fde2089d55b35609079982560e121f079"}],"test/unit/cli/test_manage_shard_ranges.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ac39e1d6b6155a18439a6b2db03e704a2ccb310f","unresolved":true,"context_lines":[{"line_number":1686,"context_line":"        updated_ranges \u003d broker.get_shard_ranges()"},{"line_number":1687,"context_line":"        self.assert_shard_ranges_equal(shard_ranges, updated_ranges)"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"    def test_repair_gap_in_middle(self):"},{"line_number":1690,"context_line":"        def do_test(range_index):"},{"line_number":1691,"context_line":"            broker \u003d self._make_broker()"},{"line_number":1692,"context_line":"            broker.set_sharding_sysmeta(\u0027Quoted-Root\u0027, \u0027a/c\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"51376982_2a4bd0bd","line":1689,"updated":"2022-05-10 16:06:01.000000000","message":"this could be generalised to cover the start and end gaps too","commit_id":"1323513fde2089d55b35609079982560e121f079"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b2d55b1571a2d26390d5e07b20ef29216d8737fe","unresolved":true,"context_lines":[{"line_number":1695,"context_line":"            with mock_timestamp_now(next(self.ts_iter)):"},{"line_number":1696,"context_line":"                shard_ranges \u003d make_shard_ranges("},{"line_number":1697,"context_line":"                    broker, self.shard_data, \u0027.shards_\u0027)"},{"line_number":1698,"context_line":"            missing_range \u003d shard_ranges.pop(range_index)"},{"line_number":1699,"context_line":"            broker.merge_shard_ranges(shard_ranges)"},{"line_number":1700,"context_line":"            self.assertTrue(broker.is_root_container())"},{"line_number":1701,"context_line":"            out \u003d StringIO()"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf1ca852_dc49086a","line":1698,"updated":"2022-05-10 14:02:52.000000000","message":"so were creating a gap by throwing out one of the ranges so it\u0027s never merged into the table.","commit_id":"1323513fde2089d55b35609079982560e121f079"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b2d55b1571a2d26390d5e07b20ef29216d8737fe","unresolved":true,"context_lines":[{"line_number":1710,"context_line":"                [\u0027Found 1 gaps:\u0027, \"  gap: \u0027%s\u0027 - \u0027%s\u0027\" % ("},{"line_number":1711,"context_line":"                    missing_range.lower, missing_range.upper),"},{"line_number":1712,"context_line":"                 \u0027    apparent gap contents:\u0027, \u0027\u0027,"},{"line_number":1713,"context_line":"                 \u0027The following 0 shard ranges will be expanded to fill gaps:\u0027,"},{"line_number":1714,"context_line":"                 \u0027\u0027, \u0027Run container-replicator to replicate the changes to \u0027"},{"line_number":1715,"context_line":"                 \u0027other nodes.\u0027,"},{"line_number":1716,"context_line":"                 \u0027Run container-sharder on all nodes to fill gaps.\u0027, \u0027\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"45979828_1c05917c","line":1713,"updated":"2022-05-10 14:02:52.000000000","message":"to fix a gap shouldn\u0027t we need to expand at least one range?","commit_id":"1323513fde2089d55b35609079982560e121f079"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b2d55b1571a2d26390d5e07b20ef29216d8737fe","unresolved":true,"context_lines":[{"line_number":1716,"context_line":"                 \u0027Run container-sharder on all nodes to fill gaps.\u0027, \u0027\u0027],"},{"line_number":1717,"context_line":"                out_lines)"},{"line_number":1718,"context_line":"            updated_ranges \u003d broker.get_shard_ranges()"},{"line_number":1719,"context_line":"            self.assert_shard_ranges_equal(shard_ranges, updated_ranges)"},{"line_number":1720,"context_line":"            os.remove(broker.db_file)"},{"line_number":1721,"context_line":""},{"line_number":1722,"context_line":"        for i in range(1, len(self.shard_data) - 1):"}],"source_content_type":"text/x-python","patch_set":1,"id":"a2af4dac_aa9131ac","line":1719,"updated":"2022-05-10 14:02:52.000000000","message":"so, no changes were made","commit_id":"1323513fde2089d55b35609079982560e121f079"}]}
