)]}'
{"swift/proxy/controllers/base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":2013,"context_line":"        :return: a tuple of (deserialized json data structure, swob Response)"},{"line_number":2014,"context_line":"        \"\"\""},{"line_number":2015,"context_line":"        params \u003d params or {}"},{"line_number":2016,"context_line":"        version, _a, _c, _other \u003d req.split_path(3, 4, True)"},{"line_number":2017,"context_line":"        path \u003d \u0027/\u0027.join([\u0027\u0027, version, account, container])"},{"line_number":2018,"context_line":""},{"line_number":2019,"context_line":"        subreq \u003d make_pre_authed_request("}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_a0eda18c","line":2016,"range":{"start_line":2016,"start_character":49,"end_line":2016,"end_character":50},"updated":"2018-05-17 20:39:21.000000000","message":"Since we only care about version, should this be a 1? Or even\n\n version, _rest \u003d req.split_path(1, 2, True)","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":2017,"context_line":"        path \u003d \u0027/\u0027.join([\u0027\u0027, version, account, container])"},{"line_number":2018,"context_line":""},{"line_number":2019,"context_line":"        subreq \u003d make_pre_authed_request("},{"line_number":2020,"context_line":"            req.environ, method\u003d\u0027GET\u0027, path\u003dquote(path), headers\u003dreq.headers,"},{"line_number":2021,"context_line":"            swift_source\u003d\u0027SH\u0027)"},{"line_number":2022,"context_line":"        if headers:"},{"line_number":2023,"context_line":"            subreq.headers.update(headers)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_60ff8934","line":2020,"range":{"start_line":2020,"start_character":44,"end_line":2020,"end_character":49},"updated":"2018-05-17 20:39:21.000000000","message":"+1 on quoting, don\u0027t need a repeat of https://bugs.launchpad.net/swift/+bug/1755554, https://bugs.launchpad.net/swift/+bug/1678022, or https://bugs.launchpad.net/swift/+bug/1598093","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":2017,"context_line":"        path \u003d \u0027/\u0027.join([\u0027\u0027, version, account, container])"},{"line_number":2018,"context_line":""},{"line_number":2019,"context_line":"        subreq \u003d make_pre_authed_request("},{"line_number":2020,"context_line":"            req.environ, method\u003d\u0027GET\u0027, path\u003dquote(path), headers\u003dreq.headers,"},{"line_number":2021,"context_line":"            swift_source\u003d\u0027SH\u0027)"},{"line_number":2022,"context_line":"        if headers:"},{"line_number":2023,"context_line":"            subreq.headers.update(headers)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_20f9914c","line":2020,"range":{"start_line":2020,"start_character":57,"end_line":2020,"end_character":76},"updated":"2018-05-17 20:39:21.000000000","message":"Interesting... why use the existing request\u0027s headers?","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":2018,"context_line":""},{"line_number":2019,"context_line":"        subreq \u003d make_pre_authed_request("},{"line_number":2020,"context_line":"            req.environ, method\u003d\u0027GET\u0027, path\u003dquote(path), headers\u003dreq.headers,"},{"line_number":2021,"context_line":"            swift_source\u003d\u0027SH\u0027)"},{"line_number":2022,"context_line":"        if headers:"},{"line_number":2023,"context_line":"            subreq.headers.update(headers)"},{"line_number":2024,"context_line":"        subreq.params \u003d params"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_e098791c","line":2021,"range":{"start_line":2021,"start_character":26,"end_line":2021,"end_character":28},"updated":"2018-05-17 20:39:21.000000000","message":"Check! https://review.openstack.org/#/c/565749/13/doc/source/logs.rst","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":2023,"context_line":"            subreq.headers.update(headers)"},{"line_number":2024,"context_line":"        subreq.params \u003d params"},{"line_number":2025,"context_line":"        self.app.logger.debug("},{"line_number":2026,"context_line":"            \u0027Get listing from %s %s\u0027 % (subreq.path_qs, headers))"},{"line_number":2027,"context_line":"        response \u003d self.app.handle_request(subreq)"},{"line_number":2028,"context_line":""},{"line_number":2029,"context_line":"        if not is_success(response.status_int):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_809d050c","line":2026,"range":{"start_line":2026,"start_character":56,"end_line":2026,"end_character":63},"updated":"2018-05-17 20:39:21.000000000","message":"Better as dict(subreq.headers)?","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0609bb70422c6b0151eceeb3b6c9e1df66df4c59","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            # Always set marker to ensure that object names less than or equal"},{"line_number":165,"context_line":"            # to those already in the listing are not fetched"},{"line_number":166,"context_line":"            if objects:"},{"line_number":167,"context_line":"                params[\u0027marker\u0027] \u003d get_valid_utf8_str(objects[-1][\u0027name\u0027])"},{"line_number":168,"context_line":"            elif reverse and marker and marker \u003e shard_range.lower:"},{"line_number":169,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":170,"context_line":"            elif marker and marker \u003c\u003d shard_range.upper:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_253d71dc","line":167,"range":{"start_line":167,"start_character":67,"end_line":167,"end_character":71},"updated":"2018-05-14 23:33:40.000000000","message":"Can hit a KeyError with delimiter queries.","commit_id":"0431fa57f0b201b01dcd8e0d962e5c31cefb6f12"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6cfb20f1d0fc7e4a19a881bf5401fa208656b12e","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            # Always set marker to ensure that object names less than or equal"},{"line_number":165,"context_line":"            # to those already in the listing are not fetched"},{"line_number":166,"context_line":"            if objects:"},{"line_number":167,"context_line":"                params[\u0027marker\u0027] \u003d get_valid_utf8_str(objects[-1][\u0027name\u0027])"},{"line_number":168,"context_line":"            elif reverse and marker and marker \u003e shard_range.lower:"},{"line_number":169,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":170,"context_line":"            elif marker and marker \u003c\u003d shard_range.upper:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_aba05943","line":167,"range":{"start_line":167,"start_character":67,"end_line":167,"end_character":71},"in_reply_to":"5f7c97a3_253d71dc","updated":"2018-05-15 17:37:36.000000000","message":":/\n\nnot had time to fix today, tracking here:\nhttps://trello.com/c/j8nAHeUF","commit_id":"0431fa57f0b201b01dcd8e0d962e5c31cefb6f12"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        resp \u003d self.GETorHEAD_base("},{"line_number":115,"context_line":"            req, _(\u0027Container\u0027), node_iter, part,"},{"line_number":116,"context_line":"            req.swift_entity_path, concurrency)"},{"line_number":117,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":118,"context_line":"        if all((req.method \u003d\u003d \"GET\", record_type \u003d\u003d \u0027auto\u0027,"},{"line_number":119,"context_line":"               resp_record_type.lower() \u003d\u003d \u0027shard\u0027)):"},{"line_number":120,"context_line":"            resp \u003d self._get_from_shards(req, resp)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_007575fa","line":117,"updated":"2018-05-17 20:39:21.000000000","message":"This should never be set for errors, yeah?","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a56bf3d76918382f56b59871a0f252be3cd600d2","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        resp \u003d self.GETorHEAD_base("},{"line_number":115,"context_line":"            req, _(\u0027Container\u0027), node_iter, part,"},{"line_number":116,"context_line":"            req.swift_entity_path, concurrency)"},{"line_number":117,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":118,"context_line":"        if all((req.method \u003d\u003d \"GET\", record_type \u003d\u003d \u0027auto\u0027,"},{"line_number":119,"context_line":"               resp_record_type.lower() \u003d\u003d \u0027shard\u0027)):"},{"line_number":120,"context_line":"            resp \u003d self._get_from_shards(req, resp)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_a2391bf3","line":117,"in_reply_to":"5f7c97a3_007575fa","updated":"2018-05-18 17:56:37.000000000","message":"no. adding a test to verify.","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    def _get_from_shards(self, req, resp):"},{"line_number":142,"context_line":"        # construct listing using shards described by the response body"},{"line_number":143,"context_line":"        shard_ranges \u003d [ShardRange.from_dict(data)"},{"line_number":144,"context_line":"                        for data in json.loads(resp.body)]"},{"line_number":145,"context_line":"        self.app.logger.debug(\u0027GET listing from %s shards for: %s\u0027,"},{"line_number":146,"context_line":"                              len(shard_ranges), req.path_qs)"},{"line_number":147,"context_line":"        if not shard_ranges:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_2072f112","line":144,"updated":"2018-05-17 20:39:21.000000000","message":"Not gonna catch TypeError, KeyError, ValueError here, too?","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            return resp"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        objects \u003d []"},{"line_number":153,"context_line":"        req_limit \u003d int(req.params.get(\u0027limit\u0027, CONTAINER_LISTING_LIMIT))"},{"line_number":154,"context_line":"        params \u003d req.params.copy()"},{"line_number":155,"context_line":"        params.pop(\u0027states\u0027, None)"},{"line_number":156,"context_line":"        req.headers.pop(\u0027X-Backend-Record-Type\u0027, None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_e065d946","line":153,"updated":"2018-05-17 20:39:21.000000000","message":"I know you said the auto request would have already validated limit, but I\u0027d still feel better if we had something like\n\n req_limit \u003d min(CONTAINER_LISTING_LIMIT, int(\n     req.params.get(\u0027limit\u0027, CONTAINER_LISTING_LIMIT))","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a56bf3d76918382f56b59871a0f252be3cd600d2","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            return resp"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        objects \u003d []"},{"line_number":153,"context_line":"        req_limit \u003d int(req.params.get(\u0027limit\u0027, CONTAINER_LISTING_LIMIT))"},{"line_number":154,"context_line":"        params \u003d req.params.copy()"},{"line_number":155,"context_line":"        params.pop(\u0027states\u0027, None)"},{"line_number":156,"context_line":"        req.headers.pop(\u0027X-Backend-Record-Type\u0027, None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_f6183585","line":153,"in_reply_to":"5f7c97a3_e065d946","updated":"2018-05-18 17:56:37.000000000","message":"but if the request limit is too large shouldn\u0027t that result in a 400? or are you worried we modify it?","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b5faab477340b10a829df79792b4a2a02a6bf501","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            return resp"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        objects \u003d []"},{"line_number":153,"context_line":"        req_limit \u003d int(req.params.get(\u0027limit\u0027, CONTAINER_LISTING_LIMIT))"},{"line_number":154,"context_line":"        params \u003d req.params.copy()"},{"line_number":155,"context_line":"        params.pop(\u0027states\u0027, None)"},{"line_number":156,"context_line":"        req.headers.pop(\u0027X-Backend-Record-Type\u0027, None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_10561008","line":153,"in_reply_to":"5f7c97a3_f6183585","updated":"2018-05-18 18:45:20.000000000","message":"Belt \u0026 braces? I just want to make sure that if a too-large limit *somehow slips in*, we still cap that result rather than buffer a bunch of stuff in-memory.\n\nMaybe it doesn\u0027t matter -- every subrequest will 400 so we never actually grow our object list.","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                params[\u0027marker\u0027] \u003d get_valid_utf8_str(last_name)"},{"line_number":169,"context_line":"            elif reverse and marker and marker \u003e shard_range.lower:"},{"line_number":170,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":171,"context_line":"            elif marker and marker \u003c\u003d shard_range.upper:"},{"line_number":172,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":173,"context_line":"            else:"},{"line_number":174,"context_line":"                params[\u0027marker\u0027] \u003d shard_range.upper_str if reverse \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_9b0c983c","line":171,"range":{"start_line":171,"start_character":36,"end_line":171,"end_character":37},"updated":"2018-05-17 20:39:21.000000000","message":"Wait... if marker \u003d\u003d shard_range.upper, shouldn\u0027t we skip this range entirely?","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a56bf3d76918382f56b59871a0f252be3cd600d2","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                params[\u0027marker\u0027] \u003d get_valid_utf8_str(last_name)"},{"line_number":169,"context_line":"            elif reverse and marker and marker \u003e shard_range.lower:"},{"line_number":170,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":171,"context_line":"            elif marker and marker \u003c\u003d shard_range.upper:"},{"line_number":172,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":173,"context_line":"            else:"},{"line_number":174,"context_line":"                params[\u0027marker\u0027] \u003d shard_range.upper_str if reverse \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_1699311e","line":171,"range":{"start_line":171,"start_character":36,"end_line":171,"end_character":37},"in_reply_to":"5f7c97a3_9b0c983c","updated":"2018-05-18 17:56:37.000000000","message":"we shouldn\u0027t even have the range should we?\n\nI\u0027m more concerned about what we\u0027re doing if marker \u003e shard_range.upper. Again, we do not expect to have that range, but I\u0027d like to still handle it and not erroneously move the marker.\n\nI have a follow up for this - I don\u0027t want to rush a change in at this point. I\u0027m comfortable nothing is broken, we could just be more defensive.","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":171,"context_line":"            elif marker and marker \u003c\u003d shard_range.upper:"},{"line_number":172,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":173,"context_line":"            else:"},{"line_number":174,"context_line":"                params[\u0027marker\u0027] \u003d shard_range.upper_str if reverse \\"},{"line_number":175,"context_line":"                    else shard_range.lower_str"},{"line_number":176,"context_line":"                if params[\u0027marker\u0027] and reverse:"},{"line_number":177,"context_line":"                    params[\u0027marker\u0027] +\u003d \u0027\\x00\u0027"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"            # Always set end_marker to ensure that misplaced objects beyond"},{"line_number":180,"context_line":"            # the expected shard range are not fetched"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_6009c92f","line":177,"range":{"start_line":173,"start_character":12,"end_line":177,"end_character":46},"updated":"2018-05-17 20:39:21.000000000","message":"nit:\n\n elif reverse:\n     params[\u0027marker\u0027] \u003d shard_range.end_marker\n else:\n     params[\u0027marker\u0027] \u003d shard_range.lower_str","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a56bf3d76918382f56b59871a0f252be3cd600d2","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":171,"context_line":"            elif marker and marker \u003c\u003d shard_range.upper:"},{"line_number":172,"context_line":"                params[\u0027marker\u0027] \u003d marker"},{"line_number":173,"context_line":"            else:"},{"line_number":174,"context_line":"                params[\u0027marker\u0027] \u003d shard_range.upper_str if reverse \\"},{"line_number":175,"context_line":"                    else shard_range.lower_str"},{"line_number":176,"context_line":"                if params[\u0027marker\u0027] and reverse:"},{"line_number":177,"context_line":"                    params[\u0027marker\u0027] +\u003d \u0027\\x00\u0027"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"            # Always set end_marker to ensure that misplaced objects beyond"},{"line_number":180,"context_line":"            # the expected shard range are not fetched"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_f8ca6418","line":177,"range":{"start_line":173,"start_character":12,"end_line":177,"end_character":46},"in_reply_to":"5f7c97a3_6009c92f","updated":"2018-05-18 17:56:37.000000000","message":"Done","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            # the expected shard range are not fetched"},{"line_number":181,"context_line":"            if end_marker and end_marker in shard_range:"},{"line_number":182,"context_line":"                params[\u0027end_marker\u0027] \u003d end_marker"},{"line_number":183,"context_line":"            else:"},{"line_number":184,"context_line":"                params[\u0027end_marker\u0027] \u003d shard_range.lower_str if reverse \\"},{"line_number":185,"context_line":"                    else shard_range.upper_str"},{"line_number":186,"context_line":"                if params[\u0027end_marker\u0027] and not reverse:"},{"line_number":187,"context_line":"                    params[\u0027end_marker\u0027] +\u003d \u0027\\x00\u0027"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"            if (shard_range.account \u003d\u003d self.account_name and"},{"line_number":190,"context_line":"                    shard_range.container \u003d\u003d self.container_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_bb2634ba","line":187,"range":{"start_line":183,"start_character":12,"end_line":187,"end_character":50},"updated":"2018-05-17 20:39:21.000000000","message":"nit:\n\n elif reverse:\n     params[\u0027end_marker\u0027] \u003d shard_range.lower_str\n else:\n     params[\u0027end_marker\u0027] \u003d shard_range.end_marker","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a56bf3d76918382f56b59871a0f252be3cd600d2","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            # the expected shard range are not fetched"},{"line_number":181,"context_line":"            if end_marker and end_marker in shard_range:"},{"line_number":182,"context_line":"                params[\u0027end_marker\u0027] \u003d end_marker"},{"line_number":183,"context_line":"            else:"},{"line_number":184,"context_line":"                params[\u0027end_marker\u0027] \u003d shard_range.lower_str if reverse \\"},{"line_number":185,"context_line":"                    else shard_range.upper_str"},{"line_number":186,"context_line":"                if params[\u0027end_marker\u0027] and not reverse:"},{"line_number":187,"context_line":"                    params[\u0027end_marker\u0027] +\u003d \u0027\\x00\u0027"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"            if (shard_range.account \u003d\u003d self.account_name and"},{"line_number":190,"context_line":"                    shard_range.container \u003d\u003d self.container_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_78689420","line":187,"range":{"start_line":183,"start_character":12,"end_line":187,"end_character":50},"in_reply_to":"5f7c97a3_bb2634ba","updated":"2018-05-18 17:56:37.000000000","message":"Done. yay for ShardRange.end_marker, let\u0027s use it.","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            if (shard_range.account \u003d\u003d self.account_name and"},{"line_number":190,"context_line":"                    shard_range.container \u003d\u003d self.container_name):"},{"line_number":191,"context_line":"                # directed back to same container - force GET of objects"},{"line_number":192,"context_line":"                headers \u003d {\u0027X-Backend-Record-Type\u0027: \u0027object\u0027}"},{"line_number":193,"context_line":"            else:"},{"line_number":194,"context_line":"                headers \u003d None"},{"line_number":195,"context_line":"            self.app.logger.debug(\u0027Getting from %s %s with %s\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_204bd1b0","line":192,"updated":"2018-05-17 20:39:21.000000000","message":"Should this *always* be set? I guess we pop it off above in case we hit a sharding shard... but wouldn\u0027t the root already know about that, since it\u0027s the one telling the shard that it ought to split?\n\nWell, I guess you could still use swift-manage-shard-ranges to tell it to split -- but by the time it\u0027s cleaved a range (and thus impacts listings) the root either already knows about it or will be notified shortly, yeah?","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a56bf3d76918382f56b59871a0f252be3cd600d2","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            if (shard_range.account \u003d\u003d self.account_name and"},{"line_number":190,"context_line":"                    shard_range.container \u003d\u003d self.container_name):"},{"line_number":191,"context_line":"                # directed back to same container - force GET of objects"},{"line_number":192,"context_line":"                headers \u003d {\u0027X-Backend-Record-Type\u0027: \u0027object\u0027}"},{"line_number":193,"context_line":"            else:"},{"line_number":194,"context_line":"                headers \u003d None"},{"line_number":195,"context_line":"            self.app.logger.debug(\u0027Getting from %s %s with %s\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_58f8387b","line":192,"in_reply_to":"5f7c97a3_204bd1b0","updated":"2018-05-18 17:56:37.000000000","message":"possibly not, see https://trello.com/c/yRBDlhQC , IMHO not a blocker, the listing will eventually be ok","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"777f6f42cdce6b0e533d27e3faccf932e33aa5a4","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"            if limit \u003c\u003d 0:"},{"line_number":209,"context_line":"                break"},{"line_number":210,"context_line":"            elif (end_marker and reverse and"},{"line_number":211,"context_line":"                  end_marker \u003e\u003d get_valid_utf8_str(objects[-1][\u0027name\u0027])):"},{"line_number":212,"context_line":"                break"},{"line_number":213,"context_line":"            elif (end_marker and not reverse and"},{"line_number":214,"context_line":"                  end_marker \u003c\u003d get_valid_utf8_str(objects[-1][\u0027name\u0027])):"},{"line_number":215,"context_line":"                break"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        resp.body \u003d json.dumps(objects)"},{"line_number":218,"context_line":"        constrained \u003d any(req.params.get(constraint) for constraint in ("}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_dbd53045","line":215,"range":{"start_line":210,"start_character":12,"end_line":215,"end_character":21},"updated":"2018-05-17 20:39:21.000000000","message":"I don\u0027t think these should ever trip since we pass end_marker on every subrequest...","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a56bf3d76918382f56b59871a0f252be3cd600d2","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"            if limit \u003c\u003d 0:"},{"line_number":209,"context_line":"                break"},{"line_number":210,"context_line":"            elif (end_marker and reverse and"},{"line_number":211,"context_line":"                  end_marker \u003e\u003d get_valid_utf8_str(objects[-1][\u0027name\u0027])):"},{"line_number":212,"context_line":"                break"},{"line_number":213,"context_line":"            elif (end_marker and not reverse and"},{"line_number":214,"context_line":"                  end_marker \u003c\u003d get_valid_utf8_str(objects[-1][\u0027name\u0027])):"},{"line_number":215,"context_line":"                break"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        resp.body \u003d json.dumps(objects)"},{"line_number":218,"context_line":"        constrained \u003d any(req.params.get(constraint) for constraint in ("}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_78d654c6","line":215,"range":{"start_line":210,"start_character":12,"end_line":215,"end_character":21},"in_reply_to":"5f7c97a3_dbd53045","updated":"2018-05-18 17:56:37.000000000","message":"agree, but...\u0027belt and braces\u0027","commit_id":"7ab00f70a10d7da67865e154a2b0773149611995"}]}
