]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: tolerate a missing directory object
authorSage Weil <sage@newdream.net>
Wed, 29 Jul 2009 17:39:58 +0000 (10:39 -0700)
committerSage Weil <sage@newdream.net>
Thu, 30 Jul 2009 20:45:12 +0000 (13:45 -0700)
Including error in log, mark dir complete.  Some metadata may
be missing!

src/mds/CDir.cc

index e34defd038101abf3f44b8faf9bdd264082a69c2..48c000400dcbc946f95bf7de7a6c669a443e01bd 100644 (file)
@@ -1060,6 +1060,25 @@ void CDir::_fetched(bufferlist &bl)
   assert(is_auth());
   assert(!is_frozen());
 
+  // empty?!?
+  if (bl.length() == 0) {
+    dout(0) << "_fetched missing object for " << *this << dendl;
+    stringstream ss;
+    ss << "dir " << ino() << "." << dirfrag() << " object missing on disk; some files may be lost";
+    cache->mds->logclient.log(LOG_ERROR, ss);
+
+    log_mark_dirty();
+
+    // mark complete, !fetching
+    state_set(STATE_COMPLETE);
+    state_clear(STATE_FETCHING);
+    auth_unpin(this);
+    
+    // kick waiters
+    finish_waiting(WAIT_COMPLETE, 0);
+    return;
+  }
+
   // decode trivialmap.
   int len = bl.length();
   bufferlist::iterator p = bl.begin();