]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PrimaryLogPG: do not expect FULL_TRY ops to get resent 14732/head
authorSage Weil <sage@redhat.com>
Thu, 30 Mar 2017 17:50:41 +0000 (13:50 -0400)
committerNathan Cutler <ncutler@suse.com>
Mon, 3 Jul 2017 10:19:28 +0000 (12:19 +0200)
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>
(cherry picked from commit 3f7acdbc9a942fd18937dbcf07fbc7b752c50ba3)

src/osd/PrimaryLogPG.cc

index 57d09420743d9848c3d51158ead3eeff83a72920..f7866e938ba7aa79c88120910b68d0021e03985e 100644 (file)
@@ -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;