)]}'
{"swift/cli/info.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a6c8998111fd65dcac7b8fa394c9a8a982bfd25","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    is_object_transient_sysmeta"},{"line_number":27,"context_line":"from swift.account.backend import AccountBroker, DATADIR as ABDATADIR"},{"line_number":28,"context_line":"from swift.container.backend import ContainerBroker, DATADIR as CBDATADIR, \\"},{"line_number":29,"context_line":"    DB_STATE"},{"line_number":30,"context_line":"from swift.obj.diskfile import get_data_dir, read_metadata, DATADIR_BASE, \\"},{"line_number":31,"context_line":"    extract_policy"},{"line_number":32,"context_line":"from swift.common.storage_policy import POLICIES"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf57530f_e7ed0026","line":29,"updated":"2017-09-20 18:40:21.000000000","message":"Yeah buddy -- I knew that lookup would be useful :-)","commit_id":"fe9cc0b23a64dd399d95da5ae31d1b35ee9835e2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a6c8998111fd65dcac7b8fa394c9a8a982bfd25","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    else:"},{"line_number":292,"context_line":"        print(\u0027No user metadata found in db file\u0027)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    if info.get(\u0027db_state\u0027) is not None:"},{"line_number":295,"context_line":"        print(\u0027Sharding Metadata:\u0027)"},{"line_number":296,"context_line":"        shard_type \u003d \u0027root\u0027 if info.get(\u0027is_root\u0027) else \u0027shard\u0027"},{"line_number":297,"context_line":"        print(\u0027  Type: %s\u0027 % shard_type)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf57530f_ad5ec9e3","line":294,"updated":"2017-09-20 18:40:21.000000000","message":"I\u0027m pretty sure info[\u0027db_state\u0027] is always available and never None.\n\nWhile I was trying to find a case where this *wasn\u0027t* available, though, I noticed something.\n\nIf I make a new db through the API then manually drop the shard_ranges table (so it\u0027s like an old, pre-sharding db), running swift-container-info on it creates the new table automatically. Is that intentional? I tend to think of the swift-*-info commands as being fairly read-only...\n\nAnd if I chmod it so it really *is* read-only, I get\n\n $ swift-container-info \u003cdb file\u003e\n Warning: Possibly Stale Data\n Container info failed: attempt to write a readonly database\n\nand no container info at all.","commit_id":"fe9cc0b23a64dd399d95da5ae31d1b35ee9835e2"}],"swift/container/sharder.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"025d466ad7838b769bb5349744757833f3eee98e","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"                                 broker.account, broker.container)"},{"line_number":1443,"context_line":"                return"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":"        if last_range:"},{"line_number":1446,"context_line":"            self.logger.info(\u0027Continuing to shard %s/%s\u0027,"},{"line_number":1447,"context_line":"                             broker.account, broker.container)"},{"line_number":1448,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf57530f_ce18e576","line":1445,"range":{"start_line":1445,"start_character":11,"end_line":1445,"end_character":21},"updated":"2017-09-20 13:36:47.000000000","message":"also needs to be last_pivot","commit_id":"ce20856ac6b7e4d316ae30b767bf3cb08c8d89fc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"025d466ad7838b769bb5349744757833f3eee98e","unresolved":false,"context_lines":[{"line_number":1495,"context_line":"                             new_broker.account, new_broker.container)"},{"line_number":1496,"context_line":"            self.cpool.spawn("},{"line_number":1497,"context_line":"                self._replicate_object, new_part, new_broker.db_file, node_id)"},{"line_number":1498,"context_line":"            last_range \u003d shard_range.upper"},{"line_number":1499,"context_line":"            self.logger.info(\u0027Node %d sharded %s/%s at shard range %s.\u0027,"},{"line_number":1500,"context_line":"                             self.node_id, broker.account, broker.container,"},{"line_number":1501,"context_line":"                             shard_range.upper)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf57530f_ee34c9e0","line":1498,"range":{"start_line":1498,"start_character":12,"end_line":1498,"end_character":22},"updated":"2017-09-20 13:36:47.000000000","message":"ditto","commit_id":"ce20856ac6b7e4d316ae30b767bf3cb08c8d89fc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"025d466ad7838b769bb5349744757833f3eee98e","unresolved":false,"context_lines":[{"line_number":1515,"context_line":"        else:"},{"line_number":1516,"context_line":"            broker.update_metadata({"},{"line_number":1517,"context_line":"                \u0027X-Container-Sysmeta-Shard-Last-%d\u0027 % self.node_idx:"},{"line_number":1518,"context_line":"                    (last_range, Timestamp(time.time()).internal)})"},{"line_number":1519,"context_line":""},{"line_number":1520,"context_line":"    # TODO: unused method - ok to delete?"},{"line_number":1521,"context_line":"    def _push_shard_ranges_to_container(self, root_account,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf57530f_8e2c2d9a","line":1518,"range":{"start_line":1518,"start_character":21,"end_line":1518,"end_character":31},"updated":"2017-09-20 13:36:47.000000000","message":"ditto","commit_id":"ce20856ac6b7e4d316ae30b767bf3cb08c8d89fc"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a6c8998111fd65dcac7b8fa394c9a8a982bfd25","unresolved":false,"context_lines":[{"line_number":1463,"context_line":"                \u0027Sharding %s/%s on shard range %s\u0027,"},{"line_number":1464,"context_line":"                broker.account, broker.container, shard_range.upper)"},{"line_number":1465,"context_line":""},{"line_number":1466,"context_line":"            q \u003d query.copy()"},{"line_number":1467,"context_line":"            q[\u0027marker\u0027] \u003d shard_range.lower or \u0027\u0027"},{"line_number":1468,"context_line":"            if shard_range.upper:"},{"line_number":1469,"context_line":"                q[\u0027end_marker\u0027] \u003d shard_range.upper + \u0027\\x00\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf57530f_6a00b735","line":1466,"updated":"2017-09-20 18:40:21.000000000","message":"I\u0027d be partial toward dropping the intermediary dict entirely and just having something like\n\n q \u003d {\n     \u0027marker\u0027: shard_range.lower or \u0027\u0027,\n     \u0027storage_policy_index\u0027: policy_index,\n }\n\nhere. (The prefix/delimiter keys don\u0027t really matter, yeah?)","commit_id":"fe9cc0b23a64dd399d95da5ae31d1b35ee9835e2"}]}
