From: Sage Weil Date: Wed, 2 Apr 2014 23:03:37 +0000 (-0700) Subject: OSDMap: bump snap_epoch when adding a tier X-Git-Tag: v0.79~20^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=6bf46e23e09c38717a83e6eba202f15e56090748;p=ceph.git 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 --- 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 @@ done: 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 @@ done: 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;