ReplicatedPG: block writes on degraded objects for ec pools

Signed-off-by: Samuel Just <sjust@redhat.com>
This commit is contained in:
Samuel Just 2015-01-27 14:08:43 -08:00
parent 964d17756f
commit 1f165d2547

View File

@ -1432,6 +1432,22 @@ void ReplicatedPG::do_op(OpRequestRef& op)
return;
}
// degraded object?
/* We continue to block writes on degraded objects for an EC pools because
* we have to reset can_rollback_to when we get a repop without the
* transaction. If two replicas do that on sequential ops on different
* objects and then crash, other unstable objects before those two would
* also be unable to be rolled back, and would also wind up unfound.
* We can enable degraded writes on ec pools by blocking such a write
* to a peer until all previous writes have completed. For now, we
* will simply block them.
*/
if (pool.info.ec_pool() && write_ordered && is_degraded_object(head)) {
wait_for_degraded_object(head, op);
return;
}
// missing snapdir?
hobject_t snapdir(m->get_oid(), m->get_object_locator().key,
CEPH_SNAPDIR, m->get_pg().ps(), info.pgid.pool(),