From: Yingxin Cheng Date: Wed, 9 Oct 2019 08:03:04 +0000 (+0800) Subject: test/crimson: v2 failover tests with KEEPALIVE2, KEEPALIVE2_ACK X-Git-Tag: v15.1.0~1247^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4f4c5cd6a1836c29297fe58de0b03664cde3d199;p=ceph.git test/crimson: v2 failover tests with KEEPALIVE2, KEEPALIVE2_ACK Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/net/Socket.cc b/src/crimson/net/Socket.cc index 280b40ff118..62d73d4b52a 100644 --- a/src/crimson/net/Socket.cc +++ b/src/crimson/net/Socket.cc @@ -173,6 +173,23 @@ seastar::future<> Socket::try_trap_post(bp_action_t& trap) { } return seastar::now(); } + +void Socket::set_trap(bp_type_t type, bp_action_t action, socket_blocker* blocker_) { + blocker = blocker_; + if (type == bp_type_t::READ) { + ceph_assert(next_trap_read == bp_action_t::CONTINUE); + next_trap_read = action; + } else { // type == bp_type_t::WRITE + if (next_trap_write == bp_action_t::CONTINUE) { + next_trap_write = action; + } else if (next_trap_write == bp_action_t::FAULT) { + // do_sweep_messages() may combine multiple write events into one socket write + ceph_assert(action == bp_action_t::FAULT || action == bp_action_t::CONTINUE); + } else { + ceph_abort(); + } + } +} #endif } // namespace ceph::net diff --git a/src/crimson/net/Socket.h b/src/crimson/net/Socket.h index 819a842a20e..b7463f1033f 100644 --- a/src/crimson/net/Socket.h +++ b/src/crimson/net/Socket.h @@ -135,16 +135,7 @@ class Socket seastar::future<> try_trap_post(bp_action_t& trap); public: - void set_trap(bp_type_t type, bp_action_t action, socket_blocker* blocker_) { - blocker = blocker_; - if (type == bp_type_t::READ) { - ceph_assert(next_trap_read == bp_action_t::CONTINUE); - next_trap_read = action; - } else { - ceph_assert(next_trap_write == bp_action_t::CONTINUE); - next_trap_write = action; - } - } + void set_trap(bp_type_t type, bp_action_t action, socket_blocker* blocker_); #endif }; diff --git a/src/test/crimson/test_messenger.cc b/src/test/crimson/test_messenger.cc index dec5d4ac951..940694e5db0 100644 --- a/src/test/crimson/test_messenger.cc +++ b/src/test/crimson/test_messenger.cc @@ -882,6 +882,7 @@ enum class cmd_t : char { suite_stop, suite_connect_me, suite_send_me, + suite_keepalive_me, suite_recv_op }; @@ -1246,6 +1247,12 @@ class FailoverSuite : public Dispatcher { } } + seastar::future<> keepalive_peer() { + logger().info("[Test] keepalive_peer()"); + ceph_assert(tracked_conn); + return tracked_conn->keepalive(); + } + seastar::future<> wait_blocked() { logger().info("[Test] wait_blocked() ..."); return interceptor.blocker.wait_blocked(); @@ -1453,6 +1460,12 @@ class FailoverTest : public Dispatcher { return peer_send_me(); }); } + + seastar::future<> peer_keepalive_me() { + logger().info("[Test] peer_keepalive_me()"); + ceph_assert(test_suite); + return prepare_cmd(cmd_t::suite_keepalive_me); + } }; class FailoverSuitePeer : public Dispatcher { @@ -1546,6 +1559,12 @@ class FailoverSuitePeer : public Dispatcher { } } + seastar::future<> keepalive_peer() { + logger().info("[TestPeer] keepalive_peer()"); + ceph_assert(tracked_conn); + return tracked_conn->keepalive(); + } + static seastar::future> create(entity_addr_t addr, const SocketPolicy& policy, cb_t op_callback) { return Messenger::create(entity_name_t::OSD(4), "TestPeer", 4, 0 @@ -1630,6 +1649,9 @@ class FailoverTestPeer : public Dispatcher { case cmd_t::suite_send_me: ceph_assert(test_suite); return test_suite->send_peer(); + case cmd_t::suite_keepalive_me: + ceph_assert(test_suite); + return test_suite->keepalive_peer(); default: logger().error("TestPeer got unexpected command {} from Test", m_cmd); ceph_abort(); @@ -1981,6 +2003,10 @@ test_v2_lossless_connected_fault2(FailoverTest& test) { return seastar::do_with(std::vector{ {Tag::ACK, bp_type_t::READ}, {Tag::ACK, bp_type_t::WRITE}, + {Tag::KEEPALIVE2, bp_type_t::READ}, + {Tag::KEEPALIVE2, bp_type_t::WRITE}, + {Tag::KEEPALIVE2_ACK, bp_type_t::READ}, + {Tag::KEEPALIVE2_ACK, bp_type_t::WRITE}, }, [&test] (auto& failure_cases) { return seastar::do_for_each(failure_cases, [&test] (auto bp) { TestInterceptor interceptor; @@ -1997,10 +2023,14 @@ test_v2_lossless_connected_fault2(FailoverTest& test) { return suite.wait_established(); }).then([&suite] { return suite.send_peer(); + }).then([&suite] { + return suite.keepalive_peer(); }).then([&suite] { return suite.wait_established(); }).then([&test] { return test.peer_send_me(); + }).then([&test] { + return test.peer_keepalive_me(); }).then([&suite] { return suite.wait_established(); }).then([&suite] {