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");
}
}