You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by er...@apache.org on 2020/05/15 17:39:38 UTC

[lucene-solr] branch branch_8x updated: SOLR-14485: Fix or suppress 11 resource leak warnings in apache/solr/cloud

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

erick pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8x by this push:
     new 04deac1  SOLR-14485: Fix or suppress 11 resource leak warnings in apache/solr/cloud
04deac1 is described below

commit 04deac1851cf929696c3d89e7bf11a14d8e2a1ae
Author: erick <er...@gmail.com>
AuthorDate: Fri May 15 13:31:26 2020 -0400

    SOLR-14485: Fix or suppress 11 resource leak warnings in apache/solr/cloud
---
 solr/CHANGES.txt                                        |  4 +++-
 .../java/org/apache/solr/cloud/RecoveryStrategy.java    |  8 +++++---
 .../src/java/org/apache/solr/cloud/SyncStrategy.java    |  7 ++++---
 .../solr/cloud/autoscaling/sim/SimCloudManager.java     |  2 ++
 .../apache/solr/cloud/autoscaling/sim/SimScenario.java  |  9 ++++++---
 .../apache/solr/cloud/ChaosMonkeyShardSplitTest.java    | 17 +++++++++--------
 .../src/test/org/apache/solr/cloud/ZkNodePropsTest.java |  4 +++-
 .../cloud/autoscaling/sim/TestSnapshotCloudManager.java |  7 ++++---
 8 files changed, 36 insertions(+), 22 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 66608ce..59f9004 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -150,9 +150,11 @@ Other Changes
 
 * SOLR-7880: Update commons-cli to 1.4 (Erick Erickson)
 
