This is an automated email from the ASF dual-hosted git repository.
symat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
The following commit(s) were added to refs/heads/master by this push:
new 37eae03 ZOOKEEPER-4199: Avoid thread leak in QuorumRequestPipelineTest
37eae03 is described below
commit 37eae03080b93d63a6ba9f624b37c764511ad2dc
Author: Damien Diederen <[email protected]>
AuthorDate: Thu Feb 18 08:40:55 2021 +0000
ZOOKEEPER-4199: Avoid thread leak in QuorumRequestPipelineTest
`QuorumRequestPipelineTest` hosts parameterized tests which explicitly call
`QuorumBase.setUp(boolean)`.
This patch overrides the argument-less `QuorumBase.setUp()` with an empty
body, as the former is annotated `BeforeEach`-otherwise causing the runtime to
start a fresh 5-ensemble before each test.
Without the override, one such extraneous ensemble is created and
immediately leaked for each combination of test method + parameters.
The test consequently requires 4000+ simultaneous threads to complete, and
while Linux happily handles that load, macOS Catalina's per-process limit of
2048 threads effectively causes the JVM to "crash" or lock up.
The solution is copied verbatim from another parameterized subclass of
`QuorumBase`, `EagerACLFilterTest`.
Author: Damien Diederen <[email protected]>
Reviewers: Enrico Olivelli <[email protected]>, Mate Szalay-Beko
<[email protected]>
Closes #1591 from ztzg/ZOOKEEPER-4199-thread-leak-qrp-test
---
.../apache/zookeeper/server/quorum/QuorumRequestPipelineTest.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumRequestPipelineTest.java
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumRequestPipelineTest.java
index 8a463c0..0888d6f 100644
---
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumRequestPipelineTest.java
+++
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumRequestPipelineTest.java
@@ -36,6 +36,7 @@ import org.apache.zookeeper.data.Stat;
import org.apache.zookeeper.server.quorum.QuorumPeer.ServerState;
import org.apache.zookeeper.test.QuorumBase;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
@@ -59,6 +60,13 @@ public class QuorumRequestPipelineTest extends QuorumBase {
Arguments.of(ServerState.OBSERVING));
}
+ @BeforeEach
+ @Override
+ public void setUp() {
+ //since parameterized test methods need a parameterized setUp method
+ //the inherited method has to be overridden with an empty function body
+ }
+
public void setUp(ServerState serverState) throws Exception {
CountdownWatcher clientWatch = new CountdownWatcher();
super.setUp(true);