This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new b189ea79722 [fix][test] Fix resource leaks in pulsar-metadata 
bookkeeper.replication tests (#21483)
b189ea79722 is described below

commit b189ea79722f23358f7463b066261334ddce18a1
Author: Lari Hotari <[email protected]>
AuthorDate: Tue Oct 31 14:52:02 2023 +0200

    [fix][test] Fix resource leaks in pulsar-metadata bookkeeper.replication 
tests (#21483)
---
 pulsar-metadata/pom.xml                              |  7 ++++++-
 .../replication/AuditorCheckAllLedgersTaskTest.java  | 10 +++++-----
 .../replication/AuditorLedgerCheckerTest.java        |  8 ++++----
 .../AuditorPlacementPolicyCheckTaskTest.java         |  9 ++++++---
 .../replication/AuditorReplicasCheckTaskTest.java    |  6 +++---
 .../replication/BookKeeperClusterTestCase.java       | 20 ++++++++++++++++++++
 .../replication/BookieLedgerIndexTest.java           |  4 ++--
 7 files changed, 46 insertions(+), 18 deletions(-)

diff --git a/pulsar-metadata/pom.xml b/pulsar-metadata/pom.xml
index f14f9fab96c..ac39594b1dd 100644
--- a/pulsar-metadata/pom.xml
+++ b/pulsar-metadata/pom.xml
@@ -29,6 +29,11 @@
     <relativePath>..</relativePath>
   </parent>
 
+  <properties>
+    <!-- workaround for OOM error 134 in CI -->
+    <testForkCount>2</testForkCount>
+  </properties>
+
   <artifactId>pulsar-metadata</artifactId>
   <name>Pulsar Metadata</name>
   <dependencies>
@@ -149,7 +154,7 @@
           </execution>
         </executions>
       </plugin>
-      
+
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
diff --git 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorCheckAllLedgersTaskTest.java
 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorCheckAllLedgersTaskTest.java
index 6b58c72af07..795e91c7572 100644
--- 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorCheckAllLedgersTaskTest.java
+++ 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorCheckAllLedgersTaskTest.java
@@ -65,15 +65,15 @@ public class AuditorCheckAllLedgersTaskTest extends 
BookKeeperClusterTestCase {
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        final BookKeeper bookKeeper = new BookKeeper(baseClientConf);
+        final BookKeeper bookKeeper = registerCloseable(new 
BookKeeper(baseClientConf));
         admin = new BookKeeperAdmin(bookKeeper, NullStatsLogger.INSTANCE, new 
ClientConfiguration(baseClientConf));
 
         String ledgersRoot = "/ledgers";
         String storeUri = metadataServiceUri.replaceAll("zk://", 
"").replaceAll("/ledgers", "");
-        MetadataStoreExtended store = MetadataStoreExtended.create(storeUri,
-                MetadataStoreConfig.builder().fsyncEnable(false).build());
+        MetadataStoreExtended store = 
registerCloseable(MetadataStoreExtended.create(storeUri,
+                MetadataStoreConfig.builder().fsyncEnable(false).build()));
         LayoutManager layoutManager = new PulsarLayoutManager(store, 
ledgersRoot);
-        PulsarLedgerManagerFactory ledgerManagerFactory = new 
PulsarLedgerManagerFactory();
+        PulsarLedgerManagerFactory ledgerManagerFactory = 
registerCloseable(new PulsarLedgerManagerFactory());
 
         ClientConfiguration conf = new ClientConfiguration();
         conf.setZkLedgersRootPath(ledgersRoot);
@@ -86,7 +86,7 @@ public class AuditorCheckAllLedgersTaskTest extends 
BookKeeperClusterTestCase {
                 acquireConcurrentOpenLedgerOperationsTimeoutMSec);
     }
 
-    @AfterMethod
+    @AfterMethod(alwaysRun = true)
     @Override
     public void tearDown() throws Exception {
         if (ledgerManager != null) {
diff --git 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java
 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java
index ec5f77f7946..a1954831abf 100644
--- 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java
+++ 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java
@@ -136,14 +136,14 @@ public class AuditorLedgerCheckerTest extends 
BookKeeperClusterTestCase {
 
         String ledgersRoot = "/ledgers";
         String storeUri = metadataServiceUri.replaceAll("zk://", 
"").replaceAll("/ledgers", "");
-        MetadataStoreExtended store = MetadataStoreExtended.create(storeUri,
-                MetadataStoreConfig.builder().fsyncEnable(false).build());
+        MetadataStoreExtended store = 
registerCloseable(MetadataStoreExtended.create(storeUri,
+                MetadataStoreConfig.builder().fsyncEnable(false).build()));
         LayoutManager layoutManager = new PulsarLayoutManager(store, 
ledgersRoot);
-        PulsarLedgerManagerFactory ledgerManagerFactory = new 
PulsarLedgerManagerFactory();
+        PulsarLedgerManagerFactory ledgerManagerFactory = 
registerCloseable(new PulsarLedgerManagerFactory());
         ClientConfiguration conf = new ClientConfiguration();
         conf.setZkLedgersRootPath(ledgersRoot);
         ledgerManagerFactory.initialize(conf, layoutManager, 1);
-        urLedgerMgr = ledgerManagerFactory.newLedgerUnderreplicationManager();
+        urLedgerMgr = 
registerCloseable(ledgerManagerFactory.newLedgerUnderreplicationManager());
         urLedgerMgr.setCheckAllLedgersCTime(System.currentTimeMillis());
 
         baseClientConf.setMetadataServiceUri(
diff --git 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPlacementPolicyCheckTaskTest.java
 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPlacementPolicyCheckTaskTest.java
index 8b9c0b14302..f5d6576229e 100644
--- 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPlacementPolicyCheckTaskTest.java
+++ 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPlacementPolicyCheckTaskTest.java
@@ -63,16 +63,19 @@ public class AuditorPlacementPolicyCheckTaskTest extends 
BookKeeperClusterTestCa
         super.setUp();
         baseClientConf.setMetadataServiceUri(
                 metadataServiceUri.replaceAll("zk://", 
"metadata-store:").replaceAll("/ledgers", ""));
-        final BookKeeper bookKeeper = new BookKeeper(baseClientConf);
+        final BookKeeper bookKeeper = registerCloseable(new 
BookKeeper(baseClientConf));
         admin = new BookKeeperAdmin(bookKeeper, NullStatsLogger.INSTANCE, new 
ClientConfiguration(baseClientConf));
-        LedgerManagerFactory ledgerManagerFactory = 
bookKeeper.getLedgerManagerFactory();
+        LedgerManagerFactory ledgerManagerFactory = 
registerCloseable(bookKeeper.getLedgerManagerFactory());
         ledgerManager = ledgerManagerFactory.newLedgerManager();
         ledgerUnderreplicationManager = 
ledgerManagerFactory.newLedgerUnderreplicationManager();
     }
 
-    @AfterMethod
+    @AfterMethod(alwaysRun = true)
     @Override
     public void tearDown() throws Exception {
+        if (admin != null) {
+            admin.close();
+        }
         if (ledgerManager != null) {
             ledgerManager.close();
         }
diff --git 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTaskTest.java
 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTaskTest.java
index 62162bd25f4..b48498639e7 100644
--- 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTaskTest.java
+++ 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTaskTest.java
@@ -63,14 +63,14 @@ public class AuditorReplicasCheckTaskTest extends 
BookKeeperClusterTestCase {
         super.setUp();
         baseClientConf.setMetadataServiceUri(
                 metadataServiceUri.replaceAll("zk://", 
"metadata-store:").replaceAll("/ledgers", ""));
-        final BookKeeper bookKeeper = new BookKeeper(baseClientConf);
+        final BookKeeper bookKeeper = registerCloseable(new 
BookKeeper(baseClientConf));
         admin = new BookKeeperAdmin(bookKeeper, NullStatsLogger.INSTANCE, new 
ClientConfiguration(baseClientConf));
-        LedgerManagerFactory ledgerManagerFactory = 
bookKeeper.getLedgerManagerFactory();
+        LedgerManagerFactory ledgerManagerFactory = 
registerCloseable(bookKeeper.getLedgerManagerFactory());
         ledgerManager = ledgerManagerFactory.newLedgerManager();
         ledgerUnderreplicationManager = 
ledgerManagerFactory.newLedgerUnderreplicationManager();
     }
 
-    @AfterMethod
+    @AfterMethod(alwaysRun = true)
     @Override
     public void tearDown() throws Exception {
         if (ledgerManager != null) {
diff --git 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java
 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java
index 9a8e3ef5a2d..ccbdb8cef64 100644
--- 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java
+++ 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java
@@ -115,6 +115,8 @@ public abstract class BookKeeperClusterTestCase {
     protected ExecutorService executor;
     private final List<Integer> bookiePorts = new ArrayList<>();
 
+    private final List<AutoCloseable> closeables = new ArrayList<>();
+
     SynchronousQueue<Throwable> asyncExceptions = new SynchronousQueue<>();
     protected void captureThrowable(Runnable c) {
         try {
@@ -187,6 +189,9 @@ public abstract class BookKeeperClusterTestCase {
 
     @AfterTest(alwaysRun = true)
     public void tearDown() throws Exception {
+        callCloseables(closeables);
+        closeables.clear();
+
         boolean failed = false;
         for (Throwable e : asyncExceptions) {
             LOG.error("Got async exception: ", e);
@@ -228,6 +233,21 @@ public abstract class BookKeeperClusterTestCase {
         }
     }
 
+    protected <T extends AutoCloseable> T registerCloseable(T closeable) {
+        closeables.add(closeable);
+        return closeable;
+    }
+
+    private static void callCloseables(List<AutoCloseable> closeables) {
+        for (int i = closeables.size() - 1; i >= 0; i--) {
+            try {
+                closeables.get(i).close();
+            } catch (Exception e) {
+                LOG.error("Failure in calling close method", e);
+            }
+        }
+    }
+
     /**
      * Start zookeeper cluster.
      *
diff --git 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieLedgerIndexTest.java
 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieLedgerIndexTest.java
index 1d5cf868cce..425f485e1ad 100644
--- 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieLedgerIndexTest.java
+++ 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieLedgerIndexTest.java
@@ -91,8 +91,8 @@ public class BookieLedgerIndexTest extends 
BookKeeperClusterTestCase {
 
         String ledgersRoot = "/ledgers";
         String storeUri = metadataServiceUri.replaceAll("zk://", 
"").replaceAll("/ledgers", "");
-        MetadataStoreExtended store = MetadataStoreExtended.create(storeUri,
-                MetadataStoreConfig.builder().fsyncEnable(false).build());
+        MetadataStoreExtended store = 
registerCloseable(MetadataStoreExtended.create(storeUri,
+                MetadataStoreConfig.builder().fsyncEnable(false).build()));
         LayoutManager layoutManager = new PulsarLayoutManager(store, 
ledgersRoot);
         newLedgerManagerFactory = new PulsarLedgerManagerFactory();
 

Reply via email to