]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix incorrect "unconnected snaprealm xxx" warning
authorYan, Zheng <zyan@redhat.com>
Mon, 11 Jul 2016 02:51:13 +0000 (10:51 +0800)
committerYan, Zheng <zyan@redhat.com>
Fri, 15 Jul 2016 01:11:49 +0000 (09:11 +0800)
If a snaprealm has no child/parent snaprelam, and the snaprealm inode
is not in the cache while client reconnects. The snaprealm does not
get properly removed from MDCache::reconnected_snaplrealm. This causes
incorrect "unconnected snaprealm xxx" warning

Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/MDCache.cc
src/mds/MDCache.h

index 3c7cf077cf8fbae8a4b751d3f30c4a1a7723b6f9..4edee0c699a2ce066f23383aecbbe5055f9ca904 100644 (file)
@@ -5353,12 +5353,21 @@ bool MDCache::process_imported_caps()
   return false;
 }
 
-void MDCache::check_realm_past_parents(SnapRealm *realm)
+void MDCache::check_realm_past_parents(SnapRealm *realm, bool reconnect)
 {
   // are this realm's parents fully open?
   if (realm->have_past_parents_open()) {
     dout(10) << " have past snap parents for realm " << *realm 
             << " on " << *realm->inode << dendl;
+    if (reconnect) {
+      // finish off client snaprealm reconnects?
+      auto p = reconnected_snaprealms.find(realm->inode->ino());
+      if (p != reconnected_snaprealms.end()) {
+       for (auto q = p->second.begin(); q != p->second.end(); ++q)
+         finish_snaprealm_reconnect(q->first, realm, q->second);
+       reconnected_snaprealms.erase(p);
+      }
+    }
   } else {
     if (!missing_snap_parents.count(realm->inode)) {
       dout(10) << " MISSING past snap parents for realm " << *realm
@@ -5440,7 +5449,7 @@ void MDCache::choose_lock_states_and_reconnect_caps()
 
     SnapRealm *realm = in->find_snaprealm();
 
-    check_realm_past_parents(realm);
+    check_realm_past_parents(realm, realm == in->snaprealm);
 
     if (p != reconnected_caps.end()) {
       bool missing_snap_parent = false;
@@ -6123,10 +6132,6 @@ void MDCache::identify_files_to_recover()
       in->auth_pin(&in->filelock);
       in->filelock.set_state(LOCK_PRE_SCAN);
       rejoin_recover_q.push_back(in);
-
-      // make sure past parents are open/get opened
-      SnapRealm *realm = in->find_snaprealm();
-      check_realm_past_parents(realm);
     } else {
       rejoin_check_q.push_back(in);
     }
index 769a829959165ca555728cd858bc57ce015e3ad9..a0363cc384e6fc024fd626433855ed48cd84aff1 100644 (file)
@@ -607,7 +607,7 @@ public:
   void do_delayed_cap_imports();
   void rebuild_need_snapflush(CInode *head_in, SnapRealm *realm, client_t client,
                              snapid_t snap_follows);
-  void check_realm_past_parents(SnapRealm *realm);
+  void check_realm_past_parents(SnapRealm *realm, bool reconnect);
   void open_snap_parents();
 
   bool open_undef_inodes_dirfrags();