mirror of
https://github.com/ceph/ceph
synced 2025-01-29 22:43:40 +00:00
msg/async/Protocol*: send keep alive if existing wins
This is a follow-up fix of https://github.com/ceph/ceph/pull/25754. It turns out the existing connection would win the connection race and then be stuck in the __replacing__ stage forever without being aware of that the underlying Pipe is actually broken. Fix by forcing existing sending keepalive periodically __too__. Fixes: http://tracker.ceph.com/issues/38493 Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
This commit is contained in:
parent
c1112928b7
commit
61b9432ef9
@ -1998,6 +1998,8 @@ CtPtr ProtocolV1::handle_connect_message_2() {
|
||||
<< " existing_state="
|
||||
<< connection->get_state_name(existing->state) << dendl;
|
||||
reply.global_seq = exproto->peer_global_seq;
|
||||
// make sure we notice if existing connection is no longer functioning
|
||||
existing->send_keepalive();
|
||||
existing->lock.unlock();
|
||||
return send_connect_message_reply(CEPH_MSGR_TAG_RETRY_GLOBAL, reply,
|
||||
authorizer_reply);
|
||||
|
@ -2464,6 +2464,8 @@ CtPtr ProtocolV2::handle_reconnect(ceph::bufferlist &payload)
|
||||
ldout(cct, 1) << __func__
|
||||
<< " existing racing replace happened while replacing."
|
||||
<< " existing=" << existing << dendl;
|
||||
// make sure we notice if existing connection is no longer functioning
|
||||
existing->send_keepalive();
|
||||
auto retry = RetryGlobalFrame::Encode(session_stream_handlers,
|
||||
exproto->peer_global_seq);
|
||||
return WRITE(retry, "session retry", read_frame);
|
||||
@ -2571,6 +2573,8 @@ CtPtr ProtocolV2::handle_existing_connection(AsyncConnectionRef existing) {
|
||||
ldout(cct, 1) << __func__
|
||||
<< " existing racing replace happened while replacing."
|
||||
<< " existing=" << existing << dendl;
|
||||
// make sure we notice if existing connection is no longer functioning
|
||||
existing->send_keepalive();
|
||||
auto wait = WaitFrame::Encode(session_stream_handlers);
|
||||
return WRITE(wait, "wait", read_frame);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user