__s32 result;
cstring result_msg;
bufferlist monmap_bl;
- bufferlist signed_ticket;
MClientMountAck(int r = 0, const char *msg = 0) :
Message(CEPH_MSG_CLIENT_MOUNT_ACK),
o << "client_mount_ack(" << result;
if (result_msg.length()) o << " " << result_msg;
if (monmap_bl.length()) o << " + monmap";
- if (signed_ticket.length()) o << " + ticket";
o << ")";
}
::decode(result, p);
::decode(result_msg, p);
::decode(monmap_bl, p);
- ::decode(signed_ticket, p);
}
void encode_payload() {
::encode(result, payload);
::encode(result_msg, payload);
::encode(monmap_bl, payload);
- ::encode(signed_ticket, payload);
}
};
case CEPH_MSG_CLIENT_MOUNT_ACK:
op_handler = &mount_handler;
- return true;
+ break;
case CEPH_MSG_CLIENT_UNMOUNT:
op_handler = &unmount_handler;
- return true;
+ break;
default:
return false;
}
delete m;
- return false;
+ return true;
}
void MonClient::handle_monmap(MMonMap *m)
int MonClient::mount(double mount_timeout)
{
- return mount_handler.do_op(mount_timeout);
+ int ret = mount_handler.do_op(mount_timeout);
+
+ dout(0) << "mount ret=" << ret << dendl;
+
+ return ret;
}
int MonClient::unmount(double timeout)
num_waiters++;
while (!got_response() ||
- (!itsme && !done)) // non-doers wait a little longer
+ (!itsme && !done)) { // non-doers wait a little longer
cond.Wait(op_lock);
+ }
if (!itsme) {
- dout(5) << "additional get_tgt returning" << dendl;
+ dout(5) << "additional returning" << dendl;
assert(got_response());
return 0;
}
timer.cancel_event(timeout_event);
timeout_event = 0;
+ done = true;
+
cond.SignalAll(); // wake up non-doers
return 0;
bufferlist::iterator p = m->monmap_bl.begin();
::decode(client->monmap, p);
- // ticket
- client->signed_ticket = m->signed_ticket;
-
client->messenger->reset_myname(m->get_dest());
+ response_flag = true;
+
cond.Signal();
}
cond.Signal();
}
+// -------------------
+// GET TGT
Message *MonClient::MonClientGetTGTHandler::build_request()
{
MAuth *msg = new MAuth;
Messenger *messenger;
bufferlist signed_ticket;
-
bufferlist tgt;
- Context *mount_timeout_event;
-
Mutex monc_lock;
bool mounted;
int mounters;
timer(op_lock) {
done = false;
num_waiters = 0;
+ timeout_event = NULL;
}
void _op_timeout(double timeout);
};
class MonClientMountHandler : public MonClientOpHandler {
+ bool response_flag;
public:
- MonClientMountHandler(MonClient *c) : MonClientOpHandler(c) {}
+ MonClientMountHandler(MonClient *c) : MonClientOpHandler(c) { response_flag = false; }
~MonClientMountHandler() {}
Message *build_request();
void handle_response(Message *response);
- bool got_response() { return client->signed_ticket.length() != 0; }
+ bool got_response() { return response_flag; }
};
class MonClientUnmountHandler : public MonClientOpHandler {
unmount_handler(this) {
mounted = false;
mounters = 0;
- mount_timeout_event = 0;
unmounting = false;
}