]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cephfs: Add option to load invalid metadata from disk
authorDouglas Fuller <dfuller@redhat.com>
Wed, 24 Jan 2018 16:09:45 +0000 (11:09 -0500)
committerPrashant D <pdhange@redhat.com>
Fri, 16 Feb 2018 05:41:33 +0000 (00:41 -0500)
Add an option, mds_allow_loading_invalid_metadata, for testing
to bypass sanity checks on metadata loaded from RAODS. This permits
testing cases in which metadata damage causes issuses in a running
MDS.

Signed-off-by: Douglas Fuller <dfuller@redhat.com>
(cherry picked from commit f7fb56622f48c89f095694229564d2ab8963b81b)

src/common/options.cc
src/mds/CDir.cc
src/mds/CInode.h

index 0dfec7abbf86077a951ba074e66ef1b83b507ea5..60003a807734a81de7042252abd8caa279c19985 100644 (file)
@@ -6330,9 +6330,12 @@ std::vector<Option> get_mds_options() {
     .set_default(100)
     .set_description("minimum number of capabilities a client may hold"),
 
-    Option("mds_max_ratio_caps_per_client", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
+    Option("mds_max_ratio_caps_per_client", Option::TYPE_FLOAT, Option::LEVEL_DEV)
     .set_default(.8)
     .set_description("maximum ratio of current caps that may be recalled during MDS cache pressure"),
+    Option("mds_hack_allow_loading_invalid_metadata", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
+     .set_default(0)
+     .set_description("INTENTIONALLY CAUSE DATA LOSS by bypasing checks for invalid metadata on disk. Allows testing repair tools."),
   });
 }
 
index 5fdc6987bf3da55c92882d580bac9c80309ed9f9..da9d0eb3fab85da67125009bef8fab633fbd3b67 100644 (file)
@@ -1791,6 +1791,9 @@ CDentry *CDir::_load_dentry(
         //in->hack_accessed = false;
         //in->hack_load_stamp = ceph_clock_now();
         //num_new_inodes_loaded++;
+      } else if (g_conf->get_val<bool>("mds_hack_allow_loading_invalid_metadata")) {
+       dout(20) << "hack: adding duplicate dentry for " << *in << dendl;
+       dn = add_primary_dentry(dname, in, first, last);
       } else {
         dout(0) << "_fetched  badness: got (but i already had) " << *in
                 << " mode " << in->inode.mode
index 5ec21d0b9a507c7504fdef1fcd1570ab82d89eea..d2ece8bfc1f2474d32842941a2ee71450975beed 100644 (file)
@@ -1059,7 +1059,8 @@ public:
   // -- hierarchy stuff --
 public:
   void set_primary_parent(CDentry *p) {
-    assert(parent == 0);
+    assert(parent == 0 ||
+          g_conf->get_val<bool>("mds_hack_allow_loading_invalid_metadata"));
     parent = p;
   }
   void remove_primary_parent(CDentry *dn) {