From a7e5be7aa542381d305eb0d6ee88f221e72cfff7 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 20 Nov 2009 13:04:02 -0800 Subject: [PATCH] mds: warn if replay used ino doesn't match session's next --- src/mds/SessionMap.h | 5 +++++ src/mds/journal.cc | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/mds/SessionMap.h b/src/mds/SessionMap.h index 34fbe6931191a..06d95893dc24a 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 3073a23e72d54..6e33083d17d7d 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; -- 2.39.5