]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: wipe out client sessions on startup
authorSage Weil <sage@newdream.net>
Thu, 14 Oct 2010 21:40:54 +0000 (14:40 -0700)
committerSage Weil <sage@newdream.net>
Tue, 9 Nov 2010 17:55:43 +0000 (09:55 -0800)
For disaster recovery and such.

Signed-off-by: Sage Weil <sage@newdream.net>
src/config.cc
src/config.h
src/mds/MDS.cc
src/mds/SessionMap.cc
src/mds/SessionMap.h

index 503b55a82252bf7648c65fa21a40657b82427768..bdb9a02b8c51fb65649e5ec2432b0c72b9b49563 100644 (file)
@@ -487,8 +487,9 @@ static struct config_option config_optionsp[] = {
        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(mds_wipe_sessions, 0, OPT_BOOL, 0),
        OPTION(mds_wipe_ino_prealloc, 0, OPT_BOOL, 0),
-       OPTION(mds_skip_ino, 0, OPT_LONGLONG, 0),
+       OPTION(mds_skip_ino, 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 18d892f16d36b266e2b782343ed2cbdfcc8c3866..d38e1994b3131c10ee99664c2c55d833c41651a3 100644 (file)
@@ -319,8 +319,9 @@ struct md_config_t {
   int mds_kill_import_at;
   int mds_kill_rename_at;
 
+  bool mds_wipe_sessions;
   bool mds_wipe_ino_prealloc;
-  long long mds_skip_ino;
+  int mds_skip_ino;
 
   // osd
   const char *osd_data;
index ea3dabf8f1d856093389503e1c489ef2b99fbbc8..73c64d4509d9372c6dac133bd00ea88067dbffa3 100644 (file)
@@ -1167,7 +1167,7 @@ void MDS::starting_done()
 void MDS::replay_start()
 {
   dout(1) << "replay_start" << dendl;
-
+  
   // initialize gather sets
   set<int> rs;
   mdsmap->get_recovery_mds_set(rs);
@@ -1199,6 +1199,11 @@ void MDS::replay_done()
     return;
   }
 
+  if (g_conf.mds_wipe_sessions) {
+    dout(1) << "wiping out client sessions" << dendl;
+    sessionmap.wipe();
+    sessionmap.save(new C_NoopContext);
+  }
   if (g_conf.mds_wipe_ino_prealloc) {
     dout(1) << "wiping out ino prealloc from sessions" << dendl;
     sessionmap.wipe_ino_prealloc();
index 3937280ff3eae963f6a561490010f517db8d783b..2aa40595b52bb3b63691bb35c28b733a06b7560c 100644 (file)
@@ -213,6 +213,19 @@ void SessionMap::decode(bufferlist::iterator& p)
 
 
 
+void SessionMap::wipe()
+{
+  dout(1) << "wipe start" << dendl;
+  dump();
+  while (!session_map.empty()) {
+    Session *s = session_map.begin()->second;
+    remove_session(s);
+  }
+  version = ++projected;
+  dout(1) << "wipe result" << dendl;
+  dump();
+  dout(1) << "wipe done" << dendl;
+}
 
 void SessionMap::wipe_ino_prealloc()
 {
index 8141b134b58802975a722f9993703cc5e6631188..3a7f7bcbf5b811473c9f7f1374dbe2f34093d039 100644 (file)
@@ -358,6 +358,7 @@ public:
     session->trim_completed_requests(tid);
   }
 
+  void wipe();
   void wipe_ino_prealloc();
 
   // -- loading, saving --