#include "messages/MGenericMessage.h"
#include "messages/MPing.h"
+#include "messages/MAuth.h"
#include "messages/MOSDPing.h"
#include "messages/MOSDFailure.h"
#include "messages/MOSDOp.h"
op_tp("OSD::op_tp", g_conf.osd_maxthreads),
recovery_tp("OSD::recovery_tp", 1),
disk_tp("OSD::disk_tp", 2),
+ session_lock("OSD::session_lock"),
heartbeat_lock("OSD::heartbeat_lock"),
heartbeat_stop(false), heartbeat_epoch(0),
heartbeat_messenger(hbm),
switch (m->get_type()) {
+ case CEPH_MSG_AUTH:
+ handle_auth((MAuth*)m);
+ break;
+
// -- don't need lock --
case CEPH_MSG_PING:
dout(10) << "ping from " << m->get_source() << dendl;
}
}
+
+void OSD::handle_auth(MAuth *m)
+{
+ dout(10) << "handle_auth " << *m << dendl;
+ Mutex::Locker l(session_lock);
+
+ Session *s = (Session *)m->get_connection()->get_priv();
+ if (!s) {
+ s = new Session;
+ m->get_connection()->set_priv(s->get());
+ dout(10) << " new session " << s << dendl;
+ }
+
+ /*
+ bufferlist::iterator p = m->auth_payload.begin();
+ AuthBlob blob;
+ ::decode(blob, p);
+
+ AuthTicket ticket;
+ decode_decrypt(blob.blob,
+ ::decode(
+ */
+
+
+ s->put();
+ delete m;
+}
class OSDMap;
class MLog;
class MClass;
+class MAuth;
-class OSD : public Dispatcher {
+class OSD : public Dispatcher {
/** OSD **/
protected:
Mutex osd_lock; // global lock
ThreadPool recovery_tp;
ThreadPool disk_tp;
+ // -- sessions --
+public:
+ struct Session : public RefCountedObject {
+ AuthTicket ticket;
+ };
+
+private:
+ Mutex session_lock;
+
+ void handle_auth(MAuth *m);
// -- heartbeat --