)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"f9ce774c8f5caa9567ab0f4845c3bec5f1c1141f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"94c3a2e4_cc4a133c","updated":"2023-08-29 07:30:29.000000000","message":"Still a WIP. but making progress. Also rebased of JianJain\u0027s latest patchset","commit_id":"eb1a654bb5a9bcfb3e2212bd014207b30f3ae338"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"9955bc67ba9a1d70cceba01cfa5c1fdecf523c93","unresolved":true,"context_lines":[{"line_number":4675,"context_line":"            raise ValueError("},{"line_number":4676,"context_line":"                \"Name must be of the form \u0027\u003caccount\u003e/\u003ccontainer\u003e\u0027, got %r\" %"},{"line_number":4677,"context_line":"                path)"},{"line_number":4678,"context_line":"        self.account, self.container \u003d path.split(\u0027/\u0027)"},{"line_number":4679,"context_line":""},{"line_number":4680,"context_line":"    @property"},{"line_number":4681,"context_line":"    def lower(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"671b08c2_68728812","line":4678,"updated":"2023-08-28 07:17:02.000000000","message":"Pulled this up from the shardrange class as we need the account and container checks, although I guess I could refactor that.","commit_id":"026c13babdaa975f2ea961556ea9dc0faafe0218"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"f9ce774c8f5caa9567ab0f4845c3bec5f1c1141f","unresolved":true,"context_lines":[{"line_number":4766,"context_line":"            yield item"},{"line_number":4767,"context_line":""},{"line_number":4768,"context_line":"    def __len__(self):"},{"line_number":4769,"context_line":"        return len(self.bounds)"},{"line_number":4770,"context_line":""},{"line_number":4771,"context_line":""},{"line_number":4772,"context_line":"class ShardName(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"8793a946_c2269fdd","line":4769,"updated":"2023-08-29 07:30:29.000000000","message":"May not need these improvements anymore. Using the bounds list doesn\u0027t work in all situations (reverse namespace listing). So this patchset has moved back to using a list of namespaces and only turning it into a bounds list when storing in memcache. (see having tests helps find issues!)","commit_id":"eb1a654bb5a9bcfb3e2212bd014207b30f3ae338"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0f21dd27bf7bc062997abb98d0d07fa0994d455f","unresolved":false,"context_lines":[{"line_number":4766,"context_line":"            yield item"},{"line_number":4767,"context_line":""},{"line_number":4768,"context_line":"    def __len__(self):"},{"line_number":4769,"context_line":"        return len(self.bounds)"},{"line_number":4770,"context_line":""},{"line_number":4771,"context_line":""},{"line_number":4772,"context_line":"class ShardName(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"31913791_6f4ee677","line":4769,"in_reply_to":"8793a946_c2269fdd","updated":"2023-08-31 01:47:24.000000000","message":"Ack","commit_id":"eb1a654bb5a9bcfb3e2212bd014207b30f3ae338"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"679a3f18bcfe74aa640bf764812f30de014c99f4","unresolved":true,"context_lines":[{"line_number":4439,"context_line":"    :param upper: the upper bound of object names contained in the namespace;"},{"line_number":4440,"context_line":"        the upper bound *is* included in the namespace."},{"line_number":4441,"context_line":"    \"\"\""},{"line_number":4442,"context_line":"    __slots__ \u003d (\u0027_lower\u0027, \u0027_upper\u0027, \u0027account\u0027, \u0027container\u0027)"},{"line_number":4443,"context_line":""},{"line_number":4444,"context_line":"    @functools.total_ordering"},{"line_number":4445,"context_line":"    class MaxBound(NamespaceOuterBound):"}],"source_content_type":"text/x-python","patch_set":6,"id":"2332c623_104cd9d5","line":4442,"updated":"2023-08-31 05:23:24.000000000","message":"Since the simplified Namespace structure is mainly for performance optimization purpose, we would have to redo all performance again if we add back any new instance variable.","commit_id":"6ac2995c7e0d975e877ea65ae03e6351a55e2456"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ce510a0246ef228fe62faf1f27d3204bc6a7af7c","unresolved":true,"context_lines":[{"line_number":4439,"context_line":"    :param upper: the upper bound of object names contained in the namespace;"},{"line_number":4440,"context_line":"        the upper bound *is* included in the namespace."},{"line_number":4441,"context_line":"    \"\"\""},{"line_number":4442,"context_line":"    __slots__ \u003d (\u0027_lower\u0027, \u0027_upper\u0027, \u0027account\u0027, \u0027container\u0027)"},{"line_number":4443,"context_line":""},{"line_number":4444,"context_line":"    @functools.total_ordering"},{"line_number":4445,"context_line":"    class MaxBound(NamespaceOuterBound):"}],"source_content_type":"text/x-python","patch_set":6,"id":"418f70e9_2900e53d","line":4442,"in_reply_to":"2332c623_104cd9d5","updated":"2023-08-31 07:05:41.000000000","message":"kk, this was an attempt to make us be able to use namespaces just like we do shard ranges. I guess I could try and rethink this. In thoery account + container is smaller then name by a \u0027/\u0027 :P","commit_id":"6ac2995c7e0d975e877ea65ae03e6351a55e2456"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0f21dd27bf7bc062997abb98d0d07fa0994d455f","unresolved":true,"context_lines":[{"line_number":2439,"context_line":"            params[\u0027includes\u0027] \u003d str_to_wsgi(includes)"},{"line_number":2440,"context_line":"        if states:"},{"line_number":2441,"context_line":"            params[\u0027states\u0027] \u003d states"},{"line_number":2442,"context_line":"        headers \u003d {\u0027X-Backend-Record-Type\u0027: \u0027namespace\u0027}"},{"line_number":2443,"context_line":"        listing, response \u003d self._get_container_listing("},{"line_number":2444,"context_line":"            req, account, container, headers\u003dheaders, params\u003dparams)"},{"line_number":2445,"context_line":"        return self._parse_namespaces(req, listing, response), response"}],"source_content_type":"text/x-python","patch_set":5,"id":"5974cf03_e47befc5","line":2442,"updated":"2023-08-31 01:47:24.000000000","message":"Might need to think about if passing this in initially makes sense from a upgrade (talking to an old container server) perspective.","commit_id":"e7b484b1337de7a4a894b261644f2efcce9b1a47"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"679a3f18bcfe74aa640bf764812f30de014c99f4","unresolved":true,"context_lines":[{"line_number":2439,"context_line":"            params[\u0027includes\u0027] \u003d str_to_wsgi(includes)"},{"line_number":2440,"context_line":"        if states:"},{"line_number":2441,"context_line":"            params[\u0027states\u0027] \u003d states"},{"line_number":2442,"context_line":"        headers \u003d {\u0027X-Backend-Record-Type\u0027: \u0027namespace\u0027}"},{"line_number":2443,"context_line":"        listing, response \u003d self._get_container_listing("},{"line_number":2444,"context_line":"            req, account, container, headers\u003dheaders, params\u003dparams)"},{"line_number":2445,"context_line":"        return self._parse_namespaces(req, listing, response), response"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f6bb533_23ccf81c","line":2442,"in_reply_to":"5974cf03_e47befc5","updated":"2023-08-31 05:23:24.000000000","message":"Yeah, two options I am thinking. First option: have get_namespace container change in first release, and this patch in second release. Second: if retrieving \u0027namespace\u0027 fails, it falls back to retrieving \"shard\". Then this new proxy change could talk to an old container server during cluster upgrade. The first option would work for downstream swiftstack releases, and second option could additionally work with upstream releases which probably will have both two patches.","commit_id":"e7b484b1337de7a4a894b261644f2efcce9b1a47"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"96a9d2ca349f75054c0082027011830f76875024","unresolved":true,"context_lines":[{"line_number":2409,"context_line":""},{"line_number":2410,"context_line":"        try:"},{"line_number":2411,"context_line":"            namespaces \u003d self._listing_to_namespaces(listing, record_type)"},{"line_number":2412,"context_line":"            return namespaces"},{"line_number":2413,"context_line":"        except (ValueError, TypeError, KeyError) as err:"},{"line_number":2414,"context_line":"            self.logger.error("},{"line_number":2415,"context_line":"                \"Failed to get shard ranges from %s: invalid data: %r\","}],"source_content_type":"text/x-python","patch_set":6,"id":"7fb68dcb_f6b5107d","line":2412,"updated":"2023-09-11 07:45:57.000000000","message":"Hmm, this wont work for the sharder, as I\u0027m forcing namespaces here. opps. need to fix this.","commit_id":"6ac2995c7e0d975e877ea65ae03e6351a55e2456"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0f21dd27bf7bc062997abb98d0d07fa0994d455f","unresolved":true,"context_lines":[{"line_number":280,"context_line":"        # given that we sent \u0027x-backend-override-shard-name-filter\u003dsharded\u0027 we"},{"line_number":281,"context_line":"        # should only receive back \u0027x-backend-override-shard-name-filter\u003dtrue\u0027"},{"line_number":282,"context_line":"        # if the sharding state is \u0027sharded\u0027, but check them both anyway..."},{"line_number":283,"context_line":"        if (resp_record_type in (\u0027shard\u0027, \u0027namespace_list\u0027) and"},{"line_number":284,"context_line":"                sharding_state \u003d\u003d \u0027sharded\u0027 and"},{"line_number":285,"context_line":"                complete_listing):"},{"line_number":286,"context_line":"            ns_bound_list \u003d self._store_shard_ranges_in_cache(req, resp)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9bdff230_7f169db4","line":283,"updated":"2023-08-31 01:47:24.000000000","message":"Ops this needs to be updated to \u0027namespace\u0027","commit_id":"e7b484b1337de7a4a894b261644f2efcce9b1a47"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ce510a0246ef228fe62faf1f27d3204bc6a7af7c","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        # given that we sent \u0027x-backend-override-shard-name-filter\u003dsharded\u0027 we"},{"line_number":281,"context_line":"        # should only receive back \u0027x-backend-override-shard-name-filter\u003dtrue\u0027"},{"line_number":282,"context_line":"        # if the sharding state is \u0027sharded\u0027, but check them both anyway..."},{"line_number":283,"context_line":"        if (resp_record_type in (\u0027shard\u0027, \u0027namespace_list\u0027) and"},{"line_number":284,"context_line":"                sharding_state \u003d\u003d \u0027sharded\u0027 and"},{"line_number":285,"context_line":"                complete_listing):"},{"line_number":286,"context_line":"            ns_bound_list \u003d self._store_shard_ranges_in_cache(req, resp)"}],"source_content_type":"text/x-python","patch_set":5,"id":"8162f4c9_aa0744ff","line":283,"in_reply_to":"9bdff230_7f169db4","updated":"2023-08-31 07:05:41.000000000","message":"Done","commit_id":"e7b484b1337de7a4a894b261644f2efcce9b1a47"}]}
