logger().warn("{} server_connect: connection race detected (cs={}, e_cs={}, ss=0)"
" and lose to existing {}, ask client to wait",
conn, client_cookie, existing_proto->client_cookie, *existing_conn);
- existing_conn->keepalive();
- return send_wait();
+ return existing_conn->keepalive().then([this] {
+ return send_wait();
+ });
}
} else {
logger().warn("{} server_connect: found client session with existing {}"
.then([this] (SocketFRef socket,
entity_addr_t peer_addr) {
auto shard = locate_shard(peer_addr);
- // don't wait before accepting another
#warning fixme
// we currently do dangerous i/o from a Connection core, different from the Socket core.
- container().invoke_on(shard, [sock = std::move(socket), peer_addr, this](auto& msgr) mutable {
+ return container().invoke_on(shard,
+ [sock = std::move(socket), peer_addr, this](auto& msgr) mutable {
SocketConnectionRef conn = seastar::make_shared<SocketConnection>(
msgr, *msgr.dispatcher, get_myaddr().is_msgr2());
conn->start_accept(std::move(sock), peer_addr);
entity_name_t::TYPE_OSD);
}).then([](ceph::net::ConnectionXRef conn) {
// send two messages
- (*conn)->send(make_message<MPing>());
- (*conn)->send(make_message<MPing>());
+ return (*conn)->send(make_message<MPing>()).then([conn] {
+ return (*conn)->send(make_message<MPing>());
+ });
}).then([server] {
return server->wait();
}).finally([client] {