- fix readdir vs fragment race by keeping a separate frag pos, and ignoring dentries below it
mds
-- make clientreplay faster
- fix file recovery
- make sure we recover mtime, not just size.. i.e. max_size > 0, not > size.
- disallow access until file is recovered?
mds->logger->favg(l_mds_replyl, g_clock.now() - mdr->client_request->get_recv_stamp());
}
- if (mdr->client_request && mdr->client_request->is_replay()) {
- dout(10) << " queueing next replay op" << dendl;
- mds->queue_one_replay();
- }
-
request_cleanup(mdr);
}
// remove from session
mdr->session_request_item.remove_myself();
+ bool was_replay = mdr->client_request && mdr->client_request->is_replay();
+
// remove from map
active_requests.erase(mdr->reqid);
mdr->put();
+ // fail-safe!
+ if (was_replay && active_requests.empty()) {
+ dout(10) << " fail-safe queueing next replay op" << dendl;
+ mds->queue_one_replay();
+ }
+
if (mds->logger)
log_stat();
}
mdlog->submit_entry(le, fin,
mdr->did_ino_allocation());
- if (mdr->did_early_reply)
+ if (mdr->client_request && mdr->client_request->is_replay()) {
+ if (mds->queue_one_replay()) {
+ dout(10) << " queued next replay op" << dendl;
+ } else {
+ dout(10) << " journaled last replay op, flushing" << dendl;
+ mdlog->flush();
+ }
+ } else if (mdr->did_early_reply)
mds->locker->drop_rdlocks(mdr);
else
mdlog->flush();