ceph_abort();
}
- if (tracked_conn && tracked_conn != conn) {
+ if (tracked_conn &&
+ !tracked_conn->is_closed() &&
+ tracked_conn != conn) {
logger().error("[{}] {} got accepted, but there's already traced_conn [{}] {}",
result->index, *conn, tracked_index, *tracked_conn);
ceph_abort();
return std::reference_wrapper<ConnResults>(interceptor.results);
});
}
+
+ bool is_standby() {
+ ceph_assert(tracked_conn);
+ return !(tracked_conn->is_connected() || tracked_conn->is_closed());
+ }
};
class FailoverTest : public Dispatcher {
}
seastar::future<> ms_handle_accept(ConnectionRef conn) override {
- ceph_assert(!tracked_conn || tracked_conn == conn);
+ ceph_assert(!tracked_conn ||
+ tracked_conn->is_closed() ||
+ tracked_conn == conn);
tracked_conn = conn;
return flush_pending_send();
}
results[1].assert_connect(1, 1, 0, 1);
results[1].assert_accept(0, 0, 0, 0);
results[1].assert_reset(0, 0);
- // TODO: further tests
+ }).then([&test] {
logger().info("-- 2 --");
logger().info("[Test] server markdown...");
+ return test.markdown_peer();
+ }).then([&suite] {
+ return suite.wait_results(2);
+ }).then([] (ConnResults& results) {
+ results[0].assert_state_at(conn_state_t::closed);
+ results[0].assert_connect(1, 1, 0, 1);
+ results[0].assert_accept(0, 0, 0, 0);
+ results[0].assert_reset(0, 0);
+ results[1].assert_state_at(conn_state_t::closed);
+ results[1].assert_connect(1, 1, 0, 1);
+ results[1].assert_accept(0, 0, 0, 0);
+ results[1].assert_reset(1, 0);
+ // TODO: further tests
logger().info("-- 3 --");
logger().info("[Test] client reconnect...");
});
results[1].assert_connect(0, 0, 0, 0);
results[1].assert_accept(1, 1, 0, 1);
results[1].assert_reset(0, 0);
- // TODO: further tests
+ }).then([&suite] {
logger().info("-- 2 --");
logger().info("[Test] server markdown...");
+ return suite.markdown();
+ }).then([&suite] {
+ return suite.wait_results(2);
+ }).then([] (ConnResults& results) {
+ results[0].assert_state_at(conn_state_t::closed);
+ results[0].assert_connect(0, 0, 0, 0);
+ results[0].assert_accept(1, 1, 0, 1);
+ results[0].assert_reset(1, 0);
+ results[1].assert_state_at(conn_state_t::closed);
+ results[1].assert_connect(0, 0, 0, 0);
+ results[1].assert_accept(1, 1, 0, 1);
+ results[1].assert_reset(0, 0);
+ // TODO: further tests
logger().info("-- 3 --");
logger().info("[Test] client reconnect...");
});
results[1].assert_connect(1, 1, 0, 1);
results[1].assert_accept(0, 0, 0, 0);
results[1].assert_reset(0, 0);
- // TODO: further tests
+ }).then([&test] {
logger().info("-- 2 --");
logger().info("[Test] server markdown...");
+ return test.markdown_peer();
+ }).then([&suite] {
+ return suite.wait_results(2);
+ }).then([] (ConnResults& results) {
+ results[0].assert_state_at(conn_state_t::closed);
+ results[0].assert_connect(1, 1, 0, 1);
+ results[0].assert_accept(0, 0, 0, 0);
+ results[0].assert_reset(0, 0);
+ results[1].assert_state_at(conn_state_t::established);
+ results[1].assert_connect(2, 2, 1, 2);
+ results[1].assert_accept(0, 0, 0, 0);
+ results[1].assert_reset(0, 1);
+ // TODO: further tests
logger().info("-- 3 --");
logger().info("[Test] client reconnect...");
});
results[1].assert_connect(0, 0, 0, 0);
results[1].assert_accept(1, 1, 0, 0);
results[1].assert_reset(0, 0);
- // TODO: further tests
+ }).then([&suite] {
logger().info("-- 2 --");
logger().info("[Test] server markdown...");
+ return suite.markdown();
+ }).then([&suite] {
+ return suite.wait_results(3);
+ }).then([] (ConnResults& results) {
+ results[0].assert_state_at(conn_state_t::closed);
+ results[0].assert_connect(0, 0, 0, 0);
+ results[0].assert_accept(1, 1, 0, 2);
+ results[0].assert_reset(0, 1);
+ results[1].assert_state_at(conn_state_t::replaced);
+ results[1].assert_connect(0, 0, 0, 0);
+ results[1].assert_accept(1, 1, 0, 0);
+ results[1].assert_reset(0, 0);
+ results[2].assert_state_at(conn_state_t::established);
+ results[2].assert_connect(0, 0, 0, 0);
+ results[2].assert_accept(1, 1, 1, 1);
+ results[2].assert_reset(0, 0);
+ // TODO: further tests
logger().info("-- 3 --");
logger().info("[Test] client reconnect...");
});
results[1].assert_connect(1, 1, 0, 1);
results[1].assert_accept(0, 0, 0, 0);
results[1].assert_reset(0, 0);
- // TODO: further tests
+ }).then([&test] {
logger().info("-- 2 --");
logger().info("[Test] acceptor markdown...");
+ return test.markdown_peer();
+ }).then([] {
+ return seastar::sleep(100ms);
+ }).then([&suite] {
+ ceph_assert(suite.is_standby());
+ // TODO: further tests
logger().info("-- 3 --");
logger().info("[Test] connector reconnect...");
});
results[1].assert_connect(0, 0, 0, 0);
results[1].assert_accept(1, 1, 0, 0);
results[1].assert_reset(0, 0);
- // TODO: further tests
+ }).then([] {
logger().info("-- 2 --");
logger().info("[Test] acceptor markdown...");
+ return seastar::sleep(100ms);
+ }).then([&suite] {
+ return suite.markdown();
+ }).then([&suite] {
+ return suite.wait_results(2);
+ }).then([] (ConnResults& results) {
+ results[0].assert_state_at(conn_state_t::closed);
+ results[0].assert_connect(0, 0, 0, 0);
+ results[0].assert_accept(1, 1, 0, 2);
+ results[0].assert_reset(0, 1);
+ results[1].assert_state_at(conn_state_t::replaced);
+ results[1].assert_connect(0, 0, 0, 0);
+ results[1].assert_accept(1, 1, 0, 0);
+ results[1].assert_reset(0, 0);
+ // TODO: further tests
logger().info("-- 3 --");
logger().info("[Test] connector reconnect...");
});
results[1].assert_connect(1, 1, 0, 1);
results[1].assert_accept(0, 0, 0, 0);
results[1].assert_reset(0, 0);
- // TODO: further tests
+ }).then([&test] {
logger().info("-- 2 --");
logger().info("[Test] acceptor markdown...");
+ return test.markdown_peer();
+ }).then([] {
+ return seastar::sleep(100ms);
+ }).then([&suite] {
+ ceph_assert(suite.is_standby());
+ // TODO: further tests
logger().info("-- 3 --");
logger().info("[Test] connector reconnect...");
});
results[1].assert_connect(0, 0, 0, 0);
results[1].assert_accept(1, 1, 0, 0);
results[1].assert_reset(0, 0);
- // TODO: further tests
+ }).then([] {
logger().info("-- 2 --");
logger().info("[Test] acceptor markdown...");
+ return seastar::sleep(100ms);
+ }).then([&suite] {
+ return suite.markdown();
+ }).then([&suite] {
+ return suite.wait_results(2);
+ }).then([] (ConnResults& results) {
+ results[0].assert_state_at(conn_state_t::closed);
+ results[0].assert_connect(0, 0, 0, 0);
+ results[0].assert_accept(1, 1, 0, 2);
+ results[0].assert_reset(0, 0);
+ results[1].assert_state_at(conn_state_t::replaced);
+ results[1].assert_connect(0, 0, 0, 0);
+ results[1].assert_accept(1, 1, 0, 0);
+ results[1].assert_reset(0, 0);
+ // TODO: further tests
logger().info("-- 3 --");
logger().info("[Test] connector reconnect...");
});