)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ec35932b6a9fc8cafb1cba82aa8b9645d7bbb45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7b6ba0b8_0920f59a","updated":"2026-08-28 23:00:22.000000000","message":"I think there\u0027s some next behaviors here described in the tests, and I *do* think there is a \"tunable space\" where your \"patience\" depends on your operational expierence with YOUR cluster when running rebalance.\n\nJust like supression I think the trade off has to do with a false-404 vs 503 ... but I\u0027d need to actually observe some requests in practice to convince myself that after `[404, 404, 404, 404, ...] * ndata + N` I *really* think it\u0027s \"worth waiting\" for that 200 which will make the whole thing 503 (or 416!?)","commit_id":"02ee1f408f30ab581b721c9d50d49cf00e03db00"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ec35932b6a9fc8cafb1cba82aa8b9645d7bbb45","unresolved":true,"context_lines":[{"line_number":2553,"context_line":"        range_unsatisfiable \u003d self.bad_buckets.get("},{"line_number":2554,"context_line":"            HTTP_REQUESTED_RANGE_NOT_SATISFIABLE)"},{"line_number":2555,"context_line":"        if range_unsatisfiable and range_unsatisfiable.shortfall \u003c\u003d 0:"},{"line_number":2556,"context_line":"            return HTTP_REQUESTED_RANGE_NOT_SATISFIABLE"},{"line_number":2557,"context_line":"        # This deliberately mirrors best_response()\u0027s 4xx grouping. A 404 is"},{"line_number":2558,"context_line":"        # not special once another collected client error would outrank it."},{"line_number":2559,"context_line":"        # The outstanding replies extend the quorum denominator, so the"}],"source_content_type":"text/x-python","patch_set":1,"id":"c59bef85_6465c1af","line":2556,"updated":"2026-08-28 23:00:22.000000000","message":"I don\u0027t love this - I feel like it\u0027s pointing at something about conflicting responsibility","commit_id":"02ee1f408f30ab581b721c9d50d49cf00e03db00"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ec35932b6a9fc8cafb1cba82aa8b9645d7bbb45","unresolved":true,"context_lines":[{"line_number":2566,"context_line":"        # judgment about the headers available here. The final response path"},{"line_number":2567,"context_line":"        # only drops untimestamped primary 404s, but treating this many 404s"},{"line_number":2568,"context_line":"        # as absent makes the early decision safe in the rebalance-miss case."},{"line_number":2569,"context_line":"        remaining_suppression \u003d max(0, suppressed)"},{"line_number":2570,"context_line":"        for status, bucket in self.bad_buckets.items():"},{"line_number":2571,"context_line":"            for getter, _parts_iter in bucket.get_responses():"},{"line_number":2572,"context_line":"                if not is_client_error(status):"}],"source_content_type":"text/x-python","patch_set":1,"id":"a41dcab8_d38f21b7","line":2569,"updated":"2026-08-28 23:00:22.000000000","message":"I didn\u0027t manage to pull apart the overlap with supression and this new exploration tunable - i think there should be a single knob for EC patience and 404 confidence, not a knob that stack with the decidely replicated policy","commit_id":"02ee1f408f30ab581b721c9d50d49cf00e03db00"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ec35932b6a9fc8cafb1cba82aa8b9645d7bbb45","unresolved":true,"context_lines":[{"line_number":3089,"context_line":"                    range_unsatisfiable.shortfall \u003c\u003d 0"},{"line_number":3090,"context_line":"                # A complete 416 needs no additional requests, but a getter"},{"line_number":3091,"context_line":"                # already in flight remains evidence for the common early-"},{"line_number":3092,"context_line":"                # response decision below."},{"line_number":3093,"context_line":"                requests_available \u003d not range_complete and \\"},{"line_number":3094,"context_line":"                    extra_requests \u003c max_extra_requests and ("},{"line_number":3095,"context_line":"                        node_iter.nodes_left \u003e 0 or"}],"source_content_type":"text/x-python","patch_set":1,"id":"61f99a95_bcf6ea26","line":3092,"updated":"2026-08-28 23:00:22.000000000","message":"this isn\u0027t about early return - this is about conditional request policy - I don\u0027t think it should be in this diff - something smells.","commit_id":"02ee1f408f30ab581b721c9d50d49cf00e03db00"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ec35932b6a9fc8cafb1cba82aa8b9645d7bbb45","unresolved":true,"context_lines":[{"line_number":4310,"context_line":"        self.assertIsNone(buckets.early_response_status("},{"line_number":4311,"context_line":"            2, 0, 0, max_outstanding\u003d1))"},{"line_number":4312,"context_line":"        self.assertEqual(404, buckets.early_response_status("},{"line_number":4313,"context_line":"            2, 0, 0, max_outstanding\u003d2))"},{"line_number":4314,"context_line":"        self.assertEqual(404, buckets.early_response_status("},{"line_number":4315,"context_line":"            2, 0, 0, max_outstanding\u003dNone))"},{"line_number":4316,"context_line":"        self.assertIsNone(buckets.early_response_status("}],"source_content_type":"text/x-python","patch_set":1,"id":"0f46189b_5793be87","line":4313,"updated":"2026-08-28 23:00:22.000000000","message":"I think the default EC test policy is 10+4 - I think the max_outstanding\u003d2 is here (with the `[404] * 9` setup) might be pointing at the problem with supression?\n\nI feel like the default 2 * replica requests could go up to 18?","commit_id":"02ee1f408f30ab581b721c9d50d49cf00e03db00"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6ec35932b6a9fc8cafb1cba82aa8b9645d7bbb45","unresolved":true,"context_lines":[{"line_number":4314,"context_line":"        self.assertEqual(404, buckets.early_response_status("},{"line_number":4315,"context_line":"            2, 0, 0, max_outstanding\u003dNone))"},{"line_number":4316,"context_line":"        self.assertIsNone(buckets.early_response_status("},{"line_number":4317,"context_line":"            2, 0, self.policy.ec_ndata - 2))"},{"line_number":4318,"context_line":""},{"line_number":4319,"context_line":"    def test_early_response_status_keeps_collected_frag(self):"},{"line_number":4320,"context_line":"        # A timestamped tombstone may trump an older collected fragment when"}],"source_content_type":"text/x-python","patch_set":1,"id":"b7812297_c6a30b8c","line":4317,"updated":"2026-08-28 23:00:22.000000000","message":"where is *this* boundary coming from?!","commit_id":"02ee1f408f30ab581b721c9d50d49cf00e03db00"}]}