-* SOLR-14226Fix or suppress 14 resource leak warnings in apache/solr/core (Andras Salaman via
+* SOLR-14226: Fix or suppress 14 resource leak warnings in apache/solr/core (Andras Salaman via
   Erick Erickson)
 
+* SOLR-14485: Fix or suppress 11 resource leak warnings in apache/solr/cloud (Andras Salaman via Erick Erickson)
+
 ==================  8.5.1 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
diff --git a/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java b/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
index 9d6f160..35296a6 100644
--- a/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
+++ b/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
@@ -641,9 +641,11 @@ public class RecoveryStrategy implements Runnable, Closeable {
           }
           // System.out.println("Attempting to PeerSync from " + leaderUrl
           // + " i am:" + zkController.getNodeName());
-          PeerSyncWithLeader peerSyncWithLeader = new PeerSyncWithLeader(core,
-              leader.getCoreUrl(), ulog.getNumRecordsToKeep());
-          boolean syncSuccess = peerSyncWithLeader.sync(recentVersions).isSuccess();
+          boolean syncSuccess;
+          try (PeerSyncWithLeader peerSyncWithLeader = new PeerSyncWithLeader(core,
+              leader.getCoreUrl(), ulog.getNumRecordsToKeep())) {
+            syncSuccess = peerSyncWithLeader.sync(recentVersions).isSuccess();
+          }
           if (syncSuccess) {
             SolrQueryRequest req = new LocalSolrQueryRequest(core,
                 new ModifiableSolrParams());
diff --git a/solr/core/src/java/org/apache/solr/cloud/SyncStrategy.java b/solr/core/src/java/org/apache/solr/cloud/SyncStrategy.java
index 4d67d2b..5a1b8da 100644
--- a/solr/core/src/java/org/apache/solr/cloud/SyncStrategy.java
+++ b/solr/core/src/java/org/apache/solr/cloud/SyncStrategy.java
@@ -154,7 +154,7 @@ public class SyncStrategy {
   }
   
   private PeerSync.PeerSyncResult syncWithReplicas(ZkController zkController, SolrCore core,
-      ZkNodeProps props, String collection, String shardId, boolean peerSyncOnlyWithActive) {
+      ZkNodeProps props, String collection, String shardId, boolean peerSyncOnlyWithActive) throws Exception {
     List<ZkCoreNodeProps> nodes = zkController.getZkStateReader()
         .getReplicaProps(collection, shardId,core.getCoreDescriptor().getCloudDescriptor().getCoreNodeName());
     
@@ -179,8 +179,9 @@ public class SyncStrategy {
     // Fingerprinting here is off because the we currently rely on having at least one of the nodes return "true", and if replicas are out-of-sync
     // we still need to pick one as leader.  A followup sync from the replica to the new leader (with fingerprinting on) should then fail and
     // initiate recovery-by-replication.
-    PeerSync peerSync = new PeerSync(core, syncWith, core.getUpdateHandler().getUpdateLog().getNumRecordsToKeep(), true, peerSyncOnlyWithActive, false);
-    return peerSync.sync();
+    try (PeerSync peerSync = new PeerSync(core, syncWith, core.getUpdateHandler().getUpdateLog().getNumRecordsToKeep(), true, peerSyncOnlyWithActive, false)) {
+      return peerSync.sync();
+    }
   }
   
   private void syncToMe(ZkController zkController, String collection,
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java
index 69fc804..e7c3c32 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java
@@ -791,12 +791,14 @@ public class SimCloudManager implements SolrCloudManager {
             if (metricsHistoryHandler != null) {
               metricsHistoryHandler.handleRequest(queryRequest, queryResponse);
             } else {
+              queryRequest.close();
               throw new UnsupportedOperationException("must add at least 1 node first");
             }
           } else {
             if (metricsHandler != null) {
               metricsHandler.handleRequest(queryRequest, queryResponse);
             } else {
+              queryRequest.close();
               throw new UnsupportedOperationException("must add at least 1 node first");
             }
           }
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimScenario.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimScenario.java
index 52837ab..36b945e 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimScenario.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimScenario.java
@@ -404,8 +404,9 @@ public class SimScenario implements AutoCloseable {
         throw new IOException(SimAction.SAVE_SNAPSHOT + " must specify 'path'");
       }
       boolean redact = Boolean.parseBoolean(params.get("redact", "false"));
-      SnapshotCloudManager snapshotCloudManager = new SnapshotCloudManager(scenario.cluster, null);
-      snapshotCloudManager.saveSnapshot(new File(path), true, redact);
+      try (SnapshotCloudManager snapshotCloudManager = new SnapshotCloudManager(scenario.cluster, null)) {
+        snapshotCloudManager.saveSnapshot(new File(path), true, redact);
+      }
     }
   }
 
@@ -737,10 +738,10 @@ public class SimScenario implements AutoCloseable {
         }
       }
       final AutoScalingConfig.TriggerListenerConfig listenerConfig = new AutoScalingConfig.TriggerListenerConfig(name, cfgMap);
-      TriggerListener listener = new SimWaitListener(scenario.cluster.getTimeSource(), listenerConfig);
       if (scenario.context.containsKey("_sim_waitListener_" + trigger)) {
         throw new IOException("currently only one listener can be set per trigger. Trigger name: " + trigger);
       }
+      TriggerListener listener = new SimWaitListener(scenario.cluster.getTimeSource(), listenerConfig);
       scenario.context.put("_sim_waitListener_" + trigger, listener);
       scenario.cluster.getOverseerTriggerThread().getScheduledTriggers().addAdditionalListener(listener);
     }
@@ -976,6 +977,7 @@ public class SimScenario implements AutoCloseable {
         RedactionUtils.RedactionContext ctx = SimUtils.getRedactionContext(snapshotCloudManager.getClusterStateProvider().getClusterState());
         data = RedactionUtils.redactNames(ctx.getRedactions(), data);
       }
+      snapshotCloudManager.close();
       scenario.console.println(data);
     }
   }
