)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ccf15235e47ff5a5fd8fc3e8121dbf56e696f446","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4d3d3782_66c4edd5","updated":"2025-01-31 20:18:05.000000000","message":"I think all the test_expier tests would be good to merge\n\nthe test_server stuff is actually asking some questions about what we should do if anything for some other edge cases...","commit_id":"faa74b0c38114452cf1b0c8935d87f4023a6317c"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"05c64ea57d9be3fba6be1453a2ec4152013b6128","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"728bb8f2_a11c5130","updated":"2025-02-04 16:57:43.000000000","message":"Thanks a lot for the new test cases, the new stale_task_over_deleted_object case is great, it\u0027s important to understand all the impacts of the new changes to the existing behaviors. \n\nI have squashed this sq patch.","commit_id":"faa74b0c38114452cf1b0c8935d87f4023a6317c"}],"test/unit/obj/test_server.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"05c64ea57d9be3fba6be1453a2ec4152013b6128","unresolved":false,"context_lines":[{"line_number":7978,"context_line":"        wrong_delete_at \u003d utils.normalize_delete_at_timestamp("},{"line_number":7979,"context_line":"            next(self.ts).normal)"},{"line_number":7980,"context_line":""},{"line_number":7981,"context_line":"        # Create an object with an an expiration time."},{"line_number":7982,"context_line":"        req \u003d Request.blank("},{"line_number":7983,"context_line":"            \u0027/sda1/p/a/c/o\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":7984,"context_line":"            headers\u003dself._update_delete_at_headers({"}],"source_content_type":"text/x-python","patch_set":1,"id":"91824619_934c91b9","line":7981,"updated":"2025-02-04 16:57:43.000000000","message":"I got extra ``an`` removed.","commit_id":"faa74b0c38114452cf1b0c8935d87f4023a6317c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ccf15235e47ff5a5fd8fc3e8121dbf56e696f446","unresolved":true,"context_lines":[{"line_number":8017,"context_line":"            }"},{"line_number":8018,"context_line":"        )"},{"line_number":8019,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":8020,"context_line":"        self.assertEqual(resp.status_int, 500)"},{"line_number":8021,"context_line":""},{"line_number":8022,"context_line":"        # if you send the *correct* x-delete-at the invalid task timestamp"},{"line_number":8023,"context_line":"        # doesn\u0027t even matter! (fair enough)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e6190129_69685594","line":8020,"updated":"2025-01-31 20:18:05.000000000","message":"this could probably be improved to return a 4xx error","commit_id":"faa74b0c38114452cf1b0c8935d87f4023a6317c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ccf15235e47ff5a5fd8fc3e8121dbf56e696f446","unresolved":true,"context_lines":[{"line_number":8119,"context_line":"        )"},{"line_number":8120,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":8121,"context_line":"        # this should 409 right?"},{"line_number":8122,"context_line":"        self.assertEqual(resp.status_int, 412)"},{"line_number":8123,"context_line":"        # this is unfortunate"},{"line_number":8124,"context_line":"        self.assertNotIn(\u0027X-Backend-Timestamp\u0027, resp.headers)"},{"line_number":8125,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e174281c_c9fedd6a","line":8122,"updated":"2025-01-31 20:18:05.000000000","message":"wat?  why is this 412?  I was expecting 404.  It has to change to 404 once the tombstone is reclaimed right?\n\nIdeally I think this could return 409 x-timestamp \u003e task-timestamp","commit_id":"faa74b0c38114452cf1b0c8935d87f4023a6317c"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"619ef6cfdbf92f30c19a3dee0e513353698b97e0","unresolved":true,"context_lines":[{"line_number":8119,"context_line":"        )"},{"line_number":8120,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":8121,"context_line":"        # this should 409 right?"},{"line_number":8122,"context_line":"        self.assertEqual(resp.status_int, 412)"},{"line_number":8123,"context_line":"        # this is unfortunate"},{"line_number":8124,"context_line":"        self.assertNotIn(\u0027X-Backend-Timestamp\u0027, resp.headers)"},{"line_number":8125,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfa07091_fdb23cae","line":8122,"in_reply_to":"be7ef5e7_e9a1db26","updated":"2025-02-04 17:39:08.000000000","message":"to be specific, there is only tombstone file left after DELETE, so ``diskfile.open()`` returns ``swift.common.exceptions.DiskFileDeleted`` when calling\n```\norig_metadata \u003d disk_file.read_metadata(current_time\u003dreq_timestamp)\n```\n\n``response_class`` was assigned to ``HTTPNotFound`` correctly, but later the current double handling checked ``x-delete-at`` timestamp and ignored the previous ``HTTPNotFound`` error code. I will add those findings in the comments of this test case.\n\nThe is an existing behavior, the new 409 patch won\u0027t change it.","commit_id":"faa74b0c38114452cf1b0c8935d87f4023a6317c"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"05c64ea57d9be3fba6be1453a2ec4152013b6128","unresolved":true,"context_lines":[{"line_number":8119,"context_line":"        )"},{"line_number":8120,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":8121,"context_line":"        # this should 409 right?"},{"line_number":8122,"context_line":"        self.assertEqual(resp.status_int, 412)"},{"line_number":8123,"context_line":"        # this is unfortunate"},{"line_number":8124,"context_line":"        self.assertNotIn(\u0027X-Backend-Timestamp\u0027, resp.headers)"},{"line_number":8125,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"be7ef5e7_e9a1db26","line":8122,"in_reply_to":"e174281c_c9fedd6a","updated":"2025-02-04 16:57:43.000000000","message":"did some debugging, and found out that the deleted object doesn\u0027t have \u0027X-Delete-At\u0027 header anymore, so ``orig_delete_at \u003d Timestamp(orig_metadata.get(\u0027X-Delete-At\u0027) or 0)`` returns ``0`` at here:\nhttps://github.com/NVIDIA/swift/blob/master/swift/obj/server.py#L1267","commit_id":"faa74b0c38114452cf1b0c8935d87f4023a6317c"}]}
