From b6326a05eea89bde0c815293d25c5db7d24f0bd4 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 6 Mar 2015 18:02:25 -0800 Subject: [PATCH] ReplicatedPG: block write on degraded object if there are waiters Suppose we have min_size of 2 and size of 3, foo exists only on the primary. - block op 1 on foo due to < min_size - start recovery on foo for replicas 1 and 2 - complete push to replica 1 (2 copies now) - allow op 2 on foo through since we have 2 copies - complete recovery on foo, requeue op 1 Fixes: 11057 Signed-off-by: Samuel Just --- src/osd/ReplicatedPG.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index aebcbf75245c2..057564c37a1d6 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1487,6 +1487,7 @@ void ReplicatedPG::do_op(OpRequestRef& op) if (write_ordered && is_degraded_object(head, &valid_copies) && (valid_copies < pool.info.min_size || + waiting_for_degraded_object.count(head) || pool.info.ec_pool() || !cct->_conf->osd_enable_degraded_writes || !(get_min_peer_features() & CEPH_FEATURE_OSD_DEGRADED_WRITES))) { -- 2.39.5