)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"},"change_message_id":"62fa7d8683bc3d33ad8a62af67aeb8ccd1eee6ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1d139c31_c656cad4","updated":"2026-07-28 14:46:16.000000000","message":"Looks good to me! A summary of what I analyzed:\n\n- Great test coverage\n- Verified code wiring: NodeIter accepts inject_old_primaries (default False), GETorHEAD wires the flag gated by REPL_POLICY, _make_node_request checks old_primary with HTTP_NOT_FOUND filtering, _node_gen handles old-primary phase and budget exhaustion\n- Verified Ring.get_part_old_nodes and Ring.get_part_tiers API existence\n- Traced response handling control flow for 2xx, 404, and 5xx from old primaries","commit_id":"0642fbe805da11f33d37bb7092ef3752e83b317f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"2f8a2c92f4dfb844b13d23f225dc0a4a130ef9c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"dbb26e22_0478865e","updated":"2026-08-31 22:25:49.000000000","message":"i haven\u0027t looked at this implementation onto itself, I\u0027ve only come here by way of examination of the primary ring interface added some patches ago that is finally consumed here.","commit_id":"0642fbe805da11f33d37bb7092ef3752e83b317f"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"2f8a2c92f4dfb844b13d23f225dc0a4a130ef9c5","unresolved":true,"context_lines":[{"line_number":1833,"context_line":"        # Honor the flag only for the default ring-driven iter; an explicit"},{"line_number":1834,"context_line":"        # node_iter is curated by the caller and must not be reordered."},{"line_number":1835,"context_line":"        if inject_old_primaries and not explicit_node_iter:"},{"line_number":1836,"context_line":"            get_old \u003d getattr(ring, \u0027get_part_old_nodes\u0027, None)"},{"line_number":1837,"context_line":"            if callable(get_old):"},{"line_number":1838,"context_line":"                current_ids \u003d {n[\u0027id\u0027] for n in self.primary_nodes}"},{"line_number":1839,"context_line":"                candidates \u003d [n for n in get_old(partition)"}],"source_content_type":"text/x-python","patch_set":3,"id":"2f782e08_6e2a13a3","line":1836,"updated":"2026-08-31 22:25:49.000000000","message":"OMG!  with the `getattr` 😠","commit_id":"0642fbe805da11f33d37bb7092ef3752e83b317f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"2f8a2c92f4dfb844b13d23f225dc0a4a130ef9c5","unresolved":true,"context_lines":[{"line_number":1837,"context_line":"            if callable(get_old):"},{"line_number":1838,"context_line":"                current_ids \u003d {n[\u0027id\u0027] for n in self.primary_nodes}"},{"line_number":1839,"context_line":"                candidates \u003d [n for n in get_old(partition)"},{"line_number":1840,"context_line":"                              if n[\u0027id\u0027] not in current_ids]"},{"line_number":1841,"context_line":"                self._old_primary_nodes \u003d candidates"},{"line_number":1842,"context_line":"                self._old_primary_dev_ids \u003d frozenset("},{"line_number":1843,"context_line":"                    n[\u0027id\u0027] for n in candidates)"}],"source_content_type":"text/x-python","patch_set":3,"id":"53bcd8df_0939bead","line":1840,"updated":"2026-08-31 22:25:49.000000000","message":"that\u0027s crazy; I think the ring\u0027s `get_part_old_nodes` method already does this filtering.","commit_id":"0642fbe805da11f33d37bb7092ef3752e83b317f"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"2f8a2c92f4dfb844b13d23f225dc0a4a130ef9c5","unresolved":true,"context_lines":[{"line_number":297,"context_line":"        node_iter \u003d NodeIter("},{"line_number":298,"context_line":"            \u0027object\u0027, self.app, obj_ring, partition, self.logger, req,"},{"line_number":299,"context_line":"            policy\u003dpolicy,"},{"line_number":300,"context_line":"            inject_old_primaries\u003d(policy.policy_type \u003d\u003d REPL_POLICY))"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        resp \u003d self._get_or_head_response(req, node_iter, partition, policy)"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"4e02720d_34c69deb","line":300,"updated":"2026-08-31 22:25:49.000000000","message":"I don\u0027t see why an EC rebuild wouldn\u0027t benifit from some old primaries","commit_id":"0642fbe805da11f33d37bb7092ef3752e83b317f"}]}
