summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-11-20 13:04:02 -0800
committerSage Weil <sage@newdream.net>2009-11-20 13:40:38 -0800
commita7e5be7aa542381d305eb0d6ee88f221e72cfff7 (patch)
tree1498b04cc911837a4fddc05928d520bd4bbfe41d
parent29efb0b563e3659206c94d026aa54c138b17ece8 (diff)
downloadceph-a7e5be7aa542381d305eb0d6ee88f221e72cfff7.tar.gz
mds: warn if replay used ino doesn't match session's next
-rw-r--r--src/mds/SessionMap.h5
-rw-r--r--src/mds/journal.cc8
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;