)]}'
{"swift/obj/server.py":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"e63ea614a0c16582cce25185fc8c10d1bf676c98","unresolved":false,"context_lines":[{"line_number":611,"context_line":"                return HTTPPreconditionFailed("},{"line_number":612,"context_line":"                    request\u003drequest,"},{"line_number":613,"context_line":"                    body\u003d\u0027X-If-Delete-At and X-Delete-At do not match\u0027)"},{"line_number":614,"context_line":"        if orig_delete_at:"},{"line_number":615,"context_line":"            self.delete_at_update(\u0027DELETE\u0027, orig_delete_at, account,"},{"line_number":616,"context_line":"                                  container, obj, request, device)"},{"line_number":617,"context_line":"        req_timestamp \u003d request.headers[\u0027X-Timestamp\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2Bs4s%3D","line":614,"updated":"2014-01-23 01:33:28.000000000","message":"Since replication never uses the DELETE method, we don\u0027t have to ensure this works even if the X-Replication-Backend header is set?","commit_id":"b45e9a97eec1a141dbae38169f4fbf14433ed749"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"053ede40c3a042ce19b591dd97526a701cb0de74","unresolved":false,"context_lines":[{"line_number":611,"context_line":"                return HTTPPreconditionFailed("},{"line_number":612,"context_line":"                    request\u003drequest,"},{"line_number":613,"context_line":"                    body\u003d\u0027X-If-Delete-At and X-Delete-At do not match\u0027)"},{"line_number":614,"context_line":"        if orig_delete_at:"},{"line_number":615,"context_line":"            self.delete_at_update(\u0027DELETE\u0027, orig_delete_at, account,"},{"line_number":616,"context_line":"                                  container, obj, request, device)"},{"line_number":617,"context_line":"        req_timestamp \u003d request.headers[\u0027X-Timestamp\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BskU%3D","line":614,"in_reply_to":"AAAAUH%2F%2Bs4s%3D","updated":"2014-01-23 02:54:03.000000000","message":"Did my best to explain in IRC. Hard to summarize here.","commit_id":"b45e9a97eec1a141dbae38169f4fbf14433ed749"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"4a5a0f57c97d56fa6d61d8f84ab9a5bb0bf34499","unresolved":false,"context_lines":[{"line_number":611,"context_line":"                return HTTPPreconditionFailed("},{"line_number":612,"context_line":"                    request\u003drequest,"},{"line_number":613,"context_line":"                    body\u003d\u0027X-If-Delete-At and X-Delete-At do not match\u0027)"},{"line_number":614,"context_line":"        if orig_delete_at:"},{"line_number":615,"context_line":"            self.delete_at_update(\u0027DELETE\u0027, orig_delete_at, account,"},{"line_number":616,"context_line":"                                  container, obj, request, device)"},{"line_number":617,"context_line":"        req_timestamp \u003d request.headers[\u0027X-Timestamp\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BsY8%3D","line":614,"in_reply_to":"AAAAUH%2F%2BskU%3D","updated":"2014-01-23 03:58:21.000000000","message":"Here is my feeble attempt:\n\nFirst, it is assumed that when the replicator is crawling a object storage volume, and finds an object in a given state, that that state is not partial, i.e. a tombstone indicates this object server properly completed the DELETE API, apply delete-at state updates, etc. without async updates.\n\nGiven the above, the replicator only needs to replicate the state of the object on-disk, it does not need to re-apply delete-at handling, which is state maintained outside of the object server (and assumed to have already been applied).\n\nTherefore, on this code path, in the case where the DELETE being serviced is for the ssync replicator (as opposed to the rsync one; indicated by the X-Backend-Replication header), this object server need only reflect that object deleted on-disk with a tombstone file, and does not need to perform the delete-at operation.\n\nStill not sure about the subsequent container-update operation at line 620 below.","commit_id":"b45e9a97eec1a141dbae38169f4fbf14433ed749"}]}
