)]}'
{"swift/common/middleware/slo.py":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"276a5e43f77167c357e4a5fef97c23e3b7da5b51","unresolved":false,"context_lines":[{"line_number":844,"context_line":"                \u0027x-static-large-object\u0027))"},{"line_number":845,"context_line":"            if not slo_marker:  # will also catch non-2xx responses"},{"line_number":846,"context_line":"                got_timestamp \u003d self._response_header_value("},{"line_number":847,"context_line":"                    \u0027x-backend-timestamp\u0027) or \u00270\u0027"},{"line_number":848,"context_line":"                if Timestamp(got_timestamp) \u003e\u003d Timestamp(slo_timestamp):"},{"line_number":849,"context_line":"                    # We\u0027ve got a newer response available, so serve that."},{"line_number":850,"context_line":"                    # Note that if there\u0027s data, it\u0027s going to be a 200 now,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_61f6cdfc","line":847,"updated":"2019-07-22 14:52:06.000000000","message":"wondering if it would be possible to get a 404, but not from a tombstone, maybe just from fetching from handoffs that never heard of this obj?? in this case we shouldn\u0027t return a 503 correct? thoughts?","commit_id":"ef5a37c2bf5a32b0fa6404974aa76332a88c0841"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"906a81397608f5544aa4fe24e09e187affa08814","unresolved":false,"context_lines":[{"line_number":844,"context_line":"                \u0027x-static-large-object\u0027))"},{"line_number":845,"context_line":"            if not slo_marker:  # will also catch non-2xx responses"},{"line_number":846,"context_line":"                got_timestamp \u003d self._response_header_value("},{"line_number":847,"context_line":"                    \u0027x-backend-timestamp\u0027) or \u00270\u0027"},{"line_number":848,"context_line":"                if Timestamp(got_timestamp) \u003e\u003d Timestamp(slo_timestamp):"},{"line_number":849,"context_line":"                    # We\u0027ve got a newer response available, so serve that."},{"line_number":850,"context_line":"                    # Note that if there\u0027s data, it\u0027s going to be a 200 now,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_9c6332b2","line":847,"in_reply_to":"7faddb67_61f6cdfc","updated":"2019-07-22 15:42:29.000000000","message":"Absolutely possible, but it wouldn\u0027t have a timestamp. As a result, the response is considered \"old\", leading us to the 503.","commit_id":"ef5a37c2bf5a32b0fa6404974aa76332a88c0841"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fa0871a6a0cd0ffdaebd03a83683fb7fc3f87b8e","unresolved":false,"context_lines":[{"line_number":844,"context_line":"                \u0027x-static-large-object\u0027))"},{"line_number":845,"context_line":"            if not slo_marker:  # will also catch non-2xx responses"},{"line_number":846,"context_line":"                got_timestamp \u003d self._response_header_value("},{"line_number":847,"context_line":"                    \u0027x-backend-timestamp\u0027) or \u00270\u0027"},{"line_number":848,"context_line":"                if Timestamp(got_timestamp) \u003e\u003d Timestamp(slo_timestamp):"},{"line_number":849,"context_line":"                    # We\u0027ve got a newer response available, so serve that."},{"line_number":850,"context_line":"                    # Note that if there\u0027s data, it\u0027s going to be a 200 now,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_b7c3a738","line":847,"in_reply_to":"7faddb67_9c6332b2","updated":"2019-07-22 16:51:20.000000000","message":"\u003e in this case we shouldn\u0027t return a 503 correct?\n\nOh, I misread the comment as we *should* return a 503! Sorry.\n\nNo, I very much think that 503 is appropriate. We know there\u0027s newer data (it had an X-Static-Large-Object header which sent us down this path), but when we tried to get all of it, that request failed. It wasn\u0027t available when we knew that it should be.\n\nNow, the client will most likely handle that 503 by retrying the request, and that will be reasonably likely to 404 all on its own. But *at that point* we don\u0027t have any reason to second-guess that -- we\u0027ve lost all the context that made us think the object should exist.","commit_id":"ef5a37c2bf5a32b0fa6404974aa76332a88c0841"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"276a5e43f77167c357e4a5fef97c23e3b7da5b51","unresolved":false,"context_lines":[{"line_number":864,"context_line":"                    return resp(req.environ, start_response)"},{"line_number":865,"context_line":"                else:"},{"line_number":866,"context_line":"                    # We saw newer data that indicated it\u0027s an SLO, but"},{"line_number":867,"context_line":"                    # couldn\u0027t fetch the whole thing; 503 seems reasonable?"},{"line_number":868,"context_line":"                    close_if_possible(resp_iter)"},{"line_number":869,"context_line":"                    raise HTTPServiceUnavailable(request\u003dreq)"},{"line_number":870,"context_line":"            # NB: we might have gotten an out-of-date manifest -- that\u0027s OK;"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_26cf8b2a","line":867,"range":{"start_line":867,"start_character":22,"end_line":867,"end_character":53},"updated":"2019-07-22 14:52:06.000000000","message":"k, this is the case for getting the same SLO object as the initial request but now got a non-2xx response.","commit_id":"ef5a37c2bf5a32b0fa6404974aa76332a88c0841"}],"test/unit/common/middleware/test_slo.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"906a81397608f5544aa4fe24e09e187affa08814","unresolved":false,"context_lines":[{"line_number":2415,"context_line":"                            \u0027X-Backend-Timestamp\u0027: \u00271234\u0027,"},{"line_number":2416,"context_line":"                            \u0027Etag\u0027: md5hex(big_manifest)},"},{"line_number":2417,"context_line":"              big_manifest),"},{"line_number":2418,"context_line":"             (swob.HTTPNotFound, {}, None)])"},{"line_number":2419,"context_line":""},{"line_number":2420,"context_line":"        req \u003d Request.blank("},{"line_number":2421,"context_line":"            \u0027/v1/AUTH_test/gettest/big_manifest\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_bc6b8e83","line":2418,"updated":"2019-07-22 15:42:29.000000000","message":"This simulates the 404-never-heard-of-it case.","commit_id":"ef5a37c2bf5a32b0fa6404974aa76332a88c0841"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"276a5e43f77167c357e4a5fef97c23e3b7da5b51","unresolved":false,"context_lines":[{"line_number":2542,"context_line":"                            \u0027X-Backend-Timestamp\u0027: \u00271234\u0027,"},{"line_number":2543,"context_line":"                            \u0027Etag\u0027: md5hex(big_manifest)},"},{"line_number":2544,"context_line":"              big_manifest),"},{"line_number":2545,"context_line":"             (swob.HTTPNotFound, {\u0027X-Backend-Timestamp\u0027: \u00271345\u0027}, None)])"},{"line_number":2546,"context_line":""},{"line_number":2547,"context_line":"        req \u003d Request.blank("},{"line_number":2548,"context_line":"            \u0027/v1/AUTH_test/gettest/big_manifest\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_a1d5a545","line":2545,"updated":"2019-07-22 14:52:06.000000000","message":"it is possible to get a 404 without a tombstone?","commit_id":"ef5a37c2bf5a32b0fa6404974aa76332a88c0841"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"906a81397608f5544aa4fe24e09e187affa08814","unresolved":false,"context_lines":[{"line_number":2542,"context_line":"                            \u0027X-Backend-Timestamp\u0027: \u00271234\u0027,"},{"line_number":2543,"context_line":"                            \u0027Etag\u0027: md5hex(big_manifest)},"},{"line_number":2544,"context_line":"              big_manifest),"},{"line_number":2545,"context_line":"             (swob.HTTPNotFound, {\u0027X-Backend-Timestamp\u0027: \u00271345\u0027}, None)])"},{"line_number":2546,"context_line":""},{"line_number":2547,"context_line":"        req \u003d Request.blank("},{"line_number":2548,"context_line":"            \u0027/v1/AUTH_test/gettest/big_manifest\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_9c8d7233","line":2545,"in_reply_to":"7faddb67_a1d5a545","updated":"2019-07-22 15:42:29.000000000","message":"For sure; see above comment. There are two flavors of 404, and they only differ in this one header. If there\u0027s a tombstone on disk, you\u0027ll see something like\n\n \u003c HTTP/1.1 404 Not Found\n \u003c Content-Type: text/html; charset\u003dUTF-8\n \u003c X-Backend-Timestamp: 1563584905.59010\n \u003c Content-Length: 70\n \u003c Date: Mon, 22 Jul 2019 15:32:33 GMT\n\nIf there isn\u0027t, it\u0027s more like\n\n \u003c HTTP/1.1 404 Not Found\n \u003c Content-Type: text/html; charset\u003dUTF-8\n \u003c Content-Length: 70\n \u003c Date: Mon, 22 Jul 2019 15:32:42 GMT","commit_id":"ef5a37c2bf5a32b0fa6404974aa76332a88c0841"}]}
