Repository: kudu
Updated Branches:
  refs/heads/master 15d2fbaf4 -> 41e2b71c2


[client-test] fixed flakiness in TestWriteTimeout

In case of sanitizer builds, running the test along with other
concurrent activity could lead to errors like

ClientTest.TestWriteTimeout: client-test.cc:2130: Failure
Value of: error->status().ToString()
Expected: has substring "Write RPC to 127.0.0.1:"
  Actual: "Timed out: Failed to write batch of 1 ops to tablet \
    feb544f396a94a94bfb832b7785376e5 after 2 attempt(s): \
    Failed to write to server: (no server available): \
    Write(tablet: feb544f396a94a94bfb832b7785376e5, num_ops: 1, \
      num_attempts: 2) passed its deadline: \
    Timed out: connection negotiation to 127.0.0.1:33093 for RPC Write \
      timed out after 0.096s (ON_OUTBOUND_QUEUE)"

because it takes too long to negotiate a connection to the server.

This patch increases the operation timeout so now the test passes
for 1K+ runs without any errors.

I also increased session timeout for non-sanitizer builds from 100ms
to 200ms to have make the test more stable in other builds as well.

Change-Id: I2ced444038e721def7212dc8133318d5542c661f
Reviewed-on: http://gerrit.cloudera.org:8080/7006
Reviewed-by: Mike Percy <[email protected]>
Tested-by: Kudu Jenkins


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/41e2b71c
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/41e2b71c
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/41e2b71c

Branch: refs/heads/master
Commit: 41e2b71c2fe6850fa877d991482e86614cbc8807
Parents: 15d2fba
Author: Alexey Serbin <[email protected]>
Authored: Fri May 26 13:29:04 2017 -0700
Committer: Alexey Serbin <[email protected]>
Committed: Sat May 27 02:55:42 2017 +0000

----------------------------------------------------------------------
 src/kudu/client/client-test.cc | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/41e2b71c/src/kudu/client/client-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/client/client-test.cc b/src/kudu/client/client-test.cc
index cfa1b27..a6c0f03 100644
--- a/src/kudu/client/client-test.cc
+++ b/src/kudu/client/client-test.cc
@@ -2093,18 +2093,25 @@ static Status ApplyDeleteToSession(KuduSession* session,
 TEST_F(ClientTest, TestWriteTimeout) {
   shared_ptr<KuduSession> session = client_->NewSession();
   ASSERT_OK(session->SetFlushMode(KuduSession::MANUAL_FLUSH));
+#if defined(THREAD_SANITIZER) || defined(ADDRESS_SANITIZER)
+  static const int kSessionTimeoutMs = 2000;
+#else
+  static const int kSessionTimeoutMs = 200;
+#endif
+  session->SetTimeoutMillis(kSessionTimeoutMs);
 
   // First time out the lookup on the master side.
   {
     google::FlagSaver saver;
-    FLAGS_master_inject_latency_on_tablet_lookups_ms = 110;
-    session->SetTimeoutMillis(100);
+    FLAGS_master_inject_latency_on_tablet_lookups_ms = kSessionTimeoutMs + 10;
+
     ASSERT_OK(ApplyInsertToSession(session.get(), client_table_, 1, 1, "row"));
     Status s = session->Flush();
-    ASSERT_TRUE(s.IsIOError()) << "unexpected status: " << s.ToString();
+    ASSERT_TRUE(s.IsIOError()) << s.ToString();
     unique_ptr<KuduError> error = GetSingleErrorFromSession(session.get());
-    ASSERT_TRUE(error->status().IsTimedOut()) << error->status().ToString();
-    ASSERT_STR_CONTAINS(error->status().ToString(),
+    const Status& status = error->status();
+    ASSERT_TRUE(status.IsTimedOut()) << status.ToString();
+    ASSERT_STR_CONTAINS(status.ToString(),
                         "GetTableLocations { table: 'client-testtb', "
                         "partition-key: (RANGE (key): 1), attempt: 1 } failed: 
"
                         "timed out after deadline expired");
@@ -2114,18 +2121,19 @@ TEST_F(ClientTest, TestWriteTimeout) {
   {
     google::FlagSaver saver;
     FLAGS_log_inject_latency = true;
-    FLAGS_log_inject_latency_ms_mean = 110;
+    FLAGS_log_inject_latency_ms_mean = kSessionTimeoutMs + 10;
     FLAGS_log_inject_latency_ms_stddev = 0;
 
     ASSERT_OK(ApplyInsertToSession(session.get(), client_table_, 1, 1, "row"));
     Status s = session->Flush();
-    ASSERT_TRUE(s.IsIOError());
+    ASSERT_TRUE(s.IsIOError()) << s.ToString();
     unique_ptr<KuduError> error = GetSingleErrorFromSession(session.get());
-    ASSERT_TRUE(error->status().IsTimedOut()) << error->status().ToString();
-    ASSERT_STR_CONTAINS(error->status().ToString(),
+    const Status& status = error->status();
+    ASSERT_TRUE(status.IsTimedOut()) << status.ToString();
+    ASSERT_STR_CONTAINS(status.ToString(),
                         "Failed to write batch of 1 ops to tablet");
-    ASSERT_STR_CONTAINS(error->status().ToString(), "Write RPC to 127.0.0.1:");
-    ASSERT_STR_CONTAINS(error->status().ToString(), "after 1 attempt");
+    ASSERT_STR_CONTAINS(status.ToString(), "Write RPC to 127.0.0.1:");
+    ASSERT_STR_CONTAINS(status.ToString(), "after 1 attempt");
   }
 }
 

Reply via email to