)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7066a00780b5a5bd34e6ec43496b2a3c085b0960","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6fbd5bae_71c05361","updated":"2024-08-21 15:39:18.000000000","message":"Thanks @Clay. I think I ended up close to this in the parent.","commit_id":"f4132917c0693cb4d967edc32c11b15bbd8e1706"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c7cdffe8506245f01f7a7e39b5b8f30775e2dad2","unresolved":true,"context_lines":[{"line_number":2140,"context_line":"                    and status \u003d\u003d 404 and"},{"line_number":2141,"context_line":"                    not Timestamp(HeaderKeyDict(header_items).get("},{"line_number":2142,"context_line":"                        \u0027x-backend-timestamp\u0027) or \u00270\u0027)):"},{"line_number":2143,"context_line":"                if not overrides or status not in overrides:"},{"line_number":2144,"context_line":"                    continue"},{"line_number":2145,"context_line":"            response.append(resp)"},{"line_number":2146,"context_line":"            statuses.append(resp[0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"a47bcaa0_28d710c4","line":2143,"updated":"2024-08-20 03:59:29.000000000","message":"from my current understanding, I feel Al\u0027s patch is correct to have``_make_request`` call ``_is_useful_response`` and don\u0027t touch ``overrides``, since ``overrides`` and 404-\u003e204 conversion should be for the authoritative 404 responses with x-backend-timestamp header.","commit_id":"f4132917c0693cb4d967edc32c11b15bbd8e1706"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"96a8ecc89c2a57b7348c3f5915f59d1f6c41e32c","unresolved":true,"context_lines":[{"line_number":2140,"context_line":"                    and status \u003d\u003d 404 and"},{"line_number":2141,"context_line":"                    not Timestamp(HeaderKeyDict(header_items).get("},{"line_number":2142,"context_line":"                        \u0027x-backend-timestamp\u0027) or \u00270\u0027)):"},{"line_number":2143,"context_line":"                if not overrides or status not in overrides:"},{"line_number":2144,"context_line":"                    continue"},{"line_number":2145,"context_line":"            response.append(resp)"},{"line_number":2146,"context_line":"            statuses.append(resp[0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"fe269665_9ed48450","line":2143,"in_reply_to":"49e6e697_83191d10","updated":"2024-08-21 15:31:21.000000000","message":"is this overrides condition necessary? AFAICT overrides are only passed with a DELETE and DELETE responses always have x-backend-timestamp, I think?\n\nHowever, there\u0027s likely a bunch of tests that don\u0027t setup the x-backend-timestamp in mocked responses :(","commit_id":"f4132917c0693cb4d967edc32c11b15bbd8e1706"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7ab86b6e2a2f47335bcaea033a969a738cd9c000","unresolved":true,"context_lines":[{"line_number":2140,"context_line":"                    and status \u003d\u003d 404 and"},{"line_number":2141,"context_line":"                    not Timestamp(HeaderKeyDict(header_items).get("},{"line_number":2142,"context_line":"                        \u0027x-backend-timestamp\u0027) or \u00270\u0027)):"},{"line_number":2143,"context_line":"                if not overrides or status not in overrides:"},{"line_number":2144,"context_line":"                    continue"},{"line_number":2145,"context_line":"            response.append(resp)"},{"line_number":2146,"context_line":"            statuses.append(resp[0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"49e6e697_83191d10","line":2143,"in_reply_to":"a47bcaa0_28d710c4","updated":"2024-08-20 12:47:54.000000000","message":"unfortunately the way overrides were implemented for DELETE they don\u0027t consider x-backend-timestamp. AFICT they just turn 404s into 204s if there\u0027s not already enough 404s or 204s to compute a quorom:\n\nhttps://github.com/NVIDIA/swift/blob/master/swift/proxy/controllers/base.py#L2205\n\nAnd that makes sense because the object-server will write a tombstone even if there\u0027s no datafile and then return 404:\n\nhttps://github.com/NVIDIA/swift/blob/master/swift/obj/server.py#L1248-L1250","commit_id":"f4132917c0693cb4d967edc32c11b15bbd8e1706"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7066a00780b5a5bd34e6ec43496b2a3c085b0960","unresolved":true,"context_lines":[{"line_number":2150,"context_line":"        finished_quickly \u003d pile.waitall(self.app.post_quorum_timeout)"},{"line_number":2151,"context_line":"        for resp in finished_quickly:"},{"line_number":2152,"context_line":"            if not resp:"},{"line_number":2153,"context_line":"                continue"},{"line_number":2154,"context_line":"            response.append(resp)"},{"line_number":2155,"context_line":"            statuses.append(resp[0])"},{"line_number":2156,"context_line":"        while len(response) \u003c node_number:"}],"source_content_type":"text/x-python","patch_set":1,"id":"22cf7100_dd836b89","line":2153,"updated":"2024-08-21 15:39:18.000000000","message":"we\u0027ll need to do the handoff check again here","commit_id":"f4132917c0693cb4d967edc32c11b15bbd8e1706"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7066a00780b5a5bd34e6ec43496b2a3c085b0960","unresolved":true,"context_lines":[{"line_number":590,"context_line":"        with set_http_connect(204, 507, Timeout(), 404):"},{"line_number":591,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":592,"context_line":"        # status_overrides passed to make_requests converts the 404 to a 204..."},{"line_number":593,"context_line":"        self.assertEqual(resp.status_int, 204)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    def test_DELETE_half_not_found_statuses(self):"},{"line_number":596,"context_line":"        self.obj_ring.set_replicas(4)"}],"source_content_type":"text/x-python","patch_set":1,"id":"cff3fedf_c4c982ea","line":593,"updated":"2024-08-21 15:39:18.000000000","message":"right!","commit_id":"f4132917c0693cb4d967edc32c11b15bbd8e1706"}]}
