diff options
author | Sage Weil <sage@newdream.net> | 2009-11-20 13:04:02 -0800 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2009-11-20 13:40:38 -0800 |
commit | a7e5be7aa542381d305eb0d6ee88f221e72cfff7 (patch) | |
tree | 1498b04cc911837a4fddc05928d520bd4bbfe41d | |
parent | 29efb0b563e3659206c94d026aa54c138b17ece8 (diff) | |
download | ceph-a7e5be7aa542381d305eb0d6ee88f221e72cfff7.tar.gz |
mds: warn if replay used ino doesn't match session's next
-rw-r--r-- | src/mds/SessionMap.h | 5 | ||||
-rw-r--r-- | src/mds/journal.cc | 8 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/mds/SessionMap.h b/src/mds/SessionMap.h index 34fbe693119..06d95893dc2 100644 --- a/src/mds/SessionMap.h +++ b/src/mds/SessionMap.h @@ -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()); diff --git a/src/mds/journal.cc b/src/mds/journal.cc index 3073a23e72d..6e33083d17d 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; |