]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: check pg snap collections on start up
authorSamuel Just <sam.just@inktank.com>
Fri, 8 Feb 2013 00:04:59 +0000 (16:04 -0800)
committerSamuel Just <sam.just@inktank.com>
Fri, 8 Feb 2013 00:16:04 +0000 (16:16 -0800)
Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
src/osd/OSD.cc
src/osd/PG.cc
src/osd/PG.h

index 00e138ea22f6bae84a41c7b6bddbef223a9c137d..f09055e5bc83c8b136857c50dcd4868997da7829 100644 (file)
@@ -1578,6 +1578,8 @@ void OSD::load_pgs()
     // read pg state, log
     pg->read_state(store, bl);
 
+    pg->check_ondisk_snap_colls(i->second);
+
     set<pg_t> split_pgs;
     if (osdmap->have_pg_pool(pg->info.pgid.pool()) &&
        pg->info.pgid.is_split(pg->get_osdmap()->get_pg_num(pg->info.pgid.pool()),
index fc3f8c24b1f6a5bc4f0d6c3b689b1a02e99b0996..595cd3fdf7b1cf1df5f27de4d77ac8114b4271bb 100644 (file)
@@ -3134,6 +3134,18 @@ void PG::sub_op_scrub_stop(OpRequestRef op)
   osd->send_message_osd_cluster(reply, m->get_connection());
 }
 
+
+void PG::check_ondisk_snap_colls(
+  const interval_set<snapid_t> &ondisk_snapcolls)
+{
+  if (!(ondisk_snapcolls == snap_collections)) {
+    derr << "ondisk_snapcolls: " << ondisk_snapcolls
+        << " does not match snap_collections " << snap_collections
+        << " repairing." << dendl;
+    snap_collections = ondisk_snapcolls;
+  }
+}
+
 void PG::clear_scrub_reserved()
 {
   osd->scrub_wq.dequeue(this);
index ba80f8186e6c9927d151953c6504774541c644e7..68e886802b5c9ab7cf04b2a28769034109293c86 100644 (file)
@@ -1002,6 +1002,8 @@ public:
     ino_t hino, const hobject_t &hoid,
     const map<string, bufferptr> &attrs,
     set<snapid_t> *snapcolls) {};
+  void check_ondisk_snap_colls(
+    const interval_set<snapid_t> &ondisk_snapcolls);
   void clear_scrub_reserved();
   void scrub_reserve_replicas();
   void scrub_unreserve_replicas();