]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: account for split in project_pg_history
authorSamuel Just <sam.just@inktank.com>
Thu, 29 Nov 2012 01:14:11 +0000 (17:14 -0800)
committerSamuel Just <sam.just@inktank.com>
Fri, 7 Dec 2012 06:53:07 +0000 (22:53 -0800)
split causes a new interval.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc

index a4b3179dc3ec36b5f53b70011391c472bfb5fa7a..b4df253120f6218843a8d4d3bced10bbfdb88c72 100644 (file)
@@ -1796,6 +1796,7 @@ void OSD::project_pg_history(pg_t pgid, pg_history_t& h, epoch_t from,
        e--) {
     // verify during intermediate epoch (e-1)
     OSDMapRef oldmap = get_map(e-1);
+    assert(oldmap->have_pg_pool(pgid.pool()));
 
     vector<int> up, acting;
     oldmap->pg_to_up_acting_osds(pgid, up, acting);
@@ -1808,6 +1809,12 @@ void OSD::project_pg_history(pg_t pgid, pg_history_t& h, epoch_t from,
               << dendl;
       h.same_interval_since = e;
     }
+    // split?
+    if (pgid.is_split(oldmap->get_pg_num(pgid.pool()),
+                     osdmap->get_pg_num(pgid.pool()),
+                     0)) {
+      h.same_interval_since = e;
+    }
     // up set change?
     if (up != currentup && e > h.same_up_since) {
       dout(15) << "project_pg_history " << pgid << " up changed in " << e