From 08c3618771b852840aa88cff1ca98d980d802941 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 29 Dec 2016 12:08:28 -0500 Subject: [PATCH] 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 --- src/mon/OSDMonitor.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index f4474a5220beb..d6c134d991886 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -7460,6 +7460,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)"; @@ -7490,6 +7492,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; @@ -7726,6 +7738,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; -- 2.39.5