From: Sage Weil Date: Thu, 29 Dec 2016 17:08:28 +0000 (-0500) Subject: mon/OSDMonitor: set last_force_op_resend on overlay pool too X-Git-Tag: v10.2.6~106^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F13115%2Fhead;p=ceph.git mon/OSDMonitor: set last_force_op_resend on overlay pool too 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 (cherry picked from commit 08c3618771b852840aa88cff1ca98d980d802941) --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index b9cdc4d86023..4defdb927b75 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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;