)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0c54cc13b7c11f9c8e993e61748cad162ca27ae3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"28076410_1dafbc1c","updated":"2026-05-11 15:41:12.000000000","message":"I almost just pushed over the carried patch, because I think it makes the diff a little easier to grok\n\nbut if you review this one and it\u0027s parent and diff them both against `3201b5393f3f9b7d6bbd292024257c0474e224dd` (their shared parent) I think you\u0027ll see this is actually a much simpler unified diff compared to just 939471: Limit node_iter on EC HEAD | https://review.opendev.org/c/openstack/swift/+/939471","commit_id":"66150fe7a1a3434f258ee8a34086047a2d233fa8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"9cdc81fab2f55d9f215f8dd32ad140ac8cb3a342","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0a75cb76_1876a6ed","updated":"2026-05-12 07:40:14.000000000","message":"Yeah I really like this approach! Will test it first because it\u0027s a carried patch, but if all good I think we should squash it down. Once tested I\u0027ll +2.","commit_id":"66150fe7a1a3434f258ee8a34086047a2d233fa8"}],"etc/proxy-server.conf-sample":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0c54cc13b7c11f9c8e993e61748cad162ca27ae3","unresolved":true,"context_lines":[{"line_number":440,"context_line":"# concurrent_gets \u003d off"},{"line_number":441,"context_line":"# concurrency_timeout \u003d 0.5"},{"line_number":442,"context_line":"# concurrent_ec_extra_requests \u003d 0"},{"line_number":443,"context_line":"# ec_head_node_count \u003d"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"[filter:tempauth]"},{"line_number":446,"context_line":"use \u003d egg:swift#tempauth"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"597e01b4_f5b78bf3","side":"PARENT","line":443,"updated":"2026-05-11 15:41:12.000000000","message":"I don\u0027t know if this should be here; the *other* request_node_count option is missing\n\nI don\u0027t really understand this section, why are so many of them \"missing\" a default - what is the significance of the ones that have a value like `concurreng_gets \u003d off`?","commit_id":"d280f5cff87e4ea7857c9fc9d0be8cd0224989cb"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0c54cc13b7c11f9c8e993e61748cad162ca27ae3","unresolved":true,"context_lines":[{"line_number":1088,"context_line":"            self.account_name, self.container_name, self.object_name)"},{"line_number":1089,"context_line":"        node_iter \u003d NodeIter("},{"line_number":1090,"context_line":"            \u0027object\u0027, self.app, policy.object_ring, partition, self.logger,"},{"line_number":1091,"context_line":"            req, policy\u003dpolicy)"},{"line_number":1092,"context_line":"        concurrency \u003d self.app.get_object_ring(policy.idx).replica_count \\"},{"line_number":1093,"context_line":"            if self.app.get_policy_options(policy).concurrent_gets else 1"},{"line_number":1094,"context_line":"        resp \u003d self.GETorHEAD_base("}],"source_content_type":"text/x-python","patch_set":1,"id":"aed9dba7_fdb9026d","side":"PARENT","line":1091,"updated":"2026-05-11 15:41:12.000000000","message":"the main idea of this diff is to move the common node_iter creation back into the caller - since it shared between replciated HEAD/GET + EC GET","commit_id":"d280f5cff87e4ea7857c9fc9d0be8cd0224989cb"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"9cdc81fab2f55d9f215f8dd32ad140ac8cb3a342","unresolved":true,"context_lines":[{"line_number":2968,"context_line":"            # node_count_fn from returning a value that will blow-up"},{"line_number":2969,"context_line":"            # itertools.islice"},{"line_number":2970,"context_line":"            node_count \u003d policy_options.ec_head_node_count_fn("},{"line_number":2971,"context_line":"                node_iter.num_primary_nodes)"},{"line_number":2972,"context_line":"            head_nodes \u003d itertools.islice(node_iter, node_count)"},{"line_number":2973,"context_line":"            # N.B. GetOrHeadHandler will wrap GreenthreadSafeIterator for us"},{"line_number":2974,"context_line":"            node_iter \u003d NodeIter("}],"source_content_type":"text/x-python","patch_set":1,"id":"da6fc782_17916259","line":2971,"updated":"2026-05-12 07:40:14.000000000","message":"NodeIter.num_primary_nodes FTW!","commit_id":"66150fe7a1a3434f258ee8a34086047a2d233fa8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0c54cc13b7c11f9c8e993e61748cad162ca27ae3","unresolved":true,"context_lines":[{"line_number":2969,"context_line":"            # itertools.islice"},{"line_number":2970,"context_line":"            node_count \u003d policy_options.ec_head_node_count_fn("},{"line_number":2971,"context_line":"                node_iter.num_primary_nodes)"},{"line_number":2972,"context_line":"            head_nodes \u003d itertools.islice(node_iter, node_count)"},{"line_number":2973,"context_line":"            # N.B. GetOrHeadHandler will wrap GreenthreadSafeIterator for us"},{"line_number":2974,"context_line":"            node_iter \u003d NodeIter("},{"line_number":2975,"context_line":"                \u0027object\u0027, self.app, policy.object_ring, partition, self.logger,"}],"source_content_type":"text/x-python","patch_set":1,"id":"f7e80ea8_f5a8f5df","line":2972,"updated":"2026-05-11 15:41:12.000000000","message":"... in this diff even EC HEAD path takes advantage of the `NodeIter` created by the caller by just slicing off it\u0027s already policy-preference aware sort override","commit_id":"66150fe7a1a3434f258ee8a34086047a2d233fa8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"9cdc81fab2f55d9f215f8dd32ad140ac8cb3a342","unresolved":true,"context_lines":[{"line_number":2969,"context_line":"            # itertools.islice"},{"line_number":2970,"context_line":"            node_count \u003d policy_options.ec_head_node_count_fn("},{"line_number":2971,"context_line":"                node_iter.num_primary_nodes)"},{"line_number":2972,"context_line":"            head_nodes \u003d itertools.islice(node_iter, node_count)"},{"line_number":2973,"context_line":"            # N.B. GetOrHeadHandler will wrap GreenthreadSafeIterator for us"},{"line_number":2974,"context_line":"            node_iter \u003d NodeIter("},{"line_number":2975,"context_line":"                \u0027object\u0027, self.app, policy.object_ring, partition, self.logger,"}],"source_content_type":"text/x-python","patch_set":1,"id":"551ff73c_f6319d74","line":2972,"in_reply_to":"f7e80ea8_f5a8f5df","updated":"2026-05-12 07:40:14.000000000","message":"OK yeah that is kinda cool! And alot cleaner. Just adjusting the sent in node_iter does seem like a much better and cleaner solution!","commit_id":"66150fe7a1a3434f258ee8a34086047a2d233fa8"}]}
