]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PrimaryLogPG: do not expect FULL_TRY ops to get resent 14255/head
authorSage Weil <sage@redhat.com>
Thu, 30 Mar 2017 17:50:41 +0000 (13:50 -0400)
committerSage Weil <sage@redhat.com>
Thu, 30 Mar 2017 17:50:41 +0000 (13:50 -0400)
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 <sage@redhat.com>
src/osd/PrimaryLogPG.cc

index c64ba07a477b3b460591510e748108e13f71ff40..88b6d22d56b05dfe7464f15e850baaf45d5116da 100644 (file)
@@ -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;