- need an osdmap cache layer?
bugs
+- mds prepare_force_open_sessions, then import aborts.. session is still OPENING but no client_session is sent...
+- multimds: untar kernel, control-z, sync
- wget mismatch with multiple mds?
- rm -r failure (on kernel tree)
- dbench 1, restart mds (may take a few times), dbench will error out.
<< " on " << cm.size() << " clients"
<< dendl;
for (map<client_t,entity_inst_t>::iterator p = cm.begin(); p != cm.end(); ++p) {
- Session *session = mds->sessionmap.get_or_add_open_session(p->second);
- if (session->is_closed() || session->is_closing())
+ Session *session = mds->sessionmap.get_or_add_session(p->second);
+ if (session->is_new() ||
+ session->is_closed() || session->is_closing())
mds->sessionmap.set_state(session, Session::STATE_OPENING);
mds->sessionmap.touch_session(session);
}
while (!p.end()) {
entity_inst_t inst;
::decode(inst.name, p);
- Session *s = get_or_add_open_session(inst);
+ Session *s = get_or_add_session(inst);
+ if (s->is_new())
+ set_state(s, Session::STATE_OPEN);
s->decode(p);
}
return session_map[w];
return 0;
}
- Session* get_or_add_open_session(entity_inst_t i) {
+ Session* get_or_add_session(entity_inst_t i) {
Session *s;
if (session_map.count(i.name))
s = session_map[i.name];
else
s = session_map[i.name] = new Session;
s->inst = i;
- set_state(s, Session::STATE_OPEN);
s->last_cap_renew = g_clock.now();
return s;
}
void open_sessions(map<client_t,entity_inst_t>& client_map) {
for (map<client_t,entity_inst_t>::iterator p = client_map.begin();
p != client_map.end();
- ++p)
- get_or_add_open_session(p->second);
+ ++p) {
+ Session *s = get_or_add_session(p->second);
+ set_state(s, Session::STATE_OPEN);
+ }
version++;
}
mds->sessionmap.projected = ++mds->sessionmap.version;
assert(mds->sessionmap.version == cmapv);
if (open) {
- Session *session = mds->sessionmap.get_or_add_open_session(client_inst);
+ Session *session = mds->sessionmap.get_or_add_session(client_inst);
+ if (session->is_new())
+ mds->sessionmap.set_state(session, Session::STATE_OPEN);
dout(10) << "session " << session << " state " << session->get_state() << dendl;
} else {
Session *session = mds->sessionmap.get_session(client_inst.name);