]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: remove mds_log_unsafe mode
authorSage Weil <sage.weil@dreamhost.com>
Thu, 24 Mar 2011 03:58:03 +0000 (20:58 -0700)
committerSage Weil <sage.weil@dreamhost.com>
Thu, 24 Mar 2011 18:41:14 +0000 (11:41 -0700)
The mds_log_unsafe mode would wait for ack for some journal writes, and
safe for others.  Now that we can reply to client requests without waiting
for the journal to flush (as of ~2 years ago), this distinction is no
longer useful.  It is also more error-prone, as it complicates the code
and vastly expands the possible combinations of MDS failures and replay
scenarios we need to verify.

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/common/config.cc
src/common/config.h
src/mds/CDir.cc
src/mds/Locker.cc
src/mds/MDCache.cc
src/mds/MDLog.cc
src/mds/MDLog.h
src/mds/MDSTableServer.cc
src/mds/Migrator.cc
src/mds/Server.cc

index 7356893771ba17e0f496e4393fb2c98d3ed18aea..0c9475cf5c16eb48d80cb7fa147dba7f884f0ac8 100644 (file)
@@ -241,7 +241,6 @@ struct config_option config_optionsp[] = {
   OPTION(mds_use_tmap, 0, OPT_BOOL, true),        // use trivialmap for dir updates
   OPTION(mds_default_dir_hash, 0, OPT_INT, CEPH_STR_HASH_RJENKINS),
   OPTION(mds_log, 0, OPT_BOOL, true),
-  OPTION(mds_log_unsafe, 0, OPT_BOOL, false),      // only wait for log sync, when it's mostly safe to do so
   OPTION(mds_log_skip_corrupt_events, 0, OPT_BOOL, false),
   OPTION(mds_log_max_events, 0, OPT_INT, -1),
   OPTION(mds_log_max_segments, 0, OPT_INT, 30),  // segment size defined by FileLayout, above
index 39ff6cdd7f2feeb859c44044b057fb94851b7607..a8b00a66b184772635bab5b3284acc1c05fad5dc 100644 (file)
@@ -261,7 +261,6 @@ struct md_config_t
   int mds_default_dir_hash;
 
   bool mds_log;
-  bool mds_log_unsafe;
   bool mds_log_skip_corrupt_events;
   int mds_log_max_events;
   int mds_log_max_segments;
index e073094ed0ee67214d979addc0b746e07df71b04..625e295664417a6edd40d1ef94e9a87c96b70270 100644 (file)
@@ -1175,7 +1175,7 @@ void CDir::log_mark_dirty()
 {
   MDLog *mdlog = inode->mdcache->mds->mdlog;
   version_t pv = pre_dirty();
-  mdlog->wait_for_sync(new C_Dir_Dirty(this, pv, mdlog->get_current_segment()));
+  mdlog->wait_for_safe(new C_Dir_Dirty(this, pv, mdlog->get_current_segment()));
 }
 
 void CDir::mark_complete() {
index 8c77adedb3358f43349dc56a39117b4f8065e421..3bb89ef41a2dc22bd5c9469b0400ff15cca663b5 100644 (file)
@@ -2265,7 +2265,7 @@ void Locker::_do_snap_update(CInode *in, snapid_t snap, int dirty, snapid_t foll
   mdcache->journal_dirty_inode(mut, &le->metablob, in, follows);
 
   mds->mdlog->submit_entry(le);
-  mds->mdlog->wait_for_sync(new C_Locker_FileUpdate_finish(this, in, mut, false,
+  mds->mdlog->wait_for_safe(new C_Locker_FileUpdate_finish(this, in, mut, false,
                                                           client, NULL, ack));
 }
 
@@ -2484,7 +2484,7 @@ bool Locker::_do_cap_update(CInode *in, Capability *cap,
   mdcache->journal_dirty_inode(mut, &le->metablob, in, follows);
 
   mds->mdlog->submit_entry(le);
-  mds->mdlog->wait_for_sync(new C_Locker_FileUpdate_finish(this, in, mut, change_max, 
+  mds->mdlog->wait_for_safe(new C_Locker_FileUpdate_finish(this, in, mut, change_max, 
                                                           client, cap, ack));
   // only flush immediately if the lock is unstable, or unissued caps are wanted, or max_size is 
   // changing
@@ -3291,7 +3291,7 @@ void Locker::scatter_writebehind(ScatterLock *lock)
   in->finish_scatter_gather_update_accounted(lock->get_type(), mut, &le->metablob);
 
   mds->mdlog->submit_entry(le);
-  mds->mdlog->wait_for_sync(new C_Locker_ScatterWB(this, lock, mut));
+  mds->mdlog->wait_for_safe(new C_Locker_ScatterWB(this, lock, mut));
 }
 
 void Locker::scatter_writebehind_finish(ScatterLock *lock, Mutation *mut)
index dfb79bf8c47842bce882ac351872d23ed244dfca..ec9958f9bb3910c66c97acb1301cf9229ebc5571 100644 (file)
@@ -847,7 +847,7 @@ void MDCache::try_subtree_merge_at(CDir *dir)
       journal_dirty_inode(mut, &le->metablob, in);
       
       mds->mdlog->submit_entry(le);
-      mds->mdlog->wait_for_sync(new C_MDC_SubtreeMergeWB(this, in, mut));
+      mds->mdlog->wait_for_safe(new C_MDC_SubtreeMergeWB(this, in, mut));
       mds->mdlog->flush();
     }
   } 
@@ -2673,7 +2673,7 @@ void MDCache::handle_resolve_ack(MMDSResolveAck *ack)
       if (uncommitted_slave_updates[from].empty())
        uncommitted_slave_updates.erase(from);
 
-      mds->mdlog->wait_for_sync(new C_MDC_SlaveCommit(this, from, *p));
+      mds->mdlog->wait_for_safe(new C_MDC_SlaveCommit(this, from, *p));
       mds->mdlog->flush();
     } else {
       MDRequest *mdr = request_get(*p);
index 81cb31ba85f4b8ea903d4b1786afed18d92b7935..61883302b2d02851de8bc6ac5f79918252d0d319 100644 (file)
@@ -149,7 +149,7 @@ void MDLog::append()
 
 // -------------------------------------------------
 
-void MDLog::submit_entry( LogEvent *le, Context *c, bool wait_safe 
+void MDLog::submit_entry(LogEvent *le, Context *c
 {
   assert(!mds->is_any_replay());
   assert(le == cur_event);
@@ -199,21 +199,8 @@ void MDLog::submit_entry( LogEvent *le, Context *c, bool wait_safe )
 
   unflushed++;
 
-  if (c) {
-    
-    if (!g_conf.mds_log_unsafe)
-      wait_safe = true;
-
-    if (0) {
-      unflushed = 0;
-      journaler->flush();
-    }
-
-    if (wait_safe)
-      journaler->wait_for_flush(0, c);
-    else
-      journaler->wait_for_flush(c, 0);      
-  }
+  if (c)
+    journaler->wait_for_flush(0, c);
   
   // start a new segment?
   //  FIXME: should this go elsewhere?
@@ -229,21 +216,7 @@ void MDLog::submit_entry( LogEvent *le, Context *c, bool wait_safe )
   }
 }
 
-void MDLog::wait_for_sync( Context *c )
-{
-  if (!g_conf.mds_log_unsafe)
-    return wait_for_safe(c);
-
-  if (g_conf.mds_log) {
-    // wait
-    journaler->wait_for_flush(c, 0);
-  } else {
-    // hack: bypass.
-    c->finish(0);
-    delete c;
-  }
-}
-void MDLog::wait_for_safe( Context *c )
+void MDLog::wait_for_safe(Context *c)
 {
   if (g_conf.mds_log) {
     // wait
@@ -284,7 +257,7 @@ void MDLog::start_new_segment(Context *onsync)
   ESubtreeMap *le = mds->mdcache->create_subtree_map();
   submit_entry(le, new C_MDL_WroteSubtreeMap(this, mds->mdlog->get_write_pos()));
   if (onsync) {
-    wait_for_sync(onsync);  
+    wait_for_safe(onsync);  
     flush();
   }
 
index 6537e27ba98b91825d2a69d58803b838b34f04bd..072f9655f9e8aa31c6be4d7020099a92307c821d 100644 (file)
@@ -202,14 +202,13 @@ public:
     assert(cur_event == NULL);
     cur_event = e;
   }
-  void submit_entry( LogEvent *e, Context *c = 0, bool wait_for_safe=false );
-  void start_submit_entry(LogEvent *e, Context *c = 0, bool wait_for_safe=false) {
+  void submit_entry(LogEvent *e, Context *c = 0);
+  void start_submit_entry(LogEvent *e, Context *c = 0) {
     start_entry(e);
-    submit_entry(e, c, wait_for_safe);
+    submit_entry(e, c);
   }
   bool entry_is_open() { return cur_event != NULL; }
 
-  void wait_for_sync( Context *c );
   void wait_for_safe( Context *c );
   void flush();
   bool is_flushed() {
index 84c000eff380dac4c161c02d785f4bcb6a7d04b9..1c97f95e40a9163628206fbd810f20b175ada2ba 100644 (file)
@@ -86,7 +86,7 @@ void MDSTableServer::handle_commit(MMDSTableRequest *req)
     _note_commit(tid);
     mds->mdlog->start_submit_entry(new ETableServer(table, TABLESERVER_OP_COMMIT, 0, -1, 
                                                    tid, version));
-    mds->mdlog->wait_for_sync(new C_Commit(this, req));
+    mds->mdlog->wait_for_safe(new C_Commit(this, req));
   }
   else if (tid <= version) {
     dout(0) << "got commit for tid " << tid << " <= " << version 
index aeb99f5aea258777a58dfea452718e86c057d2fd..592f3e5804d81826839b3f16324986dd253a7a7b 100644 (file)
@@ -883,7 +883,7 @@ void Migrator::export_go(CDir *dir)
   dout(7) << "export_go " << *dir << " to " << dest << dendl;
 
   // first sync log to flush out e.g. any cap imports
-  mds->mdlog->wait_for_sync(new C_M_ExportGo(this, dir));
+  mds->mdlog->wait_for_safe(new C_M_ExportGo(this, dir));
   mds->mdlog->flush();
 }
 
index 8a385fbed1fdb70b877dee4c815335cd53290c47..ff7aa681f54a56a167170b040d52cce897918013 100644 (file)
@@ -753,8 +753,7 @@ void Server::journal_and_reply(MDRequest *mdr, CInode *in, CDentry *dn, LogEvent
   early_reply(mdr, in, dn);
   
   mdr->committing = true;
-  mdlog->submit_entry(le, fin,
-                     mdr->did_ino_allocation());
+  mdlog->submit_entry(le, fin);
   
   if (mdr->client_request && mdr->client_request->is_replay()) {
     if (mds->queue_one_replay()) {