From: Sage Weil Date: Thu, 15 Mar 2012 17:35:40 +0000 (-0700) Subject: osd: maybe clear DEGRADED on recovery completion X-Git-Tag: v0.44~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=89ccd95a1bb80eaf22dea840ccf30470a929d420;p=ceph.git osd: maybe clear DEGRADED on recovery completion We set degraded if we don't have enough "active" replicas, which excludes the backfill target. We need to recheck that when we finish recovery and the backfill target is now complete. Fixes: #2160 Signed-off-by: Sage Weil Reviewed-by: Josh Durgin --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index b32ab11d0407..1516fe205559 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -4136,6 +4136,11 @@ boost::statechart::result PG::RecoveryState::Active::react(const RecoveryComplet pg->state_clear(PG_STATE_BACKFILL); pg->state_clear(PG_STATE_RECOVERING); + // if we finished backfill, all acting are active; recheck if + // DEGRADED is appropriate. + if (pg->get_osdmap()->get_pg_size(pg->info.pgid) <= pg->acting.size()) + pg->state_clear(PG_STATE_DEGRADED); + // adjust acting set? (e.g. because backfill completed...) if (pg->acting != pg->up && !pg->choose_acting(newest_update_osd)) {