ceph_assert(r == 0);
log_session_status("ACCEPTED", "");
});
- mdlog->submit_entry(new ESession(m->get_source_inst(), true, pv, client_metadata),
+ mdlog->submit_entry(new ESession(m->get_source_inst(), true, pv,
+ client_metadata, session->info.auth_name),
new C_MDS_session_finish(this, session, sseq, true, pv, fin));
mdlog->flush();
}
} else
piv = 0;
- auto le = new ESession(session->info.inst, false, pv, inos_to_free, piv, session->delegated_inos);
+ auto le = new ESession(session->info.inst, false, pv, inos_to_free, piv,
+ session->delegated_inos, session->info.auth_name);
auto fin = new C_MDS_session_finish(this, session, sseq, false, pv, inos_to_free, piv,
session->delegated_inos, mdlog->get_current_segment(), on_safe);
mdlog->submit_entry(le, fin);
// Client metadata stored during open
client_metadata_t client_metadata;
+ // persist auth_name to allow journal recreated session to be reclaimed
+ EntityName auth_name;
+
public:
ESession() : LogEvent(EVENT_SESSION), open(false) { }
ESession(const entity_inst_t& inst, bool o, version_t v,
- const client_metadata_t& cm) :
+ const client_metadata_t& cm, EntityName auth_name_) :
LogEvent(EVENT_SESSION),
client_inst(inst), open(o), cmapv(v), inotablev(0),
- client_metadata(cm) { }
+ client_metadata(cm), auth_name(auth_name_) { }
ESession(const entity_inst_t& inst, bool o, version_t v,
const interval_set<inodeno_t>& to_free, version_t iv,
- const interval_set<inodeno_t>& to_purge) :
+ const interval_set<inodeno_t>& to_purge, EntityName auth_name_) :
LogEvent(EVENT_SESSION), client_inst(inst), open(o), cmapv(v),
- inos_to_free(to_free), inotablev(iv), inos_to_purge(to_purge) {}
+ inos_to_free(to_free), inotablev(iv), inos_to_purge(to_purge),
+ auth_name(auth_name_) {}
void encode(bufferlist& bl, uint64_t features) const override;
void decode(bufferlist::const_iterator& bl) override;
session = mds->sessionmap.get_or_add_session(client_inst);
mds->sessionmap.set_state(session, Session::STATE_OPEN);
session->set_client_metadata(client_metadata);
+ if (session->info.auth_name.to_str().empty()) {
+ session->info.auth_name = auth_name;
+ }
dout(10) << " opened session " << session->info.inst << dendl;
} else {
session = mds->sessionmap.get_session(client_inst.name);
void ESession::encode(bufferlist &bl, uint64_t features) const
{
- ENCODE_START(6, 5, bl);
+ ENCODE_START(7, 5, bl);
encode(stamp, bl);
encode(client_inst, bl, features);
encode(open, bl);
encode(inotablev, bl);
encode(client_metadata, bl);
encode(inos_to_purge, bl);
+ encode(auth_name, bl);
ENCODE_FINISH(bl);
}
void ESession::decode(bufferlist::const_iterator &bl)
{
- DECODE_START_LEGACY_COMPAT_LEN(6, 3, 3, bl);
+ DECODE_START_LEGACY_COMPAT_LEN(7, 3, 3, bl);
if (struct_v >= 2)
decode(stamp, bl);
decode(client_inst, bl);
if (struct_v >= 6){
decode(inos_to_purge, bl);
}
+ if (struct_v >= 7) {
+ decode(auth_name, bl);
+ }
DECODE_FINISH(bl);
}