]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add rename failure hooks
authorSage Weil <sage@newdream.net>
Fri, 24 Sep 2010 22:15:12 +0000 (15:15 -0700)
committerSage Weil <sage@newdream.net>
Fri, 24 Sep 2010 22:15:12 +0000 (15:15 -0700)
src/config.cc
src/config.h
src/mds/Server.cc

index 818249829cd1a82839645f3f277f7324c45e152e..d30d5c84c4a510a0295f1d8a4c0029a429f9a7b9 100644 (file)
@@ -449,6 +449,7 @@ static struct config_option config_optionsp[] = {
        OPTION(mds_kill_mdstable_at, 0, OPT_INT, 0),
        OPTION(mds_kill_export_at, 0, OPT_INT, 0),
        OPTION(mds_kill_import_at, 0, OPT_INT, 0),
+       OPTION(mds_kill_rename_at, 0, OPT_INT, 0),
        OPTION(osd_data, 0, OPT_STR, ""),
        OPTION(osd_journal, 0, OPT_STR, ""),
        OPTION(osd_journal_size, 0, OPT_INT, 0),         // in mb
index 60d94ca32e3b5082dcabccaf82afee445d5cd24b..9ce53f2c6ea9b4265381d0f74269e7e762986d86 100644 (file)
@@ -311,6 +311,7 @@ struct md_config_t {
   int mds_kill_mdstable_at;
   int mds_kill_export_at;
   int mds_kill_import_at;
+  int mds_kill_rename_at;
 
   // osd
   const char *osd_data;
index edb678b408c24970ba4f66f81cb066279933f91c..7475f4749be4a0cbf222141a2bb7e33d911eb8a4 100644 (file)
@@ -4454,7 +4454,7 @@ void Server::handle_client_rename(MDRequest *mdr)
 
   if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks))
     return;
-  
+
   if (oldin &&
       oldin->is_dir() &&
       _dir_is_nonempty(mdr, oldin)) {
@@ -4470,6 +4470,8 @@ void Server::handle_client_rename(MDRequest *mdr)
     return;
   }
 
+  assert(g_conf.mds_kill_rename_at != 1);
+
   // -- open all srcdn inode frags, if any --
   // we need these open so that auth can properly delegate from inode to dirfrags
   // after the inode is _ours_.
@@ -4528,8 +4530,10 @@ void Server::handle_client_rename(MDRequest *mdr)
   }
 
   // test hack: bail after slave does prepare, so we can verify it's _live_ rollback.
-  //if (!mdr->more()->slaves.empty() && !srci->is_dir()) assert(0); 
-  //if (!mdr->more()->slaves.empty() && srci->is_dir()) assert(0); 
+  if (!mdr->more()->slaves.empty() && !srci->is_dir())
+    assert(g_conf.mds_kill_rename_at != 2);
+  if (!mdr->more()->slaves.empty() && srci->is_dir())
+    assert(g_conf.mds_kill_rename_at != 3);    
   
   // -- prepare anchor updates -- 
   if (!linkmerge || srcdnl->is_primary()) {
@@ -4566,6 +4570,8 @@ void Server::handle_client_rename(MDRequest *mdr)
 
     if (anchorgather) 
       return;  // waiting for anchor prepares
+
+    assert(g_conf.mds_kill_rename_at != 4);
   }
 
   // -- prepare journal entry --
@@ -4602,14 +4608,15 @@ void Server::_rename_finish(MDRequest *mdr, CDentry *srcdn, CDentry *destdn, CDe
 {
   dout(10) << "_rename_finish " << *mdr << dendl;
 
-  // test hack: test slave commit
-  //if (!mdr->more()->slaves.empty() && !destdn->get_inode()->is_dir()) assert(0); 
-  //if (!mdr->more()->slaves.empty() && destdn->get_inode()->is_dir()) assert(0); 
-
   // apply
   _rename_apply(mdr, srcdn, destdn, straydn);
 
   CDentry::linkage_t *destdnl = destdn->get_linkage();
+  // test hack: test slave commit
+  if (!mdr->more()->slaves.empty() && !destdnl->get_inode()->is_dir())
+    assert(g_conf.mds_kill_rename_at != 5);
+  if (!mdr->more()->slaves.empty() && destdnl->get_inode()->is_dir())
+    assert(g_conf.mds_kill_rename_at != 6);
   
   // commit anchor updates?
   if (mdr->more()->src_reanchor_atid)