int r = _calc_target(&op->target, &op->last_force_resend);
switch (r) {
case RECALC_OP_TARGET_NO_ACTION:
- if (!force_resend &&
- (!force_resend_writes || !(op->target.flags & CEPH_OSD_FLAG_WRITE)))
+ if (!force_resend && !(force_resend_writes && op->respects_full()))
break;
// -- fall-thru --
case RECALC_OP_TARGET_NEED_RESEND:
<< dendl;
op->target.paused = true;
_maybe_request_map();
- } else if ((op->target.flags & (CEPH_OSD_FLAG_WRITE | CEPH_OSD_FLAG_RWORDERED)) &&
- !(op->target.flags & (CEPH_OSD_FLAG_FULL_TRY |
- CEPH_OSD_FLAG_FULL_FORCE)) &&
+ } else if (op->respects_full() &&
(_osdmap_full_flag() ||
_osdmap_pool_full(op->target.base_oloc.pool))) {
ldout(cct, 0) << " FULL, paused modify " << op << " tid "
return tid < other.tid;
}
+ bool respects_full() const {
+ return
+ (target.flags & (CEPH_OSD_FLAG_WRITE | CEPH_OSD_FLAG_RWORDERED)) &&
+ !(target.flags & (CEPH_OSD_FLAG_FULL_TRY | CEPH_OSD_FLAG_FULL_FORCE));
+ }
+
private:
~Op() {
while (!out_handler.empty()) {