]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/crimson: v2 failover tests with KEEPALIVE2, KEEPALIVE2_ACK 30803/head
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 9 Oct 2019 08:03:04 +0000 (16:03 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 9 Oct 2019 08:27:36 +0000 (16:27 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/net/Socket.cc
src/crimson/net/Socket.h
src/test/crimson/test_messenger.cc

index 280b40ff118abfd2a7c0ee0b91a72538c3915008..62d73d4b52a6a5aa72572492a55c0874f36278a6 100644 (file)
@@ -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
index 819a842a20e60389cfd6ccd7ce8f5130c55439e4..b7463f1033f744c24da3d77045db92b644c17349 100644 (file)
@@ -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
 };
 
index dec5d4ac951baa074b10f4b19eee4dccf036a2b0..940694e5db0f4c888b494f9a0b31dbfbd986730a 100644 (file)
@@ -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<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
@@ -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<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;
@@ -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] {