osd loses object deletes by some creates in the same transaction
We found a missing object in alexandria, caused by the gateway trying to delete an object that seems to not actually exist. RGW deletes actually come in a transaction of (setxattr, setxattr, delete), so if the object doesn't exist before it can get created by this delete op!
The OSDs should be able to handle this, but because the object doesn't exist before the transaction and the setxattr silently creates the object (it doesn't know whether it existed before or not), we're running into some trouble. It revolves mostly around those code paths which set maybe_created, and how that doesn't seem to translate into new_obs->exists.
Sam suggested that I could try just replacing maybe_created with exists = true, although I suspect there's a reason we don't do that already...come up with a safe fix and implement!