]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
MDS: make standby_trim_segments functional. Hurray, hot standbys work!
authorGreg Farnum <gregf@hq.newdream.net>
Wed, 15 Dec 2010 00:45:50 +0000 (16:45 -0800)
committerGreg Farnum <gregf@hq.newdream.net>
Thu, 6 Jan 2011 19:12:14 +0000 (11:12 -0800)
Signed-off-by: Greg Farnum <gregf@hq.newdream.net>
src/mds/MDS.cc

index 7aca8f4d24d8b725563459d50e636050c49821b2..deb435da3cb949a531c99c7ce42d61e52956f65b 100644 (file)
@@ -1292,6 +1292,30 @@ void MDS::replay_done()
 
 void MDS::standby_trim_segments()
 {
+  dout(10) << "standby_trim_segments" << dendl;
+  LogSegment *seg = NULL;
+  uint64_t expire_pos = mdlog->get_journaler()->get_expire_pos();
+  dout(10) << "expire_pos=" << expire_pos << dendl;
+  bool removed_segment = false;
+  while ((seg=mdlog->get_oldest_segment())->end <= expire_pos) {
+    dout(0) << "removing segment" << dendl;
+    seg->dirty_dirfrags.clear_list();
+    seg->new_dirfrags.clear_list();
+    seg->dirty_inodes.clear_list();
+    seg->dirty_dentries.clear_list();
+    seg->open_files.clear_list();
+    seg->renamed_files.clear_list();
+    seg->dirty_dirfrag_dir.clear_list();
+    seg->dirty_dirfrag_nest.clear_list();
+    seg->dirty_dirfrag_dirfragtree.clear_list();
+    mdlog->remove_oldest_segment();
+    removed_segment = true;
+  }
+
+  if (removed_segment) {
+    dout(20) << "calling mdcache->trim!" << dendl;
+    mdcache->trim(-1);
+  } else dout(20) << "removed no segments!" << dendl;
   return;
 }