libceph: decouple hunting and subs management
Coupling hunting state with subscribe state is not a good idea. Clear hunting when we complete the authentication handshake. Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
02ac956c42
commit
0f9af169a1
@ -255,12 +255,6 @@ static void handle_subscribe_ack(struct ceph_mon_client *monc,
|
|||||||
seconds = le32_to_cpu(h->duration);
|
seconds = le32_to_cpu(h->duration);
|
||||||
|
|
||||||
mutex_lock(&monc->mutex);
|
mutex_lock(&monc->mutex);
|
||||||
if (monc->hunting) {
|
|
||||||
pr_info("mon%d %s session established\n",
|
|
||||||
monc->cur_mon,
|
|
||||||
ceph_pr_addr(&monc->con.peer_addr.in_addr));
|
|
||||||
monc->hunting = false;
|
|
||||||
}
|
|
||||||
dout("handle_subscribe_ack after %d seconds\n", seconds);
|
dout("handle_subscribe_ack after %d seconds\n", seconds);
|
||||||
monc->sub_renew_after = monc->sub_sent + (seconds >> 1)*HZ - 1;
|
monc->sub_renew_after = monc->sub_sent + (seconds >> 1)*HZ - 1;
|
||||||
monc->sub_sent = 0;
|
monc->sub_sent = 0;
|
||||||
@ -877,6 +871,14 @@ void ceph_monc_stop(struct ceph_mon_client *monc)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ceph_monc_stop);
|
EXPORT_SYMBOL(ceph_monc_stop);
|
||||||
|
|
||||||
|
static void finish_hunting(struct ceph_mon_client *monc)
|
||||||
|
{
|
||||||
|
if (monc->hunting) {
|
||||||
|
dout("%s found mon%d\n", __func__, monc->cur_mon);
|
||||||
|
monc->hunting = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void handle_auth_reply(struct ceph_mon_client *monc,
|
static void handle_auth_reply(struct ceph_mon_client *monc,
|
||||||
struct ceph_msg *msg)
|
struct ceph_msg *msg)
|
||||||
{
|
{
|
||||||
@ -890,11 +892,15 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
|
|||||||
msg->front.iov_len,
|
msg->front.iov_len,
|
||||||
monc->m_auth->front.iov_base,
|
monc->m_auth->front.iov_base,
|
||||||
monc->m_auth->front_alloc_len);
|
monc->m_auth->front_alloc_len);
|
||||||
|
if (ret > 0) {
|
||||||
|
__send_prepared_auth_request(monc, ret);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
finish_hunting(monc);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
monc->client->auth_err = ret;
|
monc->client->auth_err = ret;
|
||||||
wake_up_all(&monc->client->auth_wq);
|
|
||||||
} else if (ret > 0) {
|
|
||||||
__send_prepared_auth_request(monc, ret);
|
|
||||||
} else if (!was_auth && ceph_auth_is_authenticated(monc->auth)) {
|
} else if (!was_auth && ceph_auth_is_authenticated(monc->auth)) {
|
||||||
dout("authenticated, starting session\n");
|
dout("authenticated, starting session\n");
|
||||||
|
|
||||||
@ -904,8 +910,15 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
|
|||||||
|
|
||||||
__send_subscribe(monc);
|
__send_subscribe(monc);
|
||||||
__resend_generic_request(monc);
|
__resend_generic_request(monc);
|
||||||
|
|
||||||
|
pr_info("mon%d %s session established\n", monc->cur_mon,
|
||||||
|
ceph_pr_addr(&monc->con.peer_addr.in_addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
mutex_unlock(&monc->mutex);
|
mutex_unlock(&monc->mutex);
|
||||||
|
if (monc->client->auth_err < 0)
|
||||||
|
wake_up_all(&monc->client->auth_wq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __validate_auth(struct ceph_mon_client *monc)
|
static int __validate_auth(struct ceph_mon_client *monc)
|
||||||
|
Loading…
Reference in New Issue
Block a user