From: Sage Weil Date: Fri, 20 Nov 2009 21:04:02 +0000 (-0800) Subject: mds: warn if replay used ino doesn't match session's next X-Git-Tag: v0.18~64 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a7e5be7aa542381d305eb0d6ee88f221e72cfff7;p=ceph.git mds: warn if replay used ino doesn't match session's next --- diff --git a/src/mds/SessionMap.h b/src/mds/SessionMap.h index 34fbe6931191..06d95893dc24 100644 --- a/src/mds/SessionMap.h +++ b/src/mds/SessionMap.h @@ -60,6 +60,11 @@ public: interval_set prealloc_inos; // preallocated, ready to use. interval_set 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()); diff --git a/src/mds/journal.cc b/src/mds/journal.cc index 3073a23e72d5..6e33083d17d7 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -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;