diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index c64ba07a477b3..88b6d22d56b05 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;