From: Samuel Just Date: Mon, 21 Sep 2015 18:16:49 +0000 (-0700) Subject: ReplicatedPG::hit_set_setup: fix hit_set_remove_all call X-Git-Tag: v0.94.6~84^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F5825%2Fhead;p=ceph.git ReplicatedPG::hit_set_setup: fix hit_set_remove_all call We only want to do it if the pool config changed AND we are primary && active. fd38902dd4693b9b72f7532833e78f5df2c9efa5 partially fixed a related bug. This should be backported along with it. Fixes: 13192 Signed-off-by: Samuel Just (cherry picked from commit 36e4a80c39f7daab2a35efc04650ae8b7b11c4e0) --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index a67201f5d66f..607a5ae7f231 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -10141,15 +10141,19 @@ void ReplicatedPG::hit_set_clear() void ReplicatedPG::hit_set_setup() { if (!is_active() || - !is_primary() || - !pool.info.hit_set_count || - !pool.info.hit_set_period || - pool.info.hit_set_params.get_type() == HitSet::TYPE_NONE) { + !is_primary()) { hit_set_clear(); + return; + } + + if (is_active() && is_primary() && + (!pool.info.hit_set_count || + !pool.info.hit_set_period || + pool.info.hit_set_params.get_type() == HitSet::TYPE_NONE)) { + hit_set_clear(); + // only primary is allowed to remove all the hit set objects - if (is_primary() && is_peered()) { - hit_set_remove_all(); - } + hit_set_remove_all(); return; }