From f9b6008dd50d39c9182e323b097f2a1995b3d3f2 Mon Sep 17 00:00:00 2001 From: "ievgen.degtiarenko" Date: Mon, 22 May 2023 16:58:48 +0200 Subject: [PATCH 1/2] Fix testFollowerBehaviour The test was failing when responseDelay == leaderCheckTimeoutMillis. This resulted in scheduling both handling the response and timeout at the same mills and executing them in random order. The fix makes it impossible to reply the same time as request is timedout as the behaviour is not determinitsic in such case. --- .../cluster/coordination/LeaderCheckerTests.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/LeaderCheckerTests.java b/server/src/test/java/org/elasticsearch/cluster/coordination/LeaderCheckerTests.java index f7af9e9ddbe17..5c2e337e78c79 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/LeaderCheckerTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/LeaderCheckerTests.java @@ -115,10 +115,11 @@ protected void onSendRequest(long requestId, String action, TransportRequest req super.onSendRequest(requestId, action, request, node); final boolean mustSucceed = leaderCheckRetryCount - 1 <= consecutiveFailedRequestsCount; - final long responseDelay = randomLongBetween(0, leaderCheckTimeoutMillis + (mustSucceed ? -1 : 60000)); + final long responseDelay = randomLongBetween(0, leaderCheckTimeoutMillis + (mustSucceed ? -2 : 60000)); final boolean successResponse = allResponsesFail.get() == false && (mustSucceed || randomBoolean()); - if (responseDelay >= leaderCheckTimeoutMillis) { + assert responseDelay != leaderCheckTimeoutMillis; + if (responseDelay > leaderCheckTimeoutMillis) { timeoutCount.incrementAndGet(); consecutiveFailedRequestsCount += 1; } else if (successResponse == false) { From 72a9d9c6994be46a3b2cde776855bcfbd14be3df Mon Sep 17 00:00:00 2001 From: "ievgen.degtiarenko" Date: Mon, 22 May 2023 17:15:39 +0200 Subject: [PATCH 2/2] upd --- .../cluster/coordination/LeaderCheckerTests.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/LeaderCheckerTests.java b/server/src/test/java/org/elasticsearch/cluster/coordination/LeaderCheckerTests.java index 5c2e337e78c79..37f598830a98e 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/LeaderCheckerTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/LeaderCheckerTests.java @@ -115,7 +115,10 @@ protected void onSendRequest(long requestId, String action, TransportRequest req super.onSendRequest(requestId, action, request, node); final boolean mustSucceed = leaderCheckRetryCount - 1 <= consecutiveFailedRequestsCount; - final long responseDelay = randomLongBetween(0, leaderCheckTimeoutMillis + (mustSucceed ? -2 : 60000)); + final long responseDelay = randomValueOtherThan( + leaderCheckTimeoutMillis, + () -> randomLongBetween(0, leaderCheckTimeoutMillis + (mustSucceed ? -1 : 60000)) + ); final boolean successResponse = allResponsesFail.get() == false && (mustSucceed || randomBoolean()); assert responseDelay != leaderCheckTimeoutMillis;