)]}'
{"swift/container/backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"aced978f2c55054d33bcb7c0ec69ea4424a9db1d","unresolved":false,"context_lines":[{"line_number":1658,"context_line":"                include_deleted\u003dinclude_deleted, states\u003dstates,"},{"line_number":1659,"context_line":"                exclude_states\u003dexclude_states, include_own\u003dinclude_own,"},{"line_number":1660,"context_line":"                exclude_others\u003dexclude_others)]"},{"line_number":1661,"context_line":"        shard_ranges.sort(key\u003dlambda sr: (sr.lower, sr.upper))"},{"line_number":1662,"context_line":"        if includes:"},{"line_number":1663,"context_line":"            shard_range \u003d find_shard_range(includes, shard_ranges)"},{"line_number":1664,"context_line":"            return [shard_range] if shard_range else []"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_67181c84","line":1661,"updated":"2018-04-04 19:11:18.000000000","message":"Yeah, I like moving this out to Python. I\u0027ve got this nagging feeling that we were going to need to do it eventually anyway, so we can rearrange SHARDING/SHRINKING ranges at will.\n\nOn the ordering key, this definitely works with SHRINKING, where we\u0027ll get\n\n [\n  (\u0027\u0027, \u0027b\u0027, ACTIVE),\n  (\u0027b\u0027, \u0027c\u0027, SHRINKING),\n  (\u0027b\u0027, \u0027g\u0027, ACTIVE),\n  (\u0027g\u0027, \u0027\u0027, ACTIVE)\n ]\n\n(once we get rid of EXPANDING). When SHARDING though, I think we want\n\n [\n  (\u0027\u0027, \u0027b\u0027, ACTIVE),\n  (\u0027b\u0027, \u0027c\u0027, CLEAVED),\n  (\u0027c\u0027, \u0027d\u0027, CLEAVED),\n  (\u0027d\u0027, \u0027e\u0027, CLEAVED),\n  (\u0027b\u0027, \u0027g\u0027, SHARDING),\n  (\u0027g\u0027, \u0027\u0027, ACTIVE)\n ]\n\ninstead of\n\n [\n  (\u0027\u0027, \u0027b\u0027, ACTIVE),\n  (\u0027b\u0027, \u0027c\u0027, CLEAVED),\n  (\u0027b\u0027, \u0027g\u0027, SHARDING),\n  (\u0027c\u0027, \u0027d\u0027, CLEAVED),\n  (\u0027d\u0027, \u0027e\u0027, CLEAVED),\n  (\u0027g\u0027, \u0027\u0027, ACTIVE)\n ]\n\nlike we\u0027d get currently. Maybe it\u0027s a matter of sorting by upper then lower? Then fixing up bounds before reversing when doing reverse listings...","commit_id":"e18e8cbb1fc1148ef0f2198988ffebc8bfa66550"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3234ee4c61aa3d92739db6ba8c055b2002174d2a","unresolved":false,"context_lines":[{"line_number":1658,"context_line":"                include_deleted\u003dinclude_deleted, states\u003dstates,"},{"line_number":1659,"context_line":"                exclude_states\u003dexclude_states, include_own\u003dinclude_own,"},{"line_number":1660,"context_line":"                exclude_others\u003dexclude_others)]"},{"line_number":1661,"context_line":"        shard_ranges.sort(key\u003dlambda sr: (sr.lower, sr.upper))"},{"line_number":1662,"context_line":"        if includes:"},{"line_number":1663,"context_line":"            shard_range \u003d find_shard_range(includes, shard_ranges)"},{"line_number":1664,"context_line":"            return [shard_range] if shard_range else []"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_f51e6b0a","line":1661,"in_reply_to":"bf659307_67181c84","updated":"2018-04-12 08:08:28.000000000","message":"https://trello.com/c/Pdw7U5bL","commit_id":"e18e8cbb1fc1148ef0f2198988ffebc8bfa66550"}]}
