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());
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;