]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: introduce MDCache::maybe_finish_slave_resolve()
authorYan, Zheng <zyan@redhat.com>
Tue, 9 Jan 2018 11:22:18 +0000 (19:22 +0800)
committerYan, Zheng <zyan@redhat.com>
Fri, 9 Feb 2018 09:46:55 +0000 (17:46 +0800)
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
src/mds/MDCache.cc
src/mds/MDCache.h

index de600c84f02bb87146d49a9967b4a2b4c8cbaec6..772828d0454b3445e1236cfe132974f6dab16000 100644 (file)
@@ -2404,8 +2404,9 @@ void MDCache::logged_master_update(metareqid_t reqid)
   dout(10) << "logged_master_update " << reqid << dendl;
   assert(uncommitted_masters.count(reqid));
   uncommitted_masters[reqid].safe = true;
-  if (pending_masters.count(reqid)) {
-    pending_masters.erase(reqid);
+  auto p = pending_masters.find(reqid);
+  if (p != pending_masters.end()) {
+    pending_masters.erase(p);
     if (pending_masters.empty())
       process_delayed_resolve();
   }
@@ -2679,9 +2680,9 @@ void MDCache::send_resolves()
             << resolve_ack_gather << ")" << dendl;
     return;
   }
-  if (!need_resolve_rollback.empty()) {
+  if (!resolve_need_rollback.empty()) {
     dout(10) << "send_resolves still waiting for rollback to commit on ("
-            << need_resolve_rollback << ")" << dendl;
+            << resolve_need_rollback << ")" << dendl;
     return;
   }
   send_subtree_resolves();
@@ -2855,6 +2856,13 @@ void MDCache::send_subtree_resolves()
   resolves_pending = false;
 }
 
+void MDCache::maybe_finish_slave_resolve() {
+  if (resolve_ack_gather.empty() && resolve_need_rollback.empty()) {
+    send_subtree_resolves();
+    process_delayed_resolve();
+  }
+}
+
 void MDCache::handle_mds_failure(mds_rank_t who)
 {
   dout(7) << "handle_mds_failure mds." << who << dendl;
@@ -3191,7 +3199,7 @@ void MDCache::handle_resolve(MMDSResolve *m)
     return;
   }
 
-  if (!resolve_ack_gather.empty() || !need_resolve_rollback.empty()) {
+  if (!resolve_ack_gather.empty() || !resolve_need_rollback.empty()) {
     dout(10) << "delay processing subtree resolve" << dendl;
     delayed_resolve[from] = m;
     return;
@@ -3302,7 +3310,7 @@ void MDCache::discard_delayed_resolve(mds_rank_t who)
 void MDCache::maybe_resolve_finish()
 {
   assert(resolve_ack_gather.empty());
-  assert(need_resolve_rollback.empty());
+  assert(resolve_need_rollback.empty());
 
   if (!resolve_gather.empty()) {
     dout(10) << "maybe_resolve_finish still waiting for resolves ("
@@ -3411,11 +3419,9 @@ void MDCache::handle_resolve_ack(MMDSResolveAck *ack)
     }
   }
 
-  if (!ambiguous_slave_updates.count(from))
+  if (!ambiguous_slave_updates.count(from)) {
     resolve_ack_gather.erase(from);
-  if (resolve_ack_gather.empty() && need_resolve_rollback.empty()) {
-    send_subtree_resolves();
-    process_delayed_resolve();
+    maybe_finish_slave_resolve();
   }
 
   ack->put();
@@ -3489,14 +3495,12 @@ MDSlaveUpdate* MDCache::get_uncommitted_slave_update(metareqid_t reqid, mds_rank
 }
 
 void MDCache::finish_rollback(metareqid_t reqid) {
-  assert(need_resolve_rollback.count(reqid));
+  auto p = resolve_need_rollback.find(reqid);
+  assert(p != resolve_need_rollback.end());
   if (mds->is_resolve())
-    finish_uncommitted_slave_update(reqid, need_resolve_rollback[reqid]);
-  need_resolve_rollback.erase(reqid);
-  if (resolve_ack_gather.empty() && need_resolve_rollback.empty()) {
-    send_subtree_resolves();
-    process_delayed_resolve();
-  }
+    finish_uncommitted_slave_update(reqid, p->second);
+  resolve_need_rollback.erase(p);
+  maybe_finish_slave_resolve();
 }
 
 void MDCache::disambiguate_other_imports()
index bc551a15c68e35c26ca12f4f7db309b815d446a1..6e8a84ac74f918e791971247eed45e27386326b0 100644 (file)
@@ -470,7 +470,7 @@ protected:
   bool resolves_pending;
   set<mds_rank_t> resolve_gather;      // nodes i need resolves from
   set<mds_rank_t> resolve_ack_gather;  // nodes i need a resolve_ack from
-  map<metareqid_t, mds_rank_t> need_resolve_rollback;  // rollbacks i'm writing to the journal
+  map<metareqid_t, mds_rank_t> resolve_need_rollback;  // rollbacks i'm writing to the journal
   map<mds_rank_t, MMDSResolve*> delayed_resolve;
   
   void handle_resolve(MMDSResolve *m);
@@ -484,6 +484,11 @@ protected:
   void add_uncommitted_slave_update(metareqid_t reqid, mds_rank_t master, MDSlaveUpdate*);
   void finish_uncommitted_slave_update(metareqid_t reqid, mds_rank_t master);
   MDSlaveUpdate* get_uncommitted_slave_update(metareqid_t reqid, mds_rank_t master);
+
+  void send_slave_resolves();
+  void send_subtree_resolves();
+  void maybe_finish_slave_resolve();
+
 public:
   void recalc_auth_bits(bool replay);
   void remove_inode_recursive(CInode *in);
@@ -505,7 +510,7 @@ public:
   }
 
   void add_rollback(metareqid_t reqid, mds_rank_t master) {
-    need_resolve_rollback[reqid] = master;
+    resolve_need_rollback[reqid] = master;
   }
   void finish_rollback(metareqid_t reqid);
 
@@ -523,8 +528,6 @@ public:
   void finish_ambiguous_import(dirfrag_t dirino);
   void resolve_start(MDSInternalContext *resolve_done_);
   void send_resolves();
-  void send_slave_resolves();
-  void send_subtree_resolves();
   void maybe_send_pending_resolves() {
     if (resolves_pending)
       send_subtree_resolves();