Project

General

Profile

Actions

Bug #1825

closed

osd loses object deletes by some creates in the same transaction

Added by Greg Farnum over 12 years ago. Updated over 12 years ago.

Status:
Resolved
Priority:
High
Assignee:
Category:
OSD
Target version:
% Done:

0%

Source:
Tags:
Backport:
Regression:
Severity:
Reviewed:
Affected Versions:
ceph-qa-suite:
Pull request ID:
Crash signature (v1):
Crash signature (v2):

Description

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!

Actions

Also available in: Atom PDF