@@ -987,6 +989,7 @@ public class SimScenario implements AutoCloseable {
    * @throws Exception on syntax errors
    */
   public static SimScenario load(String data) throws Exception {
+    @SuppressWarnings("resource")
     SimScenario scenario = new SimScenario();
     String[] lines = data.split("\\r?\\n");
     for (int i = 0; i < lines.length; i++) {
diff --git a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyShardSplitTest.java b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyShardSplitTest.java
index 50e2443..87057ae 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyShardSplitTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyShardSplitTest.java
@@ -259,14 +259,15 @@ public class ChaosMonkeyShardSplitTest extends ShardSplitTest {
     ZkStateReader reader = new ZkStateReader(zkClient);
     LeaderElector overseerElector = new LeaderElector(zkClient);
     UpdateShardHandler updateShardHandler = new UpdateShardHandler(UpdateShardHandlerConfig.DEFAULT);
-    // TODO: close Overseer
-    Overseer overseer = new Overseer((HttpShardHandler) new HttpShardHandlerFactory().getShardHandler(), updateShardHandler, "/admin/cores",
-        reader, null, new CloudConfig.CloudConfigBuilder("127.0.0.1", 8983, "solr").build());
-    overseer.close();
-    ElectionContext ec = new OverseerElectionContext(zkClient, overseer,
-        address.replaceAll("/", "_"));
-    overseerElector.setup(ec);
-    overseerElector.joinElection(ec, false);
+    try (HttpShardHandlerFactory hshf = new HttpShardHandlerFactory()) {
+      Overseer overseer = new Overseer((HttpShardHandler) hshf.getShardHandler(), updateShardHandler, "/admin/cores",
+          reader, null, new CloudConfig.CloudConfigBuilder("127.0.0.1", 8983, "solr").build());
+      overseer.close();
+      ElectionContext ec = new OverseerElectionContext(zkClient, overseer,
+          address.replaceAll("/", "_"));
+      overseerElector.setup(ec);
+      overseerElector.joinElection(ec, false);
+    }
     reader.close();
     return zkClient;
   }
diff --git a/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java b/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java
index 88ce3c8..604c56b 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java
@@ -45,7 +45,9 @@ public class ZkNodePropsTest extends SolrTestCaseJ4 {
 
     props.forEach((s, o) -> assertEquals(o, props2.get(s)));
     SimplePostTool.BAOS baos = new SimplePostTool.BAOS();
-    new JavaBinCodec().marshal(zkProps.getProperties(), baos);
+    try (JavaBinCodec jbc = new JavaBinCodec()) {
+      jbc.marshal(zkProps.getProperties(), baos);
+    }
     bytes = baos.toByteArray();
     System.out.println("BIN size : " + bytes.length);
     ZkNodeProps props3 = ZkNodeProps.load(bytes);
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSnapshotCloudManager.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSnapshotCloudManager.java
index adc41cc..6e7f0ea 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSnapshotCloudManager.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSnapshotCloudManager.java
@@ -121,10 +121,11 @@ public class TestSnapshotCloudManager extends SolrCloudTestCase {
   public void testRedaction() throws Exception {
     Path tmpPath = createTempDir();
     File tmpDir = tmpPath.toFile();
-    SnapshotCloudManager snapshotCloudManager = new SnapshotCloudManager(realManager, null);
     Set<String> redacted = new HashSet<>(realManager.getClusterStateProvider().getLiveNodes());
-    redacted.addAll(realManager.getClusterStateProvider().getClusterState().getCollectionStates().keySet());
-    snapshotCloudManager.saveSnapshot(tmpDir, true, true);
+    try (SnapshotCloudManager snapshotCloudManager = new SnapshotCloudManager(realManager, null)) {
+      redacted.addAll(realManager.getClusterStateProvider().getClusterState().getCollectionStates().keySet());
+      snapshotCloudManager.saveSnapshot(tmpDir, true, true);
+    }
     for (String key : SnapshotCloudManager.REQUIRED_KEYS) {
       File src = new File(tmpDir, key + ".json");
       assertTrue(src.toString() + " doesn't exist", src.exists());