)]}'
{"swift/cli/shard-info.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b1f96da36f8b484e7190666e1a4cafd7ad467dcf","unresolved":false,"context_lines":[{"line_number":79,"context_line":"def print_shard_range(node, sr, indent_level):"},{"line_number":80,"context_line":"    indent \u003d indent_level * TAB"},{"line_number":81,"context_line":"    range \u003d \u0027%r - %r\u0027 % (sr.lower, sr.upper)"},{"line_number":82,"context_line":"    print(\u0027%s%23s, objs: %3s, bytes: %3s, created: %s (%s), \u0027"},{"line_number":83,"context_line":"          \u0027modified: %s (%s), %7s: %s (%s), deleted: %s (%s)\u0027 %"},{"line_number":84,"context_line":"          (indent, range, sr.object_count, sr.bytes_used,"},{"line_number":85,"context_line":"           Timestamp(sr.timestamp).isoformat, sr.timestamp.internal,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_b2621d09","line":82,"range":{"start_line":82,"start_character":13,"end_line":82,"end_character":17},"updated":"2018-01-18 01:28:03.000000000","message":"+100","commit_id":"7fd2239f9f7a1a40c5953d14f3fc661368a4736d"}],"swift/container/sharder.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b1f96da36f8b484e7190666e1a4cafd7ad467dcf","unresolved":false,"context_lines":[{"line_number":1072,"context_line":"                shard_range.object_count \u003d info[\u0027object_count\u0027]"},{"line_number":1073,"context_line":"                shard_range.bytes_used \u003d info[\u0027bytes_used\u0027]"},{"line_number":1074,"context_line":"                shard_range.meta_timestamp \u003d Timestamp.now()"},{"line_number":1075,"context_line":"                # NB: set state to ACTIVE here but this must not be sent to"},{"line_number":1076,"context_line":"                # root until *all* shard ranges have been cleaved and we are"},{"line_number":1077,"context_line":"                # ready to transfer responsibility for the namespace from the"},{"line_number":1078,"context_line":"                # original shards to the complete set of new shards."},{"line_number":1079,"context_line":"                shard_range.state \u003d ShardRange.ACTIVE"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_5415c63e","line":1076,"range":{"start_line":1075,"start_character":51,"end_line":1076,"end_character":22},"updated":"2018-01-18 01:28:03.000000000","message":"But once we replicate it out, can\u0027t the other nodes start updating the root?","commit_id":"7fd2239f9f7a1a40c5953d14f3fc661368a4736d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"71b87c96bd92c87159a6051728c3662f6b0e461b","unresolved":false,"context_lines":[{"line_number":1072,"context_line":"                shard_range.object_count \u003d info[\u0027object_count\u0027]"},{"line_number":1073,"context_line":"                shard_range.bytes_used \u003d info[\u0027bytes_used\u0027]"},{"line_number":1074,"context_line":"                shard_range.meta_timestamp \u003d Timestamp.now()"},{"line_number":1075,"context_line":"                # NB: set state to ACTIVE here but this must not be sent to"},{"line_number":1076,"context_line":"                # root until *all* shard ranges have been cleaved and we are"},{"line_number":1077,"context_line":"                # ready to transfer responsibility for the namespace from the"},{"line_number":1078,"context_line":"                # original shards to the complete set of new shards."},{"line_number":1079,"context_line":"                shard_range.state \u003d ShardRange.ACTIVE"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_50f620d9","line":1076,"range":{"start_line":1075,"start_character":51,"end_line":1076,"end_character":22},"in_reply_to":"7f96bb07_5415c63e","updated":"2018-01-18 12:15:21.000000000","message":"yes the cleaved shard container will start updating root with its stats (which are authoritative) but it will not update the shard range state at the root.\n\nin future we may be able to relax this and update the root state sooner, but to do so we need to also simultaneously reduce the namespace of the donor\u0027s shard range in the root.","commit_id":"7fd2239f9f7a1a40c5953d14f3fc661368a4736d"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b1f96da36f8b484e7190666e1a4cafd7ad467dcf","unresolved":false,"context_lines":[{"line_number":1985,"context_line":"        return resp"},{"line_number":1986,"context_line":""},{"line_number":1987,"context_line":"    def _get_shard_ranges(self, req, account, container, includes\u003dNone,"},{"line_number":1988,"context_line":"                          state\u003dNone):"},{"line_number":1989,"context_line":"        \"\"\""},{"line_number":1990,"context_line":"        Fetch shard ranges from given `account/container`. If `includes` is"},{"line_number":1991,"context_line":"        given then the shard range for that object name is requested, otherwise"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_342fda88","line":1988,"range":{"start_line":1988,"start_character":32,"end_line":1988,"end_character":36},"updated":"2018-01-18 01:28:03.000000000","message":"I wonder whether this ought to default to \u0027active\u0027 and require that you manually clear it when you want all...","commit_id":"7fd2239f9f7a1a40c5953d14f3fc661368a4736d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"71b87c96bd92c87159a6051728c3662f6b0e461b","unresolved":false,"context_lines":[{"line_number":1985,"context_line":"        return resp"},{"line_number":1986,"context_line":""},{"line_number":1987,"context_line":"    def _get_shard_ranges(self, req, account, container, includes\u003dNone,"},{"line_number":1988,"context_line":"                          state\u003dNone):"},{"line_number":1989,"context_line":"        \"\"\""},{"line_number":1990,"context_line":"        Fetch shard ranges from given `account/container`. If `includes` is"},{"line_number":1991,"context_line":"        given then the shard range for that object name is requested, otherwise"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_f0008cad","line":1988,"range":{"start_line":1988,"start_character":32,"end_line":1988,"end_character":36},"in_reply_to":"7f96bb07_342fda88","updated":"2018-01-18 12:15:21.000000000","message":"could be. let\u0027s see what experience teaches us about this interface.","commit_id":"7fd2239f9f7a1a40c5953d14f3fc661368a4736d"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b1f96da36f8b484e7190666e1a4cafd7ad467dcf","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                        (end_marker \u003c shard_range.upper or"},{"line_number":267,"context_line":"                         end_marker in shard_range)):"},{"line_number":268,"context_line":"                    continue"},{"line_number":269,"context_line":"                params[\u0027end_marker\u0027] \u003d end_marker or \u0027\u0027"},{"line_number":270,"context_line":"                params[\u0027marker\u0027] \u003d shard_range.upper"},{"line_number":271,"context_line":"                shard_range \u003d None"},{"line_number":272,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_54438642","line":269,"updated":"2018-01-18 01:28:03.000000000","message":"Maybe we should be doing\n\n end_marker \u003d params.get(\u0027end_marker\u0027, \u0027\u0027)\n\nabove?","commit_id":"7fd2239f9f7a1a40c5953d14f3fc661368a4736d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"71b87c96bd92c87159a6051728c3662f6b0e461b","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                        (end_marker \u003c shard_range.upper or"},{"line_number":267,"context_line":"                         end_marker in shard_range)):"},{"line_number":268,"context_line":"                    continue"},{"line_number":269,"context_line":"                params[\u0027end_marker\u0027] \u003d end_marker or \u0027\u0027"},{"line_number":270,"context_line":"                params[\u0027marker\u0027] \u003d shard_range.upper"},{"line_number":271,"context_line":"                shard_range \u003d None"},{"line_number":272,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_f0c3ac36","line":269,"in_reply_to":"7f96bb07_54438642","updated":"2018-01-18 12:15:21.000000000","message":"By the time we get to patch [1] if not sooner the query param mangling should be cleaned up - I found several bugs along the way and added a targetted probetest here [2]\n\n[1] https://review.openstack.org/#/c/533201/3\n[2] https://review.openstack.org/#/c/533201/3/test/probe/test_sharder.py","commit_id":"7fd2239f9f7a1a40c5953d14f3fc661368a4736d"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b1f96da36f8b484e7190666e1a4cafd7ad467dcf","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                includes\u003dself.object_name)"},{"line_number":243,"context_line":"            if shard_ranges:"},{"line_number":244,"context_line":"                partition, nodes \u003d self.app.container_ring.get_nodes("},{"line_number":245,"context_line":"                    shard_ranges[0].account, shard_ranges[0].container)"},{"line_number":246,"context_line":"                return partition, nodes, shard_ranges[0].name"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        return container_info[\u0027partition\u0027], container_info[\u0027nodes\u0027], None"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_54b14646","line":245,"range":{"start_line":245,"start_character":57,"end_line":245,"end_character":60},"updated":"2018-01-18 01:28:03.000000000","message":"So what will be the hierarchy of states to prefer?","commit_id":"7fd2239f9f7a1a40c5953d14f3fc661368a4736d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"71b87c96bd92c87159a6051728c3662f6b0e461b","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                includes\u003dself.object_name)"},{"line_number":243,"context_line":"            if shard_ranges:"},{"line_number":244,"context_line":"                partition, nodes \u003d self.app.container_ring.get_nodes("},{"line_number":245,"context_line":"                    shard_ranges[0].account, shard_ranges[0].container)"},{"line_number":246,"context_line":"                return partition, nodes, shard_ranges[0].name"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        return container_info[\u0027partition\u0027], container_info[\u0027nodes\u0027], None"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_308034f5","line":245,"range":{"start_line":245,"start_character":57,"end_line":245,"end_character":60},"in_reply_to":"7f96bb07_54b14646","updated":"2018-01-18 12:15:21.000000000","message":"currently we should only get back one shard range for an includes query, which could be instate CREATED or ACTIVE. I am imagining future development whereby a root might have multiple shard ranges that include same name but are in different states (i.e. when being more dynamic tracking a sharding shard), but not yet.\n\nHowever, I think there may in future be other states that we don\u0027t want returned here (e.g. state \u003d \u0027found but no container yet created\u0027)...\n\nso I am wondering if the interface with the container server should change to something more abstract - rather than the proxy specifying states, it specifies purpose/context:\n\n  GET a/c?includes\u003dobj_name\u0026context\u003dupdate\n\nvs \n\n  GET a/c?context\u003dlisting\n\n??","commit_id":"7fd2239f9f7a1a40c5953d14f3fc661368a4736d"}]}
