ReplicatedPG: treat object as degraded until on_global_recover

Otherwise, an op might slip by between on_local_recover and
on_global_recover.

Signed-off-by: Samuel Just <sjust@redhat.com>
This commit is contained in:
Samuel Just 2015-08-17 11:21:27 -07:00
parent 5390072c8c
commit 79f310ac4d

View File

@ -413,6 +413,12 @@ void ReplicatedPG::wait_for_all_missing(OpRequestRef op)
bool ReplicatedPG::is_degraded_or_backfilling_object(const hobject_t& soid)
{
/* The conditions below may clear (on_local_recover, before we queue
* the tranasction) before we actually requeue the degraded waiters
* in on_global_recover after the transaction completes.
*/
if (waiting_for_degraded_object.count(soid))
return true;
if (pg_log.get_missing().missing.count(soid))
return true;
assert(!actingbackfill.empty());