)]}'
{"swift/cli/info.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"c19f1fdf7fd954e1629892567b911c6d2c85d6f1","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    if info.get(\u0027shard_range_warnings\u0027):"},{"line_number":340,"context_line":"        print(\u0027Shard Range Audit Warnings:\u0027)"},{"line_number":341,"context_line":"        for warning in info[\u0027shard_range_warnings\u0027]:"},{"line_number":342,"context_line":"            print(\u0027  %s\u0027 % warning)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"def print_obj_metadata(metadata, drop_prefixes\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f493fa4_4e45e342","line":342,"updated":"2020-04-26 23:24:53.000000000","message":"YES! Love having this info here, including the warnings.","commit_id":"c2362a4ef068b08a2952f6b014007eea6279b093"}],"swift/container/backend.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"c19f1fdf7fd954e1629892567b911c6d2c85d6f1","unresolved":false,"context_lines":[{"line_number":2265,"context_line":"            gaps.append((first.upper, second.lower))"},{"line_number":2266,"context_line":"    if shard_ranges[-1].upper \u003c ShardRange.MAX:"},{"line_number":2267,"context_line":"        gaps.append((shard_ranges[-1].upper, ShardRange.MAX))"},{"line_number":2268,"context_line":"    return gaps"},{"line_number":2269,"context_line":""},{"line_number":2270,"context_line":""},{"line_number":2271,"context_line":"def find_overlapping_ranges(shard_ranges):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f493fa4_ce59f335","line":2268,"updated":"2020-04-26 23:24:53.000000000","message":"So this only scans root containers then. Not shards being scanned. Because to support the latter there may or may not be ShardRange.MIN or MAX in the list.\n\nWe should know the min shard from the own shard range anyway. So could just use those to determine anything incomplete/missing from the start and end of the shard.","commit_id":"c2362a4ef068b08a2952f6b014007eea6279b093"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c9abae2cb7c875194a2f892fff9385ee6e531883","unresolved":false,"context_lines":[{"line_number":2265,"context_line":"            gaps.append((first.upper, second.lower))"},{"line_number":2266,"context_line":"    if shard_ranges[-1].upper \u003c ShardRange.MAX:"},{"line_number":2267,"context_line":"        gaps.append((shard_ranges[-1].upper, ShardRange.MAX))"},{"line_number":2268,"context_line":"    return gaps"},{"line_number":2269,"context_line":""},{"line_number":2270,"context_line":""},{"line_number":2271,"context_line":"def find_overlapping_ranges(shard_ranges):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_3081c34b","line":2268,"in_reply_to":"1f493fa4_ce59f335","updated":"2020-07-07 18:13:48.000000000","message":"Done","commit_id":"c2362a4ef068b08a2952f6b014007eea6279b093"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"51f2a1105d48824f477bb597b74d012d3bf56e23","unresolved":false,"context_lines":[{"line_number":2285,"context_line":"        if self.is_root_container():"},{"line_number":2286,"context_line":"            requires_coverage \u003d (ShardRange.SHARDING, ShardRange.SHARDED)"},{"line_number":2287,"context_line":"        else:"},{"line_number":2288,"context_line":"            requires_coverage \u003d (ShardRange.SHARDED, )"},{"line_number":2289,"context_line":""},{"line_number":2290,"context_line":"        if own_shard_range.state in requires_coverage:"},{"line_number":2291,"context_line":"            shard_ranges \u003d self.get_shard_ranges()"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_b93a0495","line":2288,"updated":"2020-07-31 18:14:45.000000000","message":"Oh, this should probably include SHRINKING...","commit_id":"151b2c49b1599834160d4ac01f93c35da281dd03"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"818722460f40a87837d5753dd9a4faf4d3c41047","unresolved":false,"context_lines":[{"line_number":2340,"context_line":"    \"\"\""},{"line_number":2341,"context_line":"    return {"},{"line_number":2342,"context_line":"        (one, another)"},{"line_number":2343,"context_line":"        for one in shard_ranges"},{"line_number":2344,"context_line":"        for another in shard_ranges"},{"line_number":2345,"context_line":"        if (one.lower, one.upper) \u003c (another.lower, another.upper)"},{"line_number":2346,"context_line":"        and one.overlaps(another)"},{"line_number":2347,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_76187b74","line":2344,"range":{"start_line":2343,"start_character":8,"end_line":2344,"end_character":35},"updated":"2020-07-31 16:58:59.000000000","message":"O(n**2) isn\u0027t great... I should be able to come up with something a little smarter...","commit_id":"151b2c49b1599834160d4ac01f93c35da281dd03"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"818722460f40a87837d5753dd9a4faf4d3c41047","unresolved":false,"context_lines":[{"line_number":2342,"context_line":"        (one, another)"},{"line_number":2343,"context_line":"        for one in shard_ranges"},{"line_number":2344,"context_line":"        for another in shard_ranges"},{"line_number":2345,"context_line":"        if (one.lower, one.upper) \u003c (another.lower, another.upper)"},{"line_number":2346,"context_line":"        and one.overlaps(another)"},{"line_number":2347,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_b62b3380","line":2345,"range":{"start_line":2345,"start_character":8,"end_line":2345,"end_character":66},"updated":"2020-07-31 16:58:59.000000000","message":"IDK that this\u0027ll catch shard ranges that exactly line up :-(","commit_id":"151b2c49b1599834160d4ac01f93c35da281dd03"}],"test/unit/cli/test_info.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0c81a42ecbe7a11c5e241403d46961aac92b373f","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    Created at:     1970-01-01T00:02:03.000000 (0000000123.00000)"},{"line_number":408,"context_line":"    Meta Timestamp: 1970-01-01T00:02:03.000000 (0000000123.00000)\u0027\u0027\u0027 %\\"},{"line_number":409,"context_line":"                  (POLICIES[0].name, s_a, s_ya, s_a, s_ya, s_a, s_ya)"},{"line_number":410,"context_line":"        self.maxDiff\u003dNone"},{"line_number":411,"context_line":"        self.assertEqual(out.getvalue().strip().split(\u0027\\n\u0027),"},{"line_number":412,"context_line":"                         exp_out.strip().split(\u0027\\n\u0027))"},{"line_number":413,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_31b614fc","line":410,"updated":"2020-07-08 00:20:58.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"5c9dfdc3b2ec4c5a2fa2c3654413cf56c24fc822"}],"test/unit/container/test_backend.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0c81a42ecbe7a11c5e241403d46961aac92b373f","unresolved":false,"context_lines":[{"line_number":3988,"context_line":"        shard_ranges \u003d ["},{"line_number":3989,"context_line":"            ShardRange(\u0027.shards_a/c0\u0027, next(self.ts), \u0027a\u0027, \u0027k\u0027,"},{"line_number":3990,"context_line":"                       state\u003dShardRange.ACTIVE),"},{"line_number":3991,"context_line":"            # This has been seen in the wild: rest of the namespace is covered by"},{"line_number":3992,"context_line":"            # two separate sets of shard ranges"},{"line_number":3993,"context_line":"            ShardRange(\u0027.shards_a/c1\u0027, next(self.ts), \u0027k\u0027, \u0027m\u0027,"},{"line_number":3994,"context_line":"                       state\u003dShardRange.ACTIVE),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_b1f064cb","line":3991,"updated":"2020-07-08 00:20:58.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"5c9dfdc3b2ec4c5a2fa2c3654413cf56c24fc822"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0c81a42ecbe7a11c5e241403d46961aac92b373f","unresolved":false,"context_lines":[{"line_number":4013,"context_line":"        # At least we get some warnings about it"},{"line_number":4014,"context_line":"        self.assertEqual(set(broker.audit_shard_ranges()), {"},{"line_number":4015,"context_line":"            \u0027missing range(s): -a\u0027,"},{"line_number":4016,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c1 and .shards_a/c2\u0027,"},{"line_number":4017,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c2 and .shards_a/c3\u0027,"},{"line_number":4018,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c3 and .shards_a/c4\u0027,"},{"line_number":4019,"context_line":"        })"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_91eba0da","line":4016,"updated":"2020-07-08 00:20:58.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"5c9dfdc3b2ec4c5a2fa2c3654413cf56c24fc822"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0c81a42ecbe7a11c5e241403d46961aac92b373f","unresolved":false,"context_lines":[{"line_number":4014,"context_line":"        self.assertEqual(set(broker.audit_shard_ranges()), {"},{"line_number":4015,"context_line":"            \u0027missing range(s): -a\u0027,"},{"line_number":4016,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c1 and .shards_a/c2\u0027,"},{"line_number":4017,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c2 and .shards_a/c3\u0027,"},{"line_number":4018,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c3 and .shards_a/c4\u0027,"},{"line_number":4019,"context_line":"        })"},{"line_number":4020,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_f1bbfce1","line":4017,"updated":"2020-07-08 00:20:58.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"5c9dfdc3b2ec4c5a2fa2c3654413cf56c24fc822"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c9abae2cb7c875194a2f892fff9385ee6e531883","unresolved":false,"context_lines":[{"line_number":4015,"context_line":"            \u0027missing range(s): -a\u0027,"},{"line_number":4016,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c1 and .shards_a/c2\u0027,"},{"line_number":4017,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c2 and .shards_a/c3\u0027,"},{"line_number":4018,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c3 and .shards_a/c4\u0027,"},{"line_number":4019,"context_line":"        })"},{"line_number":4020,"context_line":""},{"line_number":4021,"context_line":"    @with_tempdir"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_1714a79f","line":4018,"updated":"2020-07-07 18:13:48.000000000","message":"Applying something like http://paste.openstack.org/show/795642/ to get the old method and display, you\u0027d see warnings like\n\n \u0027overlapping ranges in state active: k-m m- k-t\u0027\n \u0027overlapping ranges in state active: k-t k-m\u0027\n \u0027overlapping ranges in state active: k-t t- m-\u0027\n \u0027overlapping ranges in state active: m- t-\u0027\n\nNote that in practice, upper/lower values are never that short, though -- one more advantage to using the shard names.","commit_id":"5c9dfdc3b2ec4c5a2fa2c3654413cf56c24fc822"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0c81a42ecbe7a11c5e241403d46961aac92b373f","unresolved":false,"context_lines":[{"line_number":4015,"context_line":"            \u0027missing range(s): -a\u0027,"},{"line_number":4016,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c1 and .shards_a/c2\u0027,"},{"line_number":4017,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c2 and .shards_a/c3\u0027,"},{"line_number":4018,"context_line":"            \u0027overlapping ranges in state active: .shards_a/c3 and .shards_a/c4\u0027,"},{"line_number":4019,"context_line":"        })"},{"line_number":4020,"context_line":""},{"line_number":4021,"context_line":"    @with_tempdir"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_d1beb8d2","line":4018,"updated":"2020-07-08 00:20:58.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"5c9dfdc3b2ec4c5a2fa2c3654413cf56c24fc822"}],"test/unit/container/test_sharder.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8a8f78edc6713289e00b845e5705832cb4e556ce","unresolved":false,"context_lines":[{"line_number":4397,"context_line":"        # bad account name"},{"line_number":4398,"context_line":"        broker.account \u003d \u0027bad_account\u0027"},{"line_number":4399,"context_line":"        with broker.get() as conn:"},{"line_number":4400,"context_line":"            conn.execute(\u0027UPDATE container_stat SET account \u003d ?\u0027, (broker.account, ))"},{"line_number":4401,"context_line":"            conn.commit()"},{"line_number":4402,"context_line":""},{"line_number":4403,"context_line":"        sharder, mock_swift \u003d call_audit_container()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_4defd0af","line":4400,"updated":"2020-07-30 00:39:19.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"12b48e858f8e287dad953feccca9281e7b1483dd"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8a8f78edc6713289e00b845e5705832cb4e556ce","unresolved":false,"context_lines":[{"line_number":4414,"context_line":""},{"line_number":4415,"context_line":"        broker.account \u003d \u0027.shards_a\u0027"},{"line_number":4416,"context_line":"        with broker.get() as conn:"},{"line_number":4417,"context_line":"            conn.execute(\u0027UPDATE container_stat SET account \u003d ?\u0027, (broker.account, ))"},{"line_number":4418,"context_line":"            conn.commit()"},{"line_number":4419,"context_line":""},{"line_number":4420,"context_line":"        # missing own shard range"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_ad2b0ce9","line":4417,"updated":"2020-07-30 00:39:19.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"12b48e858f8e287dad953feccca9281e7b1483dd"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8a8f78edc6713289e00b845e5705832cb4e556ce","unresolved":false,"context_lines":[{"line_number":4545,"context_line":"        # bad account name"},{"line_number":4546,"context_line":"        broker.account \u003d \u0027bad_account\u0027"},{"line_number":4547,"context_line":"        with broker.get() as conn:"},{"line_number":4548,"context_line":"            conn.execute(\u0027UPDATE container_stat SET account \u003d ?\u0027, (broker.account, ))"},{"line_number":4549,"context_line":"            conn.commit()"},{"line_number":4550,"context_line":""},{"line_number":4551,"context_line":"        sharder, mock_swift \u003d call_audit_container()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_8d2e08f8","line":4548,"updated":"2020-07-30 00:39:19.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"12b48e858f8e287dad953feccca9281e7b1483dd"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8a8f78edc6713289e00b845e5705832cb4e556ce","unresolved":false,"context_lines":[{"line_number":4562,"context_line":""},{"line_number":4563,"context_line":"        broker.account \u003d \u0027.shards_a\u0027"},{"line_number":4564,"context_line":"        with broker.get() as conn:"},{"line_number":4565,"context_line":"            conn.execute(\u0027UPDATE container_stat SET account \u003d ?\u0027, (broker.account, ))"},{"line_number":4566,"context_line":"            conn.commit()"},{"line_number":4567,"context_line":""},{"line_number":4568,"context_line":"        # missing own shard range"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_ed350448","line":4565,"updated":"2020-07-30 00:39:19.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"12b48e858f8e287dad953feccca9281e7b1483dd"}]}
