From: Sage Weil Date: Thu, 30 Mar 2017 17:50:41 +0000 (-0400) Subject: osd/PrimaryLogPG: do not expect FULL_TRY ops to get resent X-Git-Tag: v11.2.1~86^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=e76725f4e9fb4a6cd7c76480d0313a8e0264eb73;p=ceph.git osd/PrimaryLogPG: do not expect FULL_TRY ops to get resent The objecter will not resend FULL_TRY requests that were sent prior to becoming full, so we should not discard them. Fixes: http://tracker.ceph.com/issues/19430 Signed-off-by: Sage Weil (cherry picked from commit 3f7acdbc9a942fd18937dbcf07fbc7b752c50ba3) --- diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 57d09420743d9..f7866e938ba7a 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -1837,12 +1837,14 @@ void PrimaryLogPG::do_op(OpRequestRef& op) // discard due to cluster full transition? (we discard any op that // originates before the cluster or pool is marked full; the client // will resend after the full flag is removed or if they expect the - // op to succeed despite being full). The except is FULL_FORCE ops, - // which there is no reason to discard because they bypass all full - // checks anyway. - // If this op isn't write or read-ordered, we skip + // op to succeed despite being full). The except is FULL_FORCE and + // FULL_TRY ops, which there is no reason to discard because they + // bypass all full checks anyway. If this op isn't write or + // read-ordered, we skip. // FIXME: we exclude mds writes for now. - if (write_ordered && !( m->get_source().is_mds() || m->has_flag(CEPH_OSD_FLAG_FULL_FORCE)) && + if (write_ordered && !(m->get_source().is_mds() || + m->has_flag(CEPH_OSD_FLAG_FULL_TRY) || + m->has_flag(CEPH_OSD_FLAG_FULL_FORCE)) && info.history.last_epoch_marked_full > m->get_map_epoch()) { dout(10) << __func__ << " discarding op sent before full " << m << " " << *m << dendl;