From 3f7acdbc9a942fd18937dbcf07fbc7b752c50ba3 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 30 Mar 2017 13:50:41 -0400 Subject: [PATCH] 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 --- src/osd/PrimaryLogPG.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index c64ba07a477b..88b6d22d56b0 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -1844,12 +1844,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; -- 2.47.3