Use TCP on RDMA connection failure

This commit is contained in:
Vitaliy Filippov
2025-03-23 12:04:23 +03:00
parent ebaf3fee79
commit ccc32b9e68
+2 -8
View File
@@ -587,24 +587,18 @@ void osd_messenger_t::check_peer_config(osd_client_t *cl)
return; return;
} }
#ifdef WITH_RDMA #ifdef WITH_RDMA
if (config["rdma_address"].is_string()) if (cl->rdma_conn && config["rdma_address"].is_string())
{ {
msgr_rdma_address_t addr; msgr_rdma_address_t addr;
if (!msgr_rdma_address_t::from_string(config["rdma_address"].string_value().c_str(), &addr) || if (!msgr_rdma_address_t::from_string(config["rdma_address"].string_value().c_str(), &addr) ||
cl->rdma_conn->connect(&addr) != 0) cl->rdma_conn->connect(&addr) != 0)
{ {
fprintf( fprintf(
stderr, "Failed to connect to OSD %ju (address %s) using RDMA\n", stderr, "Failed to connect to OSD %ju (address %s) using RDMA, switching back to TCP\n",
cl->osd_num, config["rdma_address"].string_value().c_str() cl->osd_num, config["rdma_address"].string_value().c_str()
); );
delete cl->rdma_conn; delete cl->rdma_conn;
cl->rdma_conn = NULL; cl->rdma_conn = NULL;
// FIXME: Keep TCP connection in this case
osd_num_t peer_osd = cl->osd_num;
stop_client(cl->peer_fd);
on_connect_peer(peer_osd, -EINVAL);
delete op;
return;
} }
else else
{ {