]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: set last_force_op_resend on overlay pool too 13115/head
authorSage Weil <sage@redhat.com>
Thu, 29 Dec 2016 17:08:28 +0000 (12:08 -0500)
committerNathan Cutler <ncutler@suse.com>
Thu, 26 Jan 2017 03:30:09 +0000 (04:30 +0100)
We currently set the last_force_op_resend field on the
base pool when we set or clear the overlay.  Set it on
the cache/overlay pool too.  The Objecter should resend
even with a change only to the base pool, but the OSD
needs to see the change on the overlay pool to correctly
discard the op.

Fixes: http://tracker.ceph.com/issues/18366
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 08c3618771b852840aa88cff1ca98d980d802941)

src/mon/OSDMonitor.cc

index b9cdc4d86023ceaed504f2a6d71f7654a483a962..4defdb927b75d9e2c63ef357a173b2c135f87801 100644 (file)
@@ -7316,6 +7316,8 @@ done:
     np->read_tier = overlaypool_id;
     np->write_tier = overlaypool_id;
     np->last_force_op_resend = pending_inc.epoch;
+    pg_pool_t *noverlay_p = pending_inc.get_new_pool(overlaypool_id, overlay_p);
+    noverlay_p->last_force_op_resend = pending_inc.epoch;
     ss << "overlay for '" << poolstr << "' is now (or already was) '" << overlaypoolstr << "'";
     if (overlay_p->cache_mode == pg_pool_t::CACHEMODE_NONE)
       ss <<" (WARNING: overlay pool cache_mode is still NONE)";
@@ -7346,6 +7348,16 @@ done:
 
     // go
     pg_pool_t *np = pending_inc.get_new_pool(pool_id, p);
+    if (np->has_read_tier()) {
+      const pg_pool_t *op = osdmap.get_pg_pool(np->read_tier);
+      pg_pool_t *nop = pending_inc.get_new_pool(np->read_tier,op);
+      nop->last_force_op_resend = pending_inc.epoch;
+    }
+    if (np->has_write_tier()) {
+      const pg_pool_t *op = osdmap.get_pg_pool(np->write_tier);
+      pg_pool_t *nop = pending_inc.get_new_pool(np->write_tier, op);
+      nop->last_force_op_resend = pending_inc.epoch;
+    }
     np->clear_read_tier();
     np->clear_write_tier();
     np->last_force_op_resend = pending_inc.epoch;
@@ -7582,6 +7594,8 @@ done:
     np->tiers.insert(tierpool_id);
     np->read_tier = np->write_tier = tierpool_id;
     np->set_snap_epoch(pending_inc.epoch); // tier will update to our snap info
+    np->last_force_op_resend = pending_inc.epoch;
+    ntp->last_force_op_resend = pending_inc.epoch;
     ntp->tier_of = pool_id;
     ntp->cache_mode = mode;
     ntp->hit_set_count = g_conf->osd_tier_default_cache_hit_set_count;