]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: warn if replay used ino doesn't match session's next
authorSage Weil <sage@newdream.net>
Fri, 20 Nov 2009 21:04:02 +0000 (13:04 -0800)
committerSage Weil <sage@newdream.net>
Fri, 20 Nov 2009 21:40:38 +0000 (13:40 -0800)
src/mds/SessionMap.h
src/mds/journal.cc

index 34fbe6931191ad118d0a31bab67b1567d0254d60..06d95893dc24ac9813e718f8461c03f9c8264922 100644 (file)
@@ -60,6 +60,11 @@ public:
   interval_set<inodeno_t> prealloc_inos;   // preallocated, ready to use.
   interval_set<inodeno_t> used_inos;       // journaling use
 
+  inodeno_t next_ino() {
+    if (prealloc_inos.empty())
+      return 0;
+    return prealloc_inos.start();
+  }
   inodeno_t take_ino(inodeno_t ino = 0) {
     assert(!prealloc_inos.empty());
 
index 3073a23e72d5400afc56bf7735cd7832ce0cf5c0..6e33083d17d7d4d6a0ebef084fbd1060793bacc4 100644 (file)
@@ -619,7 +619,13 @@ void EMetaBlob::replay(MDS *mds, LogSegment *logseg)
       assert(session);
       dout(20) << " (session prealloc " << session->prealloc_inos << ")" << dendl;
       if (used_preallocated_ino) {
-       inodeno_t i = session->take_ino();
+       inodeno_t next = session->next_ino();
+       inodeno_t i = session->take_ino(used_preallocated_ino);
+       if (next != i) {
+         stringstream ss;
+         ss << " replayed op " << client_reqs << " used ino " << i << " but session next is " << next;
+         mds->logclient.log(LOG_WARN, ss);
+       }
        assert(i == used_preallocated_ino);
        session->used_inos.clear();
        mds->sessionmap.projected = ++mds->sessionmap.version;