)]}'
{"swift/container/server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57c1fa2e6a63c95fdfd9a8a2f3a0fbf1c19b7a83","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                # range when necessary to better separate implementation"},{"line_number":638,"context_line":"                # details and ensure the filler is always equal to the"},{"line_number":639,"context_line":"                # uncleaved namespace"},{"line_number":640,"context_line":"                last_upper \u003d ShardRange.MIN"},{"line_number":641,"context_line":"                if reverse:"},{"line_number":642,"context_line":"                    if container_list:"},{"line_number":643,"context_line":"                        last_upper \u003d container_list[0].upper"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_9620eb9d","line":640,"updated":"2018-01-20 00:14:34.000000000","message":"Shouldn\u0027t this be\n\n marker or ShardRange.MIN\n\n(or\n\n end_marker or ShardRange.MIN\n\nwhen reverse\u003dtrue)?\n\nThen (I think) it\u0027ll handle situations like\n\n ?marker\u003dc\u0026end_marker\u003da\u0026reverse\u003doff\n\nproperly.","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3751948850cf7f98cbb8df6e8e61d0408ab191f9","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                # range when necessary to better separate implementation"},{"line_number":638,"context_line":"                # details and ensure the filler is always equal to the"},{"line_number":639,"context_line":"                # uncleaved namespace"},{"line_number":640,"context_line":"                last_upper \u003d ShardRange.MIN"},{"line_number":641,"context_line":"                if reverse:"},{"line_number":642,"context_line":"                    if container_list:"},{"line_number":643,"context_line":"                        last_upper \u003d container_list[0].upper"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_135934fd","line":640,"in_reply_to":"7f96bb07_9620eb9d","updated":"2018-01-22 09:12:39.000000000","message":"yes, the filler could be limited to given marker / end-marker","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57c1fa2e6a63c95fdfd9a8a2f3a0fbf1c19b7a83","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                if required_upper \u003e last_upper:"},{"line_number":652,"context_line":"                    filler_sr \u003d ShardRange("},{"line_number":653,"context_line":"                        \u0027%s/%s\u0027 % (account, container), Timestamp.now(),"},{"line_number":654,"context_line":"                        str(last_upper), ShardRange.MAX,"},{"line_number":655,"context_line":"                        state\u003dShardRange.ACTIVE)"},{"line_number":656,"context_line":"                    container_list.insert(filler_index, filler_sr)"},{"line_number":657,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_5620234a","line":654,"range":{"start_line":654,"start_character":41,"end_line":654,"end_character":55},"updated":"2018-01-20 00:14:34.000000000","message":"...or maybe required_upper? *shrug*","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57c1fa2e6a63c95fdfd9a8a2f3a0fbf1c19b7a83","unresolved":false,"context_lines":[{"line_number":653,"context_line":"                        \u0027%s/%s\u0027 % (account, container), Timestamp.now(),"},{"line_number":654,"context_line":"                        str(last_upper), ShardRange.MAX,"},{"line_number":655,"context_line":"                        state\u003dShardRange.ACTIVE)"},{"line_number":656,"context_line":"                    container_list.insert(filler_index, filler_sr)"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        elif info.get(\u0027db_state\u0027) \u003d\u003d DB_STATE_SHARDING:"},{"line_number":659,"context_line":"            # Container is sharding, so we need to look at both brokers"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_f6312fa4","line":656,"updated":"2018-01-20 00:14:34.000000000","message":"Cool! Yeah, I like this a lot more than the weird special-casing in proxy/controllers/container.py","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57c1fa2e6a63c95fdfd9a8a2f3a0fbf1c19b7a83","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        if req.environ.get(\u0027reseller_request\u0027, False):"},{"line_number":182,"context_line":"            headers[\u0027X-Container-Sharding\u0027] \u003d config_true_value("},{"line_number":183,"context_line":"                headers.get(get_sys_meta_prefix(\u0027container\u0027) + \u0027Sharding\u0027,"},{"line_number":184,"context_line":"                            \u0027False\u0027))"},{"line_number":185,"context_line":"        objects \u003d []"},{"line_number":186,"context_line":"        params \u003d req.params.copy()"},{"line_number":187,"context_line":"        reverse \u003d config_true_value(params.get(\u0027reverse\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_3650f7d4","side":"PARENT","line":184,"updated":"2018-01-20 00:14:34.000000000","message":"Right. So all of this is still covered -- up around line 144 -- and *this copy* of resp.headers was never actually getting used.","commit_id":"e6c1b06e5fd597e81095654b4a83f2dd9b0f7c56"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57c1fa2e6a63c95fdfd9a8a2f3a0fbf1c19b7a83","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        return resp"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _get_from_shards(self, req, resp):"},{"line_number":151,"context_line":"        limit \u003d int(req.params.get(\u0027limit\u0027, CONTAINER_LISTING_LIMIT))"},{"line_number":152,"context_line":"        # get the list of ShardRanges that contain the requested listing range"},{"line_number":153,"context_line":"        # by using original request params"},{"line_number":154,"context_line":"        ranges \u003d self._get_shard_ranges("}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_b6a887db","line":151,"range":{"start_line":151,"start_character":16,"end_line":151,"end_character":19},"updated":"2018-01-20 00:14:34.000000000","message":"Have we already validated limit? Or could this raise ValueError?","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3751948850cf7f98cbb8df6e8e61d0408ab191f9","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        return resp"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _get_from_shards(self, req, resp):"},{"line_number":151,"context_line":"        limit \u003d int(req.params.get(\u0027limit\u0027, CONTAINER_LISTING_LIMIT))"},{"line_number":152,"context_line":"        # get the list of ShardRanges that contain the requested listing range"},{"line_number":153,"context_line":"        # by using original request params"},{"line_number":154,"context_line":"        ranges \u003d self._get_shard_ranges("}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_d023c2bd","line":151,"range":{"start_line":151,"start_character":16,"end_line":151,"end_character":19},"in_reply_to":"7f96bb07_b6a887db","updated":"2018-01-22 09:12:39.000000000","message":"good point \n\n-\u003e trello\n\nhttps://trello.com/c/ZF84HD6q/150-validate-limit-param-and-other-params-before-getting-sharded-listing-in-proxy-containerpy","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57c1fa2e6a63c95fdfd9a8a2f3a0fbf1c19b7a83","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        reverse \u003d config_true_value(params.get(\u0027reverse\u0027))"},{"line_number":182,"context_line":"        marker \u003d params.get(\u0027marker\u0027)"},{"line_number":183,"context_line":"        end_marker \u003d params.get(\u0027end_marker\u0027)"},{"line_number":184,"context_line":"        params[\u0027format\u0027] \u003d \u0027json\u0027"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        for shard_range in ranges:"},{"line_number":187,"context_line":"            params[\u0027limit\u0027] \u003d limit"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_d6d0b356","line":184,"range":{"start_line":184,"start_character":8,"end_line":184,"end_character":33},"updated":"2018-01-20 00:14:34.000000000","message":"Off-topic: we can assume this now that the listing_format patch merged. See line 109.","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3751948850cf7f98cbb8df6e8e61d0408ab191f9","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        reverse \u003d config_true_value(params.get(\u0027reverse\u0027))"},{"line_number":182,"context_line":"        marker \u003d params.get(\u0027marker\u0027)"},{"line_number":183,"context_line":"        end_marker \u003d params.get(\u0027end_marker\u0027)"},{"line_number":184,"context_line":"        params[\u0027format\u0027] \u003d \u0027json\u0027"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        for shard_range in ranges:"},{"line_number":187,"context_line":"            params[\u0027limit\u0027] \u003d limit"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_f30e0831","line":184,"range":{"start_line":184,"start_character":8,"end_line":184,"end_character":33},"in_reply_to":"7f96bb07_d6d0b356","updated":"2018-01-22 09:12:39.000000000","message":"ok I see you took care of this in follow up","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57c1fa2e6a63c95fdfd9a8a2f3a0fbf1c19b7a83","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            if marker and marker in shard_range:"},{"line_number":193,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":194,"context_line":"            else:"},{"line_number":195,"context_line":"                params[\u0027marker\u0027] \u003d shard_range.upper if reverse \\"},{"line_number":196,"context_line":"                    else shard_range.lower"},{"line_number":197,"context_line":"                if params[\u0027marker\u0027] and reverse:"},{"line_number":198,"context_line":"                    params[\u0027marker\u0027] +\u003d \u0027\\x00\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_766f5f92","line":195,"range":{"start_line":195,"start_character":35,"end_line":195,"end_character":52},"updated":"2018-01-20 00:14:34.000000000","message":"We don\u0027t need to do a\n\n str(shard_range.upper)\n\n? I still don\u0027t have a good feel for when that\u0027s required and when that\u0027s optional yet...","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3751948850cf7f98cbb8df6e8e61d0408ab191f9","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            if marker and marker in shard_range:"},{"line_number":193,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":194,"context_line":"            else:"},{"line_number":195,"context_line":"                params[\u0027marker\u0027] \u003d shard_range.upper if reverse \\"},{"line_number":196,"context_line":"                    else shard_range.lower"},{"line_number":197,"context_line":"                if params[\u0027marker\u0027] and reverse:"},{"line_number":198,"context_line":"                    params[\u0027marker\u0027] +\u003d \u0027\\x00\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_b33160ef","line":195,"range":{"start_line":195,"start_character":35,"end_line":195,"end_character":52},"in_reply_to":"7f96bb07_766f5f92","updated":"2018-01-22 09:12:39.000000000","message":"eek, yes str() is needed\n\nI do wonder if ShardRange.upper/lower should never return a string, then bugs like this would be immediately obvious","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57c1fa2e6a63c95fdfd9a8a2f3a0fbf1c19b7a83","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            hdrs, objs, tmp_resp \u003d get_objects("},{"line_number":209,"context_line":"                shard_range.account, shard_range.container, params)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            if hdrs is None and tmp_resp:"},{"line_number":212,"context_line":"                return tmp_resp"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"            if not objs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_d603d3bd","line":211,"range":{"start_line":211,"start_character":15,"end_line":211,"end_character":27},"updated":"2018-01-20 00:14:34.000000000","message":"Off-topic: This feels like a funny way to indicate an error... I wonder if we could do something like\n\n if is_success(response.status_int):\n     try:\n         return (response.headers, json.loads(response.body),\n                 response)\n     except ValueError:\n         pass\n raise response\n\nup in get_objects...","commit_id":"5d4df049086ca6dfcdb24b444f36d512c39391a4"}]}
