}
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
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
};
suite_stop,
suite_connect_me,
suite_send_me,
+ suite_keepalive_me,
suite_recv_op
};
}
}
+ 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();
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 {
}
}
+ seastar::future<> keepalive_peer() {
+ logger().info("[TestPeer] keepalive_peer()");
+ ceph_assert(tracked_conn);
+ return tracked_conn->keepalive();
+ }
+
static seastar::future<std::unique_ptr<FailoverSuitePeer>>
create(entity_addr_t addr, const SocketPolicy& policy, cb_t op_callback) {
return Messenger::create(entity_name_t::OSD(4), "TestPeer", 4, 0
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();
return seastar::do_with(std::vector<Breakpoint>{
{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;
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] {