swift/etc
Clay Gerrard 8d20e0e927 Fix object-expirer for missing objects
Currently if the object-expirer goes to delete an object and the primary nodes
are unavailable, or the object is on handoffs - the object servers are unable
to verify the x-if-delete-at timestamp and return 412, without writing a
tombstone or updating the containers.  The expirer treats 412 as success and
the dark data is not removed form the object servers nor the object removed in
the listing.

As a side effect of this bug, if the expirer encounters split brain the delete
would never get processed in the correct storage policy.

It seems it's just not correct to treat the lack of data as success.  Now the
object server will treat x-if-delete at against a non-existent object as a
404, and to distinguish from a successfull process of an x-if-delete-at
request, will return 204.

The expirer will treat a 404 response from swift as a failure, and will
continue to attempt to expire the object until it is older that it's
configurable reclaim age.  However swift will only return 404 if the majority
of nodes are able to return success, or if only even a single node is able to
accept the x-if-delete-at request the containers will get updated and
replicaiton will settle the tombstone - the subsequent x-if-delete-at request
will 412 and be removed from the queue.

It's worth noting that if an object with x-delete-at meta is DELETED (by a
client request) an async update for the expiring update containers will be
processed to remove the queue entry - but if no primary nodes handle the
DELETE request replication will never remove the expiring entry and assuming
it's scheduled for beyond the tombstones reclaim age - the queue entry will
not be processable.  In this case the expirer will attempt to DELETE the
object (and get 404s) in vain until the queue entry passes the configurable
reclaim age.

DocImpact
Implements: blueprint storage-policies
Change-Id: I66260e99fda37e97d6d2470971b6f811ee9e01be
2014-06-18 21:09:54 -07:00
..
account-server.conf-sample New log_max_line_length option. 2014-05-22 20:30:34 +00:00
container-reconciler.conf-sample Add container-reconciler daemon 2014-06-18 17:31:39 -07:00
container-server.conf-sample New log_max_line_length option. 2014-05-22 20:30:34 +00:00
container-sync-realms.conf-sample New container sync configuration option 2014-01-10 23:48:00 +00:00
dispersion.conf-sample improve docs in etc/dispersion.conf-sample 2013-10-28 17:41:09 +08:00
drive-audit.conf-sample New log_max_line_length option. 2014-05-22 20:30:34 +00:00
memcache.conf-sample Fix for memcache middleware configuration 2013-11-26 18:03:33 +00:00
mime.types-sample PEP 8 compliance and small modification to mime.types file 2010-11-23 19:26:02 -06:00
object-expirer.conf-sample Fix object-expirer for missing objects 2014-06-18 21:09:54 -07:00
object-server.conf-sample New log_max_line_length option. 2014-05-22 20:30:34 +00:00
proxy-server.conf-sample Add Storage Policy Support to Container Sync 2014-06-18 21:09:54 -07:00
rsyncd.conf-sample Added missing lockfile configuration to sample rsync.conf 2011-02-12 18:27:59 -08:00
swift-rsyslog.conf-sample Add sample rsyslog.conf. 2013-06-25 10:24:26 +08:00
swift.conf-sample Add Storage Policy Support 2014-06-18 17:31:37 -07:00