From 6bf46e23e09c38717a83e6eba202f15e56090748 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 2 Apr 2014 16:03:37 -0700 Subject: [PATCH] OSDMap: bump snap_epoch when adding a tier When we make an existing pool a tier, we start copying the snap metadata from the base tier. That includes removed_snaps. In order for the OSD to recognize that this value is changing for the first time, we need to set snap_epoch, or else the OSD doesn't update it's in-memory PGPool with removed snaps and we eventually hit an assertion failure because PGPool::cached_remove_snaps is incorrect (e.g., empty). Fix this by bumping snap_epoch when we add the new tier. Fixes: #7915 Signed-off-by: Sage Weil --- src/mon/OSDMonitor.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 3604a16d58aed..4de2b423a3844 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -4929,6 +4929,7 @@ bool OSDMonitor::prepare_command_impl(MMonCommand *m, return true; } np->tiers.insert(tierpool_id); + np->set_snap_epoch(pending_inc.epoch); // tier will update to our snap info ntp->tier_of = pool_id; ss << "pool '" << tierpoolstr << "' is now (or already was) a tier of '" << poolstr << "'"; wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, ss.str(), @@ -5176,6 +5177,7 @@ bool OSDMonitor::prepare_command_impl(MMonCommand *m, return true; } np->tiers.insert(tierpool_id); + np->set_snap_epoch(pending_inc.epoch); // tier will update to our snap info ntp->tier_of = pool_id; ntp->cache_mode = mode; ntp->hit_set_count = g_conf->osd_tier_default_cache_hit_set_count;