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());