Simplify Connection interface for multi-core support.
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
logger().info("do_auth_single: connection closed");
return std::make_optional(auth_result_t::canceled);
}
- logger().info(
- "do_auth_single: mon {} => {} returns {}: {}",
- conn->get_messenger()->get_myaddr(),
- conn->get_peer_addr(), *m, m->result);
+ logger().info("do_auth_single: {} returns {}: {}",
+ *conn, *m, m->result);
auto p = m->result_bl.cbegin();
auto ret = auth->handle_response(m->result, p,
nullptr, nullptr);
seastar::future<> Client::handle_auth_reply(crimson::net::ConnectionRef conn,
Ref<MAuthReply> m)
{
- logger().info(
- "handle_auth_reply mon {} => {} returns {}: {}",
- conn->get_messenger()->get_myaddr(),
- conn->get_peer_addr(), *m, m->result);
+ logger().info("handle_auth_reply {} returns {}: {}",
+ *conn, *m, m->result);
auto found = std::find_if(pending_conns.begin(), pending_conns.end(),
[peer_addr = conn->get_peer_addr()](auto& mc) {
return mc->is_my_peer(peer_addr);
Interceptor *interceptor = nullptr;
#endif
- virtual Messenger* get_messenger() const = 0;
const entity_addr_t& get_peer_addr() const { return peer_addr; }
const entity_addrvec_t get_peer_addrs() const {
return entity_addrvec_t(peer_addr);
return connect(peer_addr, entity_name_t(peer_type, -1));
}
+ virtual bool owns_connection(Connection &) const = 0;
+
// wait for messenger shutdown
virtual seastar::future<> wait() = 0;
SocketConnection::~SocketConnection() {}
-crimson::net::Messenger*
-SocketConnection::get_messenger() const {
- return &messenger;
-}
-
bool SocketConnection::is_connected() const
{
assert(seastar::this_shard_id() == shard_id());
ChainedDispatchers& dispatchers);
~SocketConnection() override;
- Messenger* get_messenger() const override;
-
bool is_connected() const override;
#ifdef UNIT_TESTS_BUILT
seastar::socket_address get_local_address() const;
+ SocketMessenger &get_messenger() const {
+ return messenger;
+ }
+
friend class Protocol;
friend class ProtocolV2;
};
ConnectionRef connect(const entity_addr_t& peer_addr,
const entity_name_t& peer_name) override;
+
+ bool owns_connection(Connection &conn) const override {
+ return this == &static_cast<SocketConnection&>(conn).get_messenger();
+ }
+
// can only wait once
seastar::future<> wait() override {
assert(seastar::this_shard_id() == master_sid);
if (!p.first->get_default_policy().server &&
!p.second->get_default_policy().server) {
//verify that equal-to operator applies here
- ceph_assert(conn->get_messenger() == p.first.get());
+ ceph_assert(p.first->owns_connection(*conn));
crimson::net::ConnectionRef peer = p.second->connect(
p.first->get_myaddr(), p.first->get_mytype());
peer->mark_down();