)]}'
{"swift/container/server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2804e016c182ab08a8d00cd1a9edc34e6d33622f","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        path \u003d get_param(req, \u0027path\u0027)"},{"line_number":559,"context_line":"        prefix \u003d get_param(req, \u0027prefix\u0027)"},{"line_number":560,"context_line":"        delimiter \u003d get_param(req, \u0027delimiter\u0027)"},{"line_number":561,"context_line":"        items \u003d get_param(req, \u0027items\u0027, \u0027\u0027).lower()"},{"line_number":562,"context_line":"        if delimiter and (len(delimiter) \u003e 1 or ord(delimiter) \u003e 254):"},{"line_number":563,"context_line":"            # delimiters can be made more flexible later"},{"line_number":564,"context_line":"            return HTTPPreconditionFailed(body\u003d\u0027Bad delimiter\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_cfd42ac0","line":561,"updated":"2018-04-19 22:58:44.000000000","message":"Do we still use this?","commit_id":"11766e5e4536d6da05a64e2aabe73dc340982de4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"641d6f91de145eba1b1879e94151a607260906ac","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        path \u003d get_param(req, \u0027path\u0027)"},{"line_number":559,"context_line":"        prefix \u003d get_param(req, \u0027prefix\u0027)"},{"line_number":560,"context_line":"        delimiter \u003d get_param(req, \u0027delimiter\u0027)"},{"line_number":561,"context_line":"        items \u003d get_param(req, \u0027items\u0027, \u0027\u0027).lower()"},{"line_number":562,"context_line":"        if delimiter and (len(delimiter) \u003e 1 or ord(delimiter) \u003e 254):"},{"line_number":563,"context_line":"            # delimiters can be made more flexible later"},{"line_number":564,"context_line":"            return HTTPPreconditionFailed(body\u003d\u0027Bad delimiter\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_28d9057e","line":561,"in_reply_to":"9f6a8fd7_cfd42ac0","updated":"2018-04-24 08:01:36.000000000","message":"nope","commit_id":"11766e5e4536d6da05a64e2aabe73dc340982de4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2804e016c182ab08a8d00cd1a9edc34e6d33622f","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        info, is_deleted \u003d broker.get_info_is_deleted()"},{"line_number":584,"context_line":"        record_type \u003d req.headers.get(\u0027x-backend-record-type\u0027, \u0027\u0027).lower()"},{"line_number":585,"context_line":"        if record_type \u003d\u003d \u0027auto\u0027 and info[\u0027db_state\u0027] in (SHARDING, SHARDED):"},{"line_number":586,"context_line":"            record_type \u003d \u0027shard\u0027"},{"line_number":587,"context_line":"        if record_type \u003d\u003d \u0027shard\u0027:"},{"line_number":588,"context_line":"            resp_headers \u003d gen_resp_headers(info)"},{"line_number":589,"context_line":"            override_deleted \u003d config_true_value("}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_afd1b6cf","line":586,"updated":"2018-04-19 22:58:44.000000000","message":"We should clear out limit... it doesn\u0027t really apply in this case.","commit_id":"11766e5e4536d6da05a64e2aabe73dc340982de4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"641d6f91de145eba1b1879e94151a607260906ac","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        info, is_deleted \u003d broker.get_info_is_deleted()"},{"line_number":584,"context_line":"        record_type \u003d req.headers.get(\u0027x-backend-record-type\u0027, \u0027\u0027).lower()"},{"line_number":585,"context_line":"        if record_type \u003d\u003d \u0027auto\u0027 and info[\u0027db_state\u0027] in (SHARDING, SHARDED):"},{"line_number":586,"context_line":"            record_type \u003d \u0027shard\u0027"},{"line_number":587,"context_line":"        if record_type \u003d\u003d \u0027shard\u0027:"},{"line_number":588,"context_line":"            resp_headers \u003d gen_resp_headers(info)"},{"line_number":589,"context_line":"            override_deleted \u003d config_true_value("}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_e8430d12","line":586,"in_reply_to":"9f6a8fd7_afd1b6cf","updated":"2018-04-24 08:01:36.000000000","message":"yes and/or shift the check to later","commit_id":"11766e5e4536d6da05a64e2aabe73dc340982de4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"79bfcfbfa60436bbad5fa6a850b5ab9c40fbc646","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            req.headers.get(\u0027x-backend-include-deleted\u0027, False))"},{"line_number":588,"context_line":"        if record_type \u003d\u003d \u0027auto\u0027 and info.get(\u0027db_state\u0027) in (SHARDING,"},{"line_number":589,"context_line":"                                                              SHARDED):"},{"line_number":590,"context_line":"            record_type \u003d \u0027shard\u0027"},{"line_number":591,"context_line":"        if record_type \u003d\u003d \u0027shard\u0027:"},{"line_number":592,"context_line":"            resp_headers \u003d gen_resp_headers(info)"},{"line_number":593,"context_line":"            override_deleted \u003d config_true_value("}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_8877c8a0","line":590,"updated":"2018-04-23 20:48:20.000000000","message":"We still want to reset limit -- if the client wants at most 5 objects, we don\u0027t want to go limiting the number of shards we might need to dig through to find them. This probably wouldn\u0027t matter much because of the cardinalities involved, except delimiter queries complicate everything :-(","commit_id":"f47daf1131e8e45e736b693c635a7b10805c00d1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"641d6f91de145eba1b1879e94151a607260906ac","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            req.headers.get(\u0027x-backend-include-deleted\u0027, False))"},{"line_number":588,"context_line":"        if record_type \u003d\u003d \u0027auto\u0027 and info.get(\u0027db_state\u0027) in (SHARDING,"},{"line_number":589,"context_line":"                                                              SHARDED):"},{"line_number":590,"context_line":"            record_type \u003d \u0027shard\u0027"},{"line_number":591,"context_line":"        if record_type \u003d\u003d \u0027shard\u0027:"},{"line_number":592,"context_line":"            resp_headers \u003d gen_resp_headers(info)"},{"line_number":593,"context_line":"            override_deleted \u003d config_true_value("}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_04b87ce2","line":590,"in_reply_to":"9f6a8fd7_8877c8a0","updated":"2018-04-24 08:01:36.000000000","message":"+1 yes sorry I think you pointed that out before.","commit_id":"f47daf1131e8e45e736b693c635a7b10805c00d1"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2804e016c182ab08a8d00cd1a9edc34e6d33622f","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        node_iter \u003d self.app.iter_nodes(self.app.container_ring, part)"},{"line_number":107,"context_line":"        params \u003d req.params"},{"line_number":108,"context_line":"        params[\u0027format\u0027] \u003d \u0027json\u0027"},{"line_number":109,"context_line":"        params[\u0027states\u0027] \u003d \u0027listing\u0027"},{"line_number":110,"context_line":"        record_type \u003d req.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027).lower()"},{"line_number":111,"context_line":"        if not record_type:"},{"line_number":112,"context_line":"            record_type \u003d \u0027auto\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_4fec9af2","line":109,"updated":"2018-04-19 22:58:44.000000000","message":"Why do we need this? Shouldn\u0027t \u0027listing\u0027 be the default set of states, with \u0027update\u0027 only getting triggered if there\u0027s an \u0027includes\u0027?","commit_id":"11766e5e4536d6da05a64e2aabe73dc340982de4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"641d6f91de145eba1b1879e94151a607260906ac","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        node_iter \u003d self.app.iter_nodes(self.app.container_ring, part)"},{"line_number":107,"context_line":"        params \u003d req.params"},{"line_number":108,"context_line":"        params[\u0027format\u0027] \u003d \u0027json\u0027"},{"line_number":109,"context_line":"        params[\u0027states\u0027] \u003d \u0027listing\u0027"},{"line_number":110,"context_line":"        record_type \u003d req.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027).lower()"},{"line_number":111,"context_line":"        if not record_type:"},{"line_number":112,"context_line":"            record_type \u003d \u0027auto\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_a8f755d3","line":109,"in_reply_to":"9f6a8fd7_4fec9af2","updated":"2018-04-24 08:01:36.000000000","message":"we use this code path to get shard ranges in general, not just for object listing (e.g. in probe tests) so we don\u0027t want to default to listing only states. For that reason this line is in the wrong place, which is why this patchset failed probe tests. We need to always set states\u003dlisting when trying to list objects, i.e. when record type is \u0027auto\u0027.","commit_id":"11766e5e4536d6da05a64e2aabe73dc340982de4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2804e016c182ab08a8d00cd1a9edc34e6d33622f","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            self.app.recheck_container_existence)"},{"line_number":126,"context_line":"        # TODO: seems like a good idea to not set cache for shard/all"},{"line_number":127,"context_line":"        # requests, but revisit this at some point"},{"line_number":128,"context_line":"        if record_type !\u003d \u0027shard\u0027 and params.get(\u0027items\u0027) !\u003d \u0027all\u0027:"},{"line_number":129,"context_line":"            set_info_cache(self.app, req.environ, self.account_name,"},{"line_number":130,"context_line":"                           self.container_name, resp)"},{"line_number":131,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_cfa2ea4b","line":128,"range":{"start_line":128,"start_character":11,"end_line":128,"end_character":22},"updated":"2018-04-19 22:58:44.000000000","message":"resp_record_type now, yeah?","commit_id":"11766e5e4536d6da05a64e2aabe73dc340982de4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"641d6f91de145eba1b1879e94151a607260906ac","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            self.app.recheck_container_existence)"},{"line_number":126,"context_line":"        # TODO: seems like a good idea to not set cache for shard/all"},{"line_number":127,"context_line":"        # requests, but revisit this at some point"},{"line_number":128,"context_line":"        if record_type !\u003d \u0027shard\u0027 and params.get(\u0027items\u0027) !\u003d \u0027all\u0027:"},{"line_number":129,"context_line":"            set_info_cache(self.app, req.environ, self.account_name,"},{"line_number":130,"context_line":"                           self.container_name, resp)"},{"line_number":131,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_485239e0","line":128,"range":{"start_line":128,"start_character":11,"end_line":128,"end_character":22},"in_reply_to":"9f6a8fd7_cfa2ea4b","updated":"2018-04-24 08:01:36.000000000","message":"good spot, but actually I don\u0027t think we need or want the condition - the response headers are valid when getting shard ranges - what was the concern with setting cache from a shard range response?\n\nhowever, perhaps we should apply the is_deleted restriction on shard range reponse headers??","commit_id":"11766e5e4536d6da05a64e2aabe73dc340982de4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"79bfcfbfa60436bbad5fa6a850b5ab9c40fbc646","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        if not record_type:"},{"line_number":111,"context_line":"            record_type \u003d \u0027auto\u0027"},{"line_number":112,"context_line":"            req.headers[\u0027X-Backend-Record-Type\u0027] \u003d \u0027auto\u0027"},{"line_number":113,"context_line":"            params[\u0027states\u0027] \u003d \u0027listing\u0027"},{"line_number":114,"context_line":"        req.params \u003d params"},{"line_number":115,"context_line":"        resp \u003d self.GETorHEAD_base("},{"line_number":116,"context_line":"            req, _(\u0027Container\u0027), node_iter, part,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_e8b20449","line":113,"range":{"start_line":113,"start_character":12,"end_line":113,"end_character":40},"updated":"2018-04-23 20:48:20.000000000","message":"Off topic: I\u0027ve got this suspicion that we can get rid of the states query param, at least for requests in the client path. Might still be nice to have as an API, but I *think* we can toggle between \u0027states\u003dlisting\u0027 and \u0027states\u003dupdate\u0027 based on whether we\u0027ve got an \u0027includes\u0027 param. Do we ever send any other \u0027states\u0027 params?","commit_id":"f47daf1131e8e45e736b693c635a7b10805c00d1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"641d6f91de145eba1b1879e94151a607260906ac","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        if not record_type:"},{"line_number":111,"context_line":"            record_type \u003d \u0027auto\u0027"},{"line_number":112,"context_line":"            req.headers[\u0027X-Backend-Record-Type\u0027] \u003d \u0027auto\u0027"},{"line_number":113,"context_line":"            params[\u0027states\u0027] \u003d \u0027listing\u0027"},{"line_number":114,"context_line":"        req.params \u003d params"},{"line_number":115,"context_line":"        resp \u003d self.GETorHEAD_base("},{"line_number":116,"context_line":"            req, _(\u0027Container\u0027), node_iter, part,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_4490b44a","line":113,"range":{"start_line":113,"start_character":12,"end_line":113,"end_character":40},"in_reply_to":"9f6a8fd7_e8b20449","updated":"2018-04-24 08:01:36.000000000","message":"I don\u0027t think we send explicit state, but so far I kept it as a possibly useful API feature. However, we do fetch unconstrained states e.g. when fetching shard range for audit. And probe tests.","commit_id":"f47daf1131e8e45e736b693c635a7b10805c00d1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"79bfcfbfa60436bbad5fa6a850b5ab9c40fbc646","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        resp.headers[\u0027X-Backend-Recheck-Container-Existence\u0027] \u003d str("},{"line_number":126,"context_line":"            self.app.recheck_container_existence)"},{"line_number":127,"context_line":"        set_info_cache(self.app, req.environ, self.account_name,"},{"line_number":128,"context_line":"                       self.container_name, resp)"},{"line_number":129,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":130,"context_line":"            req.acl \u003d resp.headers.get(\u0027x-container-read\u0027)"},{"line_number":131,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_e8bf64a7","line":128,"updated":"2018-04-23 20:48:20.000000000","message":"Hmm... So we\u0027re feeling pretty good that we always send all the right headers now?","commit_id":"f47daf1131e8e45e736b693c635a7b10805c00d1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"641d6f91de145eba1b1879e94151a607260906ac","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        resp.headers[\u0027X-Backend-Recheck-Container-Existence\u0027] \u003d str("},{"line_number":126,"context_line":"            self.app.recheck_container_existence)"},{"line_number":127,"context_line":"        set_info_cache(self.app, req.environ, self.account_name,"},{"line_number":128,"context_line":"                       self.container_name, resp)"},{"line_number":129,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":130,"context_line":"            req.acl \u003d resp.headers.get(\u0027x-container-read\u0027)"},{"line_number":131,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_44be74b4","line":128,"in_reply_to":"9f6a8fd7_e8bf64a7","updated":"2018-04-24 08:01:36.000000000","message":"tested here https://github.com/openstack/swift/blob/0079fa70ad38dbadb137dba71ee0cfa35191aa95/test/unit/container/test_server.py#L2807","commit_id":"f47daf1131e8e45e736b693c635a7b10805c00d1"}],"test/unit/container/test_server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"79bfcfbfa60436bbad5fa6a850b5ab9c40fbc646","unresolved":false,"context_lines":[{"line_number":2888,"context_line":"        resp \u003d assert_GET_objects(req, objects)"},{"line_number":2889,"context_line":"        self.assertEqual(headers, resp.headers)"},{"line_number":2890,"context_line":""},{"line_number":2891,"context_line":"        # limit is applied to objects but not shard ranges"},{"line_number":2892,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a/c?format\u003djson\u0026limit\u003d1\u0027, method\u003d\u0027GET\u0027,"},{"line_number":2893,"context_line":"                            headers\u003d{\u0027X-Backend-Record-Type\u0027: \u0027auto\u0027})"},{"line_number":2894,"context_line":"        resp \u003d assert_GET_shard_ranges(req, shard_ranges)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_28f79cd5","line":2891,"updated":"2018-04-23 20:48:20.000000000","message":"Oh.... So we don\u0027t respect it *at all*? Hmm...","commit_id":"f47daf1131e8e45e736b693c635a7b10805c00d1"}]}
