Skip to content

Commit d1c0abc

Browse files
committed
[ICRDMA] Do not try to disable RDMA if it was not requested. (#28618)
The outgoing hanshake code had a wrong logic and expected qp response even in case of regular(without RDMA) handshake. This commit fixes it.
1 parent 75001e1 commit d1c0abc

File tree

1 file changed

+24
-21
lines changed

1 file changed

+24
-21
lines changed

ydb/library/actors/interconnect/interconnect_handshake.cpp

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -891,31 +891,34 @@ namespace NActors {
891891
ParsePeerScopeId(success.GetServerScopeId());
892892
}
893893

894-
if (Rdma && success.HasQpPrepared()) {
895-
const auto& remoteQpPrepared = success.GetQpPrepared();
896-
LOG_LOG_IC_X(NActorsServices::INTERCONNECT, "ICRDMA", NLog::PRI_TRACE,
897-
"peer has prepared qp: %d", remoteQpPrepared.GetQpNum());
898-
NInterconnect::NRdma::THandshakeData hd {
899-
.QpNum = remoteQpPrepared.GetQpNum(),
900-
.SubnetPrefix = remoteQpPrepared.GetSubnetPrefix(),
901-
.InterfaceId = remoteQpPrepared.GetInterfaceId(),
902-
.MtuIndex = remoteQpPrepared.GetMtuIndex(),
903-
};
904-
int err = Rdma.Qp->ToRtsState(hd);
905-
if (err) {
906-
TStringBuilder sb;
907-
sb << hd;
894+
if (Rdma) {
895+
if (success.HasQpPrepared()) {
896+
const auto& remoteQpPrepared = success.GetQpPrepared();
897+
LOG_LOG_IC_X(NActorsServices::INTERCONNECT, "ICRDMA", NLog::PRI_TRACE,
898+
"peer has prepared qp: %d", remoteQpPrepared.GetQpNum());
899+
NInterconnect::NRdma::THandshakeData hd {
900+
.QpNum = remoteQpPrepared.GetQpNum(),
901+
.SubnetPrefix = remoteQpPrepared.GetSubnetPrefix(),
902+
.InterfaceId = remoteQpPrepared.GetInterfaceId(),
903+
.MtuIndex = remoteQpPrepared.GetMtuIndex(),
904+
};
905+
int err = Rdma.Qp->ToRtsState(hd);
906+
if (err) {
907+
TStringBuilder sb;
908+
sb << hd;
909+
LOG_LOG_IC_X(NActorsServices::INTERCONNECT, "ICRDMA", NLog::PRI_ERROR,
910+
"Unable to promote QP to RTS, err: %d (%s), handshake data: %s", err, strerror(err), sb.data());
911+
Rdma.HandShakeMemRegion.Reset();
912+
Rdma.Clear();
913+
} else {
914+
Params.ChecksumRdmaEvent = remoteQpPrepared.GetRdmaChecksum();
915+
}
916+
} else {
908917
LOG_LOG_IC_X(NActorsServices::INTERCONNECT, "ICRDMA", NLog::PRI_ERROR,
909-
"Unable to promote QP to RTS, err: %d (%s), handshake data: %s", err, strerror(err), sb.data());
918+
"Non success qp response from remote side");
910919
Rdma.HandShakeMemRegion.Reset();
911920
Rdma.Clear();
912921
}
913-
Params.ChecksumRdmaEvent = remoteQpPrepared.GetRdmaChecksum();
914-
} else {
915-
LOG_LOG_IC_X(NActorsServices::INTERCONNECT, "ICRDMA", NLog::PRI_ERROR,
916-
"Non success qp response from remote side");
917-
Rdma.HandShakeMemRegion.Reset();
918-
Rdma.Clear();
919922
}
920923

921924
// recover peer process info from peer's reply

0 commit comments

Comments
 (0)