You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by si...@apache.org on 2018/09/05 19:07:57 UTC
[bookkeeper] branch branch-4.8 updated: ISSUE #1630:
TestHttpService#testWhoIsAuditorService is flaky
This is an automated email from the ASF dual-hosted git repository.
sijie pushed a commit to branch branch-4.8
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/branch-4.8 by this push:
new 65f02ab ISSUE #1630: TestHttpService#testWhoIsAuditorService is flaky
65f02ab is described below
commit 65f02abe97edd478f5fb89a8bc000176d3227ba7
Author: Qi Wang <co...@gmail.com>
AuthorDate: Wed Sep 5 12:07:29 2018 -0700
ISSUE #1630: TestHttpService#testWhoIsAuditorService is flaky
Descriptions of the changes in this PR:
### Motivation
Fixes #1630. The problem is auditor elector was started async, the test itself doesn't wait until election completed.
so the test can be running before auditor runs elector.
### Changes
The fix is simple, just wait until auditor completes election.
Master Issue: #1630
Author: Qi Wang <co...@gmail.com>
Reviewers: Ivan Kelly <iv...@apache.org>, Enrico Olivelli <eo...@gmail.com>, Sijie Guo <si...@apache.org>
This closes #1649 from codingwangqi/issue_1630, closes #1630
(cherry picked from commit 18a40787930df990e9e3ac3aad58011dc65b1b9f)
Signed-off-by: Sijie Guo <si...@apache.org>
---
.../java/org/apache/bookkeeper/replication/AuditorElector.java | 9 +++++----
.../java/org/apache/bookkeeper/server/http/TestHttpService.java | 8 +++++---
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/AuditorElector.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/AuditorElector.java
index 8cdf3b3..1ea179c 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/AuditorElector.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/AuditorElector.java
@@ -33,6 +33,7 @@ import java.util.Comparator;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -206,9 +207,9 @@ public class AuditorElector {
}
}
- public void start() {
+ public Future<?> start() {
running.set(true);
- submitElectionTask();
+ return submitElectionTask();
}
/**
@@ -242,7 +243,7 @@ public class AuditorElector {
* Auditor.
*/
@VisibleForTesting
- void submitElectionTask() {
+ Future<?> submitElectionTask() {
Runnable r = new Runnable() {
public void run() {
@@ -302,7 +303,7 @@ public class AuditorElector {
}
}
};
- executor.submit(r);
+ return executor.submit(r);
}
@VisibleForTesting
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/TestHttpService.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/TestHttpService.java
index d360b1f..5d87ca9 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/TestHttpService.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/TestHttpService.java
@@ -31,6 +31,7 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.Future;
import lombok.Cleanup;
import org.apache.bookkeeper.client.BookKeeper;
import org.apache.bookkeeper.client.LedgerHandle;
@@ -586,7 +587,7 @@ public class TestHttpService extends BookKeeperClusterTestCase {
ZooKeeper auditorZookeeper;
AuditorElector auditorElector;
- private void startAuditorElector() throws Exception {
+ private Future<?> startAuditorElector() throws Exception {
auditorZookeeper = ZooKeeperClient.newBuilder()
.connectString(zkUtil.getZooKeeperConnectString())
.sessionTimeoutMs(10000)
@@ -597,7 +598,7 @@ public class TestHttpService extends BookKeeperClusterTestCase {
conf.setMetadataServiceUri("zk://" + zkUtil.getZooKeeperConnectString() + "/ledgers");
auditorElector = new AuditorElector(addr, conf,
auditorZookeeper);
- auditorElector.start();
+ return auditorElector.start();
}
private void stopAuditorElector() throws Exception {
@@ -628,7 +629,8 @@ public class TestHttpService extends BookKeeperClusterTestCase {
@Test
public void testWhoIsAuditorService() throws Exception {
- startAuditorElector();
+ // start the auditor elector and wait until auditor finishes election.
+ startAuditorElector().get();
HttpEndpointService whoIsAuditorService = bkHttpServiceProvider
.provideHttpEndpointService(HttpServer.ApiType.WHO_IS_AUDITOR);