]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/dmclock/test/test_dmclock_client.cc
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / dmclock / test / test_dmclock_client.cc
index ee4172dc348ac5daebb13c3ec08541472b8b7a1b..58840457b3a190880cd0c305b81576bf83a4f992 100644 (file)
@@ -1,7 +1,15 @@
 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
 // vim: ts=8 sw=2 smarttab
+
 /*
  * Copyright (C) 2016 Red Hat Inc.
+ *
+ * Author: J. Eric Ivancich <ivancich@redhat.com>
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License version
+ * 2.1, as published by the Free Software Foundation.  See file
+ * COPYING.
  */
 
 
@@ -97,7 +105,7 @@ namespace crimson {
     } // TEST
 
 
-    TEST(dmclock_client, delta_rho_values) {
+    TEST(dmclock_client, delta_rho_values_borrowing_tracker) {
       using ServerId = int;
       // using ClientId = int;
 
@@ -107,9 +115,8 @@ namespace crimson {
 
       // RespParams<ServerId> resp_params(server, dmc::PhaseType::reservation);
 
-      dmc::ServiceTracker<ServerId> st(std::chrono::seconds(2),
-                                       std::chrono::seconds(3));
-
+      dmc::ServiceTracker<ServerId,dmc::BorrowingTracker> st(std::chrono::seconds(2),
+                                                            std::chrono::seconds(3));
       auto rp1 = st.get_req_params(server1);
 
       EXPECT_EQ(1u, rp1.delta) <<
@@ -128,7 +135,8 @@ namespace crimson {
        "rho should be 1 with no intervening reservation responses by" <<
        "other servers";
 
-      st.track_resp(server1, dmc::PhaseType::priority);
+      // RESPONSE
+      st.track_resp(server1, dmc::PhaseType::priority, 1u);
 
       auto rp3 = st.get_req_params(server1);
 
@@ -139,11 +147,12 @@ namespace crimson {
        "rho should be 1 with no intervening reservation responses by" <<
        "other servers";
 
-      st.track_resp(server2, dmc::PhaseType::priority);
+      // RESPONSE
+      st.track_resp(server2, dmc::PhaseType::priority, 1u);
 
       auto rp4 = st.get_req_params(server1);
 
-      EXPECT_EQ(2u, rp4.delta) <<
+      EXPECT_EQ(1u, rp4.delta) <<
        "delta should be 2 with one intervening priority response by " <<
        "another server";
       EXPECT_EQ(1u, rp4.rho) <<
@@ -159,43 +168,42 @@ namespace crimson {
        "rho should be 1 with no intervening reservation responses by" <<
        "other servers";
 
-      st.track_resp(server2, dmc::PhaseType::reservation);
+      // RESPONSE
+      st.track_resp(server2, dmc::PhaseType::reservation, 1u);
 
       auto rp6 = st.get_req_params(server1);
 
-      EXPECT_EQ(2u, rp6.delta) <<
+      EXPECT_EQ(1u, rp6.delta) <<
        "delta should be 2 with one intervening reservation response by " <<
        "another server";
-      EXPECT_EQ(2u, rp6.rho) <<
+      EXPECT_EQ(1u, rp6.rho) <<
        "rho should be 2 with one intervening reservation responses by " <<
        "another server";
 
-      // auto rp6_b = st.get_req_params(server2);
-
-      st.track_resp(server2, dmc::PhaseType::reservation);
-      st.track_resp(server1, dmc::PhaseType::priority);
-      st.track_resp(server2, dmc::PhaseType::priority);
-      st.track_resp(server2, dmc::PhaseType::reservation);
-      st.track_resp(server1, dmc::PhaseType::reservation);
-      st.track_resp(server1, dmc::PhaseType::priority);
-      st.track_resp(server2, dmc::PhaseType::priority);
+      st.track_resp(server2, dmc::PhaseType::reservation, 1u);
+      st.track_resp(server1, dmc::PhaseType::priority, 1u);
+      st.track_resp(server2, dmc::PhaseType::priority, 1u);
+      st.track_resp(server2, dmc::PhaseType::reservation, 1u);
+      st.track_resp(server1, dmc::PhaseType::reservation, 1u);
+      st.track_resp(server1, dmc::PhaseType::priority, 1u);
+      st.track_resp(server2, dmc::PhaseType::priority, 1u);
 
       auto rp7 = st.get_req_params(server1);
 
       EXPECT_EQ(5u, rp7.delta) <<
-       "delta should be 5 with fourintervening responses by " <<
+       "delta should be 5 with four intervening responses by " <<
        "another server";
-      EXPECT_EQ(3u, rp7.rho) <<
-       "rho should be 3 with two intervening reservation responses by " <<
+      EXPECT_EQ(1u, rp7.rho) <<
+       "rho should be 1 with two intervening reservation responses by " <<
        "another server";
 
       auto rp7b = st.get_req_params(server2);
 
-      EXPECT_EQ(4u, rp7b.delta) <<
-       "delta should be 4 with three intervening responses by " <<
+      EXPECT_EQ(9u, rp7b.delta) <<
+       "delta should be 9 with three intervening responses by " <<
        "another server";
-      EXPECT_EQ(2u, rp7b.rho) <<
-       "rho should be 2 with one intervening reservation responses by " <<
+      EXPECT_EQ(4u, rp7b.rho) <<
+       "rho should be 4 with one intervening reservation responses by " <<
        "another server";
 
       auto rp8 = st.get_req_params(server1);
@@ -215,5 +223,85 @@ namespace crimson {
        "rho should be 1 with no intervening reservation responses by " <<
        "another server";
     } // TEST
+
+
+    // NB: the BorrowingTracker has not been fully tested and the
+    // expected values below have not yet been compared with the
+    // theoretically correct values.
+    TEST(dmclock_client, delta_rho_values_orig_tracker) {
+      using ServerId = int;
+
+      ServerId server1 = 101;
+      ServerId server2 = 7;
+
+      dmc::ServiceTracker<ServerId,OrigTracker>
+       st(std::chrono::seconds(2), std::chrono::seconds(3));
+
+      auto rp1 = st.get_req_params(server1);
+
+      EXPECT_EQ(1u, rp1.delta);
+      EXPECT_EQ(1u, rp1.rho);
+
+      auto rp2 = st.get_req_params(server1);
+
+      EXPECT_EQ(0u, rp2.delta);
+      EXPECT_EQ(0u, rp2.rho);
+
+      st.track_resp(server1, dmc::PhaseType::priority, 1u);
+
+      auto rp3 = st.get_req_params(server1);
+
+      EXPECT_EQ(0u, rp3.delta);
+      EXPECT_EQ(0u, rp3.rho);
+
+      st.track_resp(server2, dmc::PhaseType::priority, 1u);
+
+      auto rp4 = st.get_req_params(server1);
+
+      EXPECT_EQ(1u, rp4.delta);
+      EXPECT_EQ(0u, rp4.rho);
+
+      auto rp5 = st.get_req_params(server1);
+
+      EXPECT_EQ(0u, rp5.delta);
+      EXPECT_EQ(0u, rp5.rho);
+
+      st.track_resp(server2, dmc::PhaseType::reservation, 1u);
+
+      auto rp6 = st.get_req_params(server1);
+
+      EXPECT_EQ(1u, rp6.delta);
+      EXPECT_EQ(1u, rp6.rho);
+
+      // auto rp6_b = st.get_req_params(server2);
+
+      st.track_resp(server2, dmc::PhaseType::reservation, 1u);
+      st.track_resp(server1, dmc::PhaseType::priority, 1u);
+      st.track_resp(server2, dmc::PhaseType::priority, 1u);
+      st.track_resp(server2, dmc::PhaseType::reservation, 1u);
+      st.track_resp(server1, dmc::PhaseType::reservation, 1u);
+      st.track_resp(server1, dmc::PhaseType::priority, 1u);
+      st.track_resp(server2, dmc::PhaseType::priority, 1u);
+
+      auto rp7 = st.get_req_params(server1);
+
+      EXPECT_EQ(4u, rp7.delta);
+      EXPECT_EQ(2u, rp7.rho);
+
+      auto rp7b = st.get_req_params(server2);
+
+      EXPECT_EQ(3u, rp7b.delta);
+      EXPECT_EQ(1u, rp7b.rho);
+
+      auto rp8 = st.get_req_params(server1);
+
+      EXPECT_EQ(0u, rp8.delta);
+      EXPECT_EQ(0u, rp8.rho);
+
+      auto rp8b = st.get_req_params(server2);
+      EXPECT_EQ(0u, rp8b.delta);
+      EXPECT_EQ(0u, rp8b.rho);
+    } // TEST
+
   } // namespace dmclock
 } // namespace crimson