]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSDMap: bump snap_epoch when adding a tier 1591/head
authorSage Weil <sage@inktank.com>
Wed, 2 Apr 2014 23:03:37 +0000 (16:03 -0700)
committerSage Weil <sage@inktank.com>
Wed, 2 Apr 2014 23:03:37 +0000 (16:03 -0700)
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 <sage@inktank.com>
src/mon/OSDMonitor.cc

index 3604a16d58aed7cd04d0e137e60f7427bfb36b83..4de2b423a3844a31b1c73f45b583affcd73c3eff 100644 (file)
@@ -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;