diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index b48415391ff..7ca70a8496c 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -649,6 +649,9 @@ Other Changes
* SOLR-6918: No need to log exceptions (as warn) generated when creating MBean stats if
the core is shutting down (Timothy Potter)
+* SOLR-6932: All HttpClient ConnectionManagers and SolrJ clients should always be shutdown
+ in tests and regular code. (Mark Miller)
+
================== 4.10.3 ==================
Bug Fixes
diff --git a/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SolrEntityProcessor.java b/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SolrEntityProcessor.java
index a0aab81a0b8..33022684da8 100644
--- a/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SolrEntityProcessor.java
+++ b/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SolrEntityProcessor.java
@@ -17,9 +17,19 @@ package org.apache.solr.handler.dataimport;
* limitations under the License.
*/
+import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
+import static org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
import org.apache.http.client.HttpClient;
-import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpClientUtil;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
@@ -31,16 +41,6 @@ import org.apache.solr.common.params.CommonParams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
-import static org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow;
-
/**
*
* An implementation of {@link EntityProcessor} which fetches values from a
@@ -71,6 +71,15 @@ public class SolrEntityProcessor extends EntityProcessorBase {
private String[] fields;
private String requestHandler;// 'qt' param
private int timeout = TIMEOUT_SECS;
+
+ @Override
+ public void destroy() {
+ try {
+ solrClient.shutdown();
+ } finally {
+ HttpClientUtil.close(((HttpSolrClient) solrClient).getHttpClient());
+ }
+ }
/**
* Factory method that returns a {@link HttpClient} instance used for interfacing with a source Solr service.
@@ -94,7 +103,6 @@ public class SolrEntityProcessor extends EntityProcessorBase {
"SolrEntityProcessor: parameter 'url' is required");
}
- // TODO: we should close this client!
HttpClient client = getHttpClient();
URL url = new URL(serverPath);
// (wt="javabin|xml") default is javabin
diff --git a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContentStreamDataSource.java b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContentStreamDataSource.java
index 946b73c7468..88f96ef4a95 100644
--- a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContentStreamDataSource.java
+++ b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContentStreamDataSource.java
@@ -67,17 +67,20 @@ public class TestContentStreamDataSource extends AbstractDataImportHandlerTestCa
params.set("command", "full-import");
params.set("clean", "false");
req.setParams(params);
- HttpSolrClient solrServer = new HttpSolrClient(buildUrl(jetty.getLocalPort(), "/solr"));
- solrServer.request(req);
- ModifiableSolrParams qparams = new ModifiableSolrParams();
- qparams.add("q", "*:*");
- QueryResponse qres = solrServer.query(qparams);
- SolrDocumentList results = qres.getResults();
- assertEquals(2, results.getNumFound());
- SolrDocument doc = results.get(0);
- assertEquals("1", doc.getFieldValue("id"));
- assertEquals("Hello C1", ((List)doc.getFieldValue("desc")).get(0));
- solrServer.shutdown();
+ HttpSolrClient solrClient = new HttpSolrClient(buildUrl(jetty.getLocalPort(), "/solr"));
+ try {
+ solrClient.request(req);
+ ModifiableSolrParams qparams = new ModifiableSolrParams();
+ qparams.add("q", "*:*");
+ QueryResponse qres = solrClient.query(qparams);
+ SolrDocumentList results = qres.getResults();
+ assertEquals(2, results.getNumFound());
+ SolrDocument doc = results.get(0);
+ assertEquals("1", doc.getFieldValue("id"));
+ assertEquals("Hello C1", ((List)doc.getFieldValue("desc")).get(0));
+ } finally {
+ solrClient.shutdown();
+ }
}
@Test
diff --git a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorUnit.java b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorUnit.java
index 04f34902869..687f7fc4879 100644
--- a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorUnit.java
+++ b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorUnit.java
@@ -32,9 +32,12 @@ public class TestSolrEntityProcessorUnit extends AbstractDataImportHandlerTestCa
List docs = generateUniqueDocs(2);
MockSolrEntityProcessor processor = createAndInit(docs);
-
- assertExpectedDocs(docs, processor);
- assertEquals(1, processor.getQueryCount());
+ try {
+ assertExpectedDocs(docs, processor);
+ assertEquals(1, processor.getQueryCount());
+ } finally {
+ processor.destroy();
+ }
}
private MockSolrEntityProcessor createAndInit(List docs) {
@@ -46,8 +49,12 @@ public class TestSolrEntityProcessorUnit extends AbstractDataImportHandlerTestCa
int rowsNum = 10;
MockSolrEntityProcessor processor = createAndInit(docs, rowsNum);
- assertExpectedDocs(docs, processor);
- assertEquals(5, processor.getQueryCount());
+ try {
+ assertExpectedDocs(docs, processor);
+ assertEquals(5, processor.getQueryCount());
+ } finally {
+ processor.destroy();
+ }
}
private MockSolrEntityProcessor createAndInit(List docs, int rowsNum) {
@@ -67,15 +74,19 @@ public class TestSolrEntityProcessorUnit extends AbstractDataImportHandlerTestCa
docs.add(testDoc);
MockSolrEntityProcessor processor = createAndInit(docs);
- Map next = processor.nextRow();
- assertNotNull(next);
-
- @SuppressWarnings("unchecked")
- List multiField = (List) next.get("description");
- assertEquals(testDoc.getValues("description").size(), multiField.size());
- assertEquals(testDoc.getValues("description"), multiField);
- assertEquals(1, processor.getQueryCount());
- assertNull(processor.nextRow());
+ try {
+ Map next = processor.nextRow();
+ assertNotNull(next);
+
+ @SuppressWarnings("unchecked")
+ List multiField = (List) next.get("description");
+ assertEquals(testDoc.getValues("description").size(), multiField.size());
+ assertEquals(testDoc.getValues("description"), multiField);
+ assertEquals(1, processor.getQueryCount());
+ assertNull(processor.nextRow());
+ } finally {
+ processor.destroy();
+ }
}
private List generateUniqueDocs(int numDocs) {
diff --git a/solr/core/src/java/org/apache/solr/cloud/Overseer.java b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
index 621d9f31f84..7918ed3f4e5 100644
--- a/solr/core/src/java/org/apache/solr/cloud/Overseer.java
+++ b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
@@ -58,7 +58,7 @@ import org.apache.solr.common.params.CollectionParams;
import org.apache.solr.core.ConfigSolr;
import org.apache.solr.handler.component.ShardHandler;
import org.apache.solr.update.UpdateShardHandler;
-import org.apache.solr.util.IOUtils;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.util.stats.Clock;
import org.apache.solr.util.stats.Timer;
import org.apache.solr.util.stats.TimerContext;
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 90debaba5c1..5b9003e6590 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -195,7 +195,12 @@ public class CoreContainer {
public static CoreContainer createAndLoad(String solrHome, File configFile) {
SolrResourceLoader loader = new SolrResourceLoader(solrHome);
CoreContainer cc = new CoreContainer(loader, ConfigSolr.fromFile(loader, configFile));
- cc.load();
+ try {
+ cc.load();
+ } catch (Exception e) {
+ cc.shutdown();
+ throw e;
+ }
return cc;
}
@@ -341,10 +346,9 @@ public class CoreContainer {
}
try {
- coreAdminHandler.shutdown();
+ if (coreAdminHandler != null) coreAdminHandler.shutdown();
} catch (Exception e) {
- log.warn("Error shutting down CoreAdminHandler. Continuing to close CoreContainer.");
- e.printStackTrace();
+ log.warn("Error shutting down CoreAdminHandler. Continuing to close CoreContainer.", e);
}
try {
diff --git a/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java b/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
index d5e7aaed79a..157ce0db50c 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
@@ -23,7 +23,7 @@ import org.apache.commons.lang.StringUtils;
import org.apache.solr.cloud.CloudDescriptor;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.util.IOUtils;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.util.PropertiesUtil;
import java.io.File;
diff --git a/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java b/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
index 3742e7fc7ca..a25d99b8f00 100644
--- a/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
+++ b/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
@@ -18,8 +18,9 @@ package org.apache.solr.core;
*/
import com.google.common.collect.Lists;
+
import org.apache.solr.common.SolrException;
-import org.apache.solr.util.IOUtils;
+import org.apache.solr.common.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
index 9d549bf42fc..1666d8f2fce 100644
--- a/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
@@ -38,6 +38,7 @@ import org.apache.solr.cloud.ZkController;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.store.blockcache.BlockCache;
import org.apache.solr.store.blockcache.BlockDirectory;
@@ -48,7 +49,6 @@ import org.apache.solr.store.blockcache.Metrics;
import org.apache.solr.store.hdfs.HdfsDirectory;
import org.apache.solr.store.hdfs.HdfsLockFactory;
import org.apache.solr.util.HdfsUtil;
-import org.apache.solr.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/solr/core/src/java/org/apache/solr/core/PluginInfo.java b/solr/core/src/java/org/apache/solr/core/PluginInfo.java
index 0cd0c1ab17a..82b0b239521 100644
--- a/solr/core/src/java/org/apache/solr/core/PluginInfo.java
+++ b/solr/core/src/java/org/apache/solr/core/PluginInfo.java
@@ -40,7 +40,7 @@ public class PluginInfo implements MapSerializable{
public final List children;
private boolean isFromSolrConfig;
- public PluginInfo(String type, Map attrs ,NamedList initArgs, List children) {
+ public PluginInfo(String type, Map attrs, NamedList initArgs, List children) {
this.type = type;
this.name = attrs.get(NAME);
this.className = attrs.get(CLASS_NAME);
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index 3b3fcbdd703..812314106fb 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -17,6 +17,47 @@
package org.apache.solr.core;
+import java.io.Closeable;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.lang.reflect.Constructor;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.NoSuchFileException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.IdentityHashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.locks.ReentrantLock;
+
+import javax.xml.parsers.ParserConfigurationException;
+
import org.apache.commons.io.FileUtils;
import org.apache.lucene.codecs.Codec;
import org.apache.lucene.index.DirectoryReader;
@@ -38,6 +79,7 @@ import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.CommonParams.EchoParamStyle;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ExecutorUtil;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.DirectoryFactory.DirContext;
@@ -97,7 +139,6 @@ import org.apache.solr.update.processor.RunUpdateProcessorFactory;
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
import org.apache.solr.util.DefaultSolrThreadFactory;
-import org.apache.solr.util.IOUtils;
import org.apache.solr.util.PropertiesInputStream;
import org.apache.solr.util.RefCounted;
import org.apache.solr.util.plugin.NamedListInitializedPlugin;
@@ -109,46 +150,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.lang.reflect.Constructor;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.NoSuchFileException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.locks.ReentrantLock;
-
/**
*
*/
diff --git a/solr/core/src/java/org/apache/solr/handler/SnapPuller.java b/solr/core/src/java/org/apache/solr/handler/SnapPuller.java
index eac73762b4b..7c07ad12e2f 100644
--- a/solr/core/src/java/org/apache/solr/handler/SnapPuller.java
+++ b/solr/core/src/java/org/apache/solr/handler/SnapPuller.java
@@ -16,42 +16,25 @@
*/
package org.apache.solr.handler;
-import org.apache.commons.io.IOUtils;
-import org.apache.http.client.HttpClient;
-import org.apache.lucene.index.IndexCommit;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.IOContext;
-import org.apache.lucene.store.IndexInput;
-import org.apache.lucene.store.IndexOutput;
-import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.HttpClientUtil;
-import org.apache.solr.client.solrj.impl.HttpSolrClient;
-import org.apache.solr.client.solrj.request.QueryRequest;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
-import org.apache.solr.common.params.CommonParams;
-import org.apache.solr.common.params.ModifiableSolrParams;
-import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.common.util.ExecutorUtil;
-import org.apache.solr.common.util.FastInputStream;
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.DirectoryFactory;
-import org.apache.solr.core.DirectoryFactory.DirContext;
-import org.apache.solr.core.IndexDeletionPolicyWrapper;
-import org.apache.solr.core.SolrCore;
-import org.apache.solr.handler.ReplicationHandler.FileInfo;
-import org.apache.solr.request.LocalSolrQueryRequest;
-import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.search.SolrIndexSearcher;
-import org.apache.solr.update.CommitUpdateCommand;
-import org.apache.solr.util.DefaultSolrThreadFactory;
-import org.apache.solr.util.FileUtils;
-import org.apache.solr.util.PropertiesInputStream;
-import org.apache.solr.util.PropertiesOutputStream;
-import org.apache.solr.util.RefCounted;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import static org.apache.solr.handler.ReplicationHandler.ALIAS;
+import static org.apache.solr.handler.ReplicationHandler.CHECKSUM;
+import static org.apache.solr.handler.ReplicationHandler.CMD_DETAILS;
+import static org.apache.solr.handler.ReplicationHandler.CMD_GET_FILE;
+import static org.apache.solr.handler.ReplicationHandler.CMD_GET_FILE_LIST;
+import static org.apache.solr.handler.ReplicationHandler.CMD_INDEX_VERSION;
+import static org.apache.solr.handler.ReplicationHandler.COMMAND;
+import static org.apache.solr.handler.ReplicationHandler.COMPRESSION;
+import static org.apache.solr.handler.ReplicationHandler.CONF_FILES;
+import static org.apache.solr.handler.ReplicationHandler.CONF_FILE_SHORT;
+import static org.apache.solr.handler.ReplicationHandler.EXTERNAL;
+import static org.apache.solr.handler.ReplicationHandler.FILE;
+import static org.apache.solr.handler.ReplicationHandler.FILE_STREAM;
+import static org.apache.solr.handler.ReplicationHandler.GENERATION;
+import static org.apache.solr.handler.ReplicationHandler.INTERNAL;
+import static org.apache.solr.handler.ReplicationHandler.MASTER_URL;
+import static org.apache.solr.handler.ReplicationHandler.NAME;
+import static org.apache.solr.handler.ReplicationHandler.OFFSET;
+import static org.apache.solr.handler.ReplicationHandler.SIZE;
import java.io.File;
import java.io.FileNotFoundException;
@@ -91,25 +74,41 @@ import java.util.zip.Adler32;
import java.util.zip.Checksum;
import java.util.zip.InflaterInputStream;
-import static org.apache.solr.handler.ReplicationHandler.ALIAS;
-import static org.apache.solr.handler.ReplicationHandler.CHECKSUM;
-import static org.apache.solr.handler.ReplicationHandler.CMD_DETAILS;
-import static org.apache.solr.handler.ReplicationHandler.CMD_GET_FILE;
-import static org.apache.solr.handler.ReplicationHandler.CMD_GET_FILE_LIST;
-import static org.apache.solr.handler.ReplicationHandler.CMD_INDEX_VERSION;
-import static org.apache.solr.handler.ReplicationHandler.COMMAND;
-import static org.apache.solr.handler.ReplicationHandler.COMPRESSION;
-import static org.apache.solr.handler.ReplicationHandler.CONF_FILES;
-import static org.apache.solr.handler.ReplicationHandler.CONF_FILE_SHORT;
-import static org.apache.solr.handler.ReplicationHandler.EXTERNAL;
-import static org.apache.solr.handler.ReplicationHandler.FILE;
-import static org.apache.solr.handler.ReplicationHandler.FILE_STREAM;
-import static org.apache.solr.handler.ReplicationHandler.GENERATION;
-import static org.apache.solr.handler.ReplicationHandler.INTERNAL;
-import static org.apache.solr.handler.ReplicationHandler.MASTER_URL;
-import static org.apache.solr.handler.ReplicationHandler.NAME;
-import static org.apache.solr.handler.ReplicationHandler.OFFSET;
-import static org.apache.solr.handler.ReplicationHandler.SIZE;
+import org.apache.commons.io.IOUtils;
+import org.apache.http.client.HttpClient;
+import org.apache.lucene.index.IndexCommit;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.store.IndexOutput;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.impl.HttpClientUtil;
+import org.apache.solr.client.solrj.impl.HttpSolrClient;
+import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.params.CommonParams;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.ExecutorUtil;
+import org.apache.solr.common.util.FastInputStream;
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.DirectoryFactory;
+import org.apache.solr.core.DirectoryFactory.DirContext;
+import org.apache.solr.core.IndexDeletionPolicyWrapper;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.handler.ReplicationHandler.FileInfo;
+import org.apache.solr.request.LocalSolrQueryRequest;
+import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.search.SolrIndexSearcher;
+import org.apache.solr.update.CommitUpdateCommand;
+import org.apache.solr.util.DefaultSolrThreadFactory;
+import org.apache.solr.util.FileUtils;
+import org.apache.solr.util.PropertiesInputStream;
+import org.apache.solr.util.PropertiesOutputStream;
+import org.apache.solr.util.RefCounted;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Provides functionality of downloading changed index files as well as config files and a timer for scheduling fetches from the
@@ -183,7 +182,6 @@ public class SnapPuller {
public SnapPuller(final NamedList initArgs, final ReplicationHandler handler, final SolrCore sc) {
solrCore = sc;
- final SolrParams params = SolrParams.toSolrParams(initArgs);
String masterUrl = (String) initArgs.get(MASTER_URL);
if (masterUrl == null)
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
index 2ea2a3e6756..53e49227edc 100644
--- a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
+++ b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
@@ -17,9 +17,37 @@
package org.apache.solr.servlet;
+import java.io.ByteArrayInputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
-import org.apache.http.client.HttpClient;
+import org.apache.http.Header;
+import org.apache.http.HeaderIterator;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpEntityEnclosingRequest;
+import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
@@ -28,13 +56,10 @@ import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.InputStreamEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
-import org.apache.http.Header;
-import org.apache.http.HeaderIterator;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
-import org.apache.http.HttpResponse;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.impl.HttpClientUtil;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.cloud.Aliases;
@@ -57,7 +82,6 @@ import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
-import org.apache.solr.client.solrj.impl.HttpClientUtil;
import org.apache.solr.handler.ContentStreamHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrQueryRequestBase;
@@ -72,31 +96,6 @@ import org.apache.solr.update.processor.DistributingUpdateProcessorFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import java.io.ByteArrayInputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
/**
* This filter looks at the incoming URL maps them to handlers defined in solrconfig.xml
*
@@ -113,7 +112,7 @@ public class SolrDispatchFilter extends BaseSolrFilter {
protected String pathPrefix = null; // strip this from the beginning of a path
protected String abortErrorMessage = null;
- protected final HttpClient httpClient = HttpClientUtil.createClient(new ModifiableSolrParams());
+ protected final CloseableHttpClient httpClient = HttpClientUtil.createClient(new ModifiableSolrParams());
public SolrDispatchFilter() {
}
@@ -190,10 +189,14 @@ public class SolrDispatchFilter extends BaseSolrFilter {
@Override
public void destroy() {
- if (cores != null) {
- cores.shutdown();
- cores = null;
- }
+ try {
+ if (cores != null) {
+ cores.shutdown();
+ cores = null;
+ }
+ } finally {
+ IOUtils.closeQuietly(httpClient);
+ }
}
@Override
@@ -527,7 +530,6 @@ public class SolrDispatchFilter extends BaseSolrFilter {
urlstr += queryString == null ? "" : "?" + queryString;
- URL url = new URL(urlstr);
boolean isPostOrPutRequest = "POST".equals(req.getMethod()) || "PUT".equals(req.getMethod());
if ("GET".equals(req.getMethod())) {
diff --git a/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java b/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
index 75f9d28861a..92a6f306d80 100644
--- a/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
+++ b/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
@@ -85,11 +85,11 @@ public class HdfsDirectory extends BaseDirectory {
}
continue;
}
- org.apache.solr.util.IOUtils.closeQuietly(fileSystem);
+ org.apache.solr.common.util.IOUtils.closeQuietly(fileSystem);
throw new RuntimeException(
"Problem creating directory: " + hdfsDirPath, e);
} catch (Exception e) {
- org.apache.solr.util.IOUtils.closeQuietly(fileSystem);
+ org.apache.solr.common.util.IOUtils.closeQuietly(fileSystem);
throw new RuntimeException(
"Problem creating directory: " + hdfsDirPath, e);
}
diff --git a/solr/core/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java b/solr/core/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java
index 3c2decefc69..a3525ae33d6 100644
--- a/solr/core/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java
+++ b/solr/core/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java
@@ -29,7 +29,7 @@ import org.apache.lucene.store.Directory;
import org.apache.lucene.store.Lock;
import org.apache.lucene.store.LockFactory;
import org.apache.lucene.store.LockReleaseFailedException;
-import org.apache.solr.util.IOUtils;
+import org.apache.solr.common.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/solr/core/src/java/org/apache/solr/update/HdfsUpdateLog.java b/solr/core/src/java/org/apache/solr/update/HdfsUpdateLog.java
index f4ff9890a1c..b8c36ce8ef8 100644
--- a/solr/core/src/java/org/apache/solr/update/HdfsUpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/HdfsUpdateLog.java
@@ -35,10 +35,10 @@ import org.apache.hadoop.ipc.RemoteException;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
import org.apache.solr.util.HdfsUtil;
-import org.apache.solr.util.IOUtils;
/** @lucene.experimental */
public class HdfsUpdateLog extends UpdateLog {
diff --git a/solr/core/src/java/org/apache/solr/update/PeerSync.java b/solr/core/src/java/org/apache/solr/update/PeerSync.java
index 8e045d6f0e0..77b26a9fb40 100644
--- a/solr/core/src/java/org/apache/solr/update/PeerSync.java
+++ b/solr/core/src/java/org/apache/solr/update/PeerSync.java
@@ -296,20 +296,20 @@ public class PeerSync {
boolean connectTimeoutExceptionInChain = connectTimeoutExceptionInChain(srsp.getException());
if (connectTimeoutExceptionInChain || solrException instanceof ConnectException || solrException instanceof ConnectTimeoutException
|| solrException instanceof NoHttpResponseException || solrException instanceof SocketException) {
- log.warn(msg() + " couldn't connect to " + srsp.getShardAddress() + ", counting as success");
+ log.warn(msg() + " couldn't connect to " + srsp.getShardAddress() + ", counting as success", srsp.getException());
return true;
}
}
if (cantReachIsSuccess && sreq.purpose == 1 && srsp.getException() instanceof SolrException && ((SolrException) srsp.getException()).code() == 503) {
- log.warn(msg() + " got a 503 from " + srsp.getShardAddress() + ", counting as success");
+ log.warn(msg() + " got a 503 from " + srsp.getShardAddress() + ", counting as success", srsp.getException());
return true;
}
if (cantReachIsSuccess && sreq.purpose == 1 && srsp.getException() instanceof SolrException && ((SolrException) srsp.getException()).code() == 404) {
log.warn(msg() + " got a 404 from " + srsp.getShardAddress() + ", counting as success. " +
- "Perhaps /get is not registered?");
+ "Perhaps /get is not registered?", srsp.getException());
return true;
}
diff --git a/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java b/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java
index be5a16c7afc..ea9e1b8c154 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java
@@ -26,10 +26,10 @@ import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.InfoStream;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.core.DirectoryFactory;
import org.apache.solr.core.DirectoryFactory.DirContext;
import org.apache.solr.schema.IndexSchema;
-import org.apache.solr.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java b/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
index b423bb4d838..8ad59074bb9 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
@@ -22,12 +22,14 @@ import java.util.concurrent.Executors;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.impl.conn.SchemeRegistryFactory;
import org.apache.solr.client.solrj.impl.HttpClientUtil;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.ExecutorUtil;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.SolrjNamedThreadFactory;
import org.apache.solr.core.ConfigSolr;
import org.slf4j.Logger;
@@ -42,7 +44,7 @@ public class UpdateShardHandler {
private PoolingClientConnectionManager clientConnectionManager;
- private final HttpClient client;
+ private final CloseableHttpClient client;
public UpdateShardHandler(ConfigSolr cfg) {
@@ -52,7 +54,6 @@ public class UpdateShardHandler {
clientConnectionManager.setDefaultMaxPerRoute(cfg.getMaxUpdateConnectionsPerHost());
}
-
ModifiableSolrParams params = new ModifiableSolrParams();
if (cfg != null) {
params.set(HttpClientUtil.PROP_SO_TIMEOUT,
@@ -84,6 +85,7 @@ public class UpdateShardHandler {
} catch (Exception e) {
SolrException.log(log, e);
} finally {
+ IOUtils.closeQuietly(client);
clientConnectionManager.shutdown();
}
}
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
index 17c5e26dd55..b7e2487a166 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
@@ -784,7 +784,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
} else {
if (log.isWarnEnabled()) {
for (Error error : errors) {
- log.warn("Error sending update", error.e);
+ log.warn("Error sending update to " + error.req.node.getBaseUrl(), error.e);
}
}
}
diff --git a/solr/core/src/java/org/apache/solr/util/SolrCLI.java b/solr/core/src/java/org/apache/solr/util/SolrCLI.java
index 809b366d4e7..d8362ee0881 100644
--- a/solr/core/src/java/org/apache/solr/util/SolrCLI.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrCLI.java
@@ -36,6 +36,7 @@ import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.conn.ConnectTimeoutException;
+import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
@@ -379,7 +380,7 @@ public class SolrCLI {
return wasCommError;
}
- public static HttpClient getHttpClient() {
+ public static CloseableHttpClient getHttpClient() {
ModifiableSolrParams params = new ModifiableSolrParams();
params.set(HttpClientUtil.PROP_MAX_CONNECTIONS, 128);
params.set(HttpClientUtil.PROP_MAX_CONNECTIONS_PER_HOST, 32);
@@ -388,10 +389,10 @@ public class SolrCLI {
}
@SuppressWarnings("deprecation")
- public static void closeHttpClient(HttpClient httpClient) {
+ public static void closeHttpClient(CloseableHttpClient httpClient) {
if (httpClient != null) {
try {
- httpClient.getConnectionManager().shutdown();
+ HttpClientUtil.close(httpClient);
} catch (Exception exc) {
// safe to ignore, we're just shutting things down
}
@@ -403,7 +404,7 @@ public class SolrCLI {
*/
public static Map getJson(String getUrl) throws Exception {
Map json = null;
- HttpClient httpClient = getHttpClient();
+ CloseableHttpClient httpClient = getHttpClient();
try {
json = getJson(httpClient, getUrl, 2);
} finally {
@@ -595,7 +596,7 @@ public class SolrCLI {
int exitCode = 0;
String systemInfoUrl = solrUrl+"admin/info/system";
- HttpClient httpClient = getHttpClient();
+ CloseableHttpClient httpClient = getHttpClient();
try {
// hit Solr to get system info
Map systemInfo = getJson(httpClient, systemInfoUrl, 2);
@@ -1075,7 +1076,7 @@ public class SolrCLI {
solrUrl += "/";
String systemInfoUrl = solrUrl+"admin/info/system";
- HttpClient httpClient = getHttpClient();
+ CloseableHttpClient httpClient = getHttpClient();
try {
// hit Solr to get system info
Map systemInfo = getJson(httpClient, systemInfoUrl, 2);
@@ -1098,7 +1099,7 @@ public class SolrCLI {
}
zkHost = zookeeper;
} finally {
- closeHttpClient(httpClient);
+ HttpClientUtil.close(httpClient);
}
}
@@ -1319,7 +1320,7 @@ public class SolrCLI {
String coreName = cli.getOptionValue("name");
String systemInfoUrl = solrUrl+"admin/info/system";
- HttpClient httpClient = getHttpClient();
+ CloseableHttpClient httpClient = getHttpClient();
String solrHome = null;
try {
Map systemInfo = getJson(httpClient, systemInfoUrl, 2);
diff --git a/solr/core/src/test/org/apache/solr/cloud/AliasIntegrationTest.java b/solr/core/src/test/org/apache/solr/cloud/AliasIntegrationTest.java
index fa7138f3590..da26ae12db3 100644
--- a/solr/core/src/test/org/apache/solr/cloud/AliasIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/AliasIntegrationTest.java
@@ -17,6 +17,10 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
@@ -38,10 +42,6 @@ import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* Test sync phase that occurs when Leader goes down and a new Leader is
* elected.
@@ -179,7 +179,8 @@ public class AliasIntegrationTest extends AbstractFullDistribZkTestBase {
client = new HttpSolrClient(buildUrl(port) + "/testalias");
res = client.query(query);
assertEquals(5, res.getResults().getNumFound());
-
+ client.shutdown();
+ client = null;
// now without collections param
query = new SolrQuery("*:*");
@@ -213,26 +214,32 @@ public class AliasIntegrationTest extends AbstractFullDistribZkTestBase {
// try a std client
// search 1 and 2, but have no collections param
query = new SolrQuery("*:*");
- HttpSolrClient httpclient = new HttpSolrClient(getBaseUrl((HttpSolrClient) clients.get(0)) + "/testalias");
- res = httpclient.query(query);
- assertEquals(5, res.getResults().getNumFound());
- httpclient.shutdown();
- httpclient = null;
+ client = new HttpSolrClient(getBaseUrl((HttpSolrClient) clients.get(0)) + "/testalias");
+ try {
+ res = client.query(query);
+ assertEquals(5, res.getResults().getNumFound());
+ } finally {
+ client.shutdown();
+ client = null;
+ }
createAlias("testalias", "collection2");
// a second alias
createAlias("testalias2", "collection2");
- httpclient = new HttpSolrClient(getBaseUrl((HttpSolrClient) clients.get(0)) + "/testalias");
- SolrInputDocument doc8 = getDoc(id, 11, i1, -600, tlong, 600, t1,
- "humpty dumpy4 sat on a walls");
- httpclient.add(doc8);
- httpclient.commit();
- res = httpclient.query(query);
- assertEquals(3, res.getResults().getNumFound());
- httpclient.shutdown();
- httpclient = null;
+ client = new HttpSolrClient(getBaseUrl((HttpSolrClient) clients.get(0)) + "/testalias");
+ try {
+ SolrInputDocument doc8 = getDoc(id, 11, i1, -600, tlong, 600, t1,
+ "humpty dumpy4 sat on a walls");
+ client.add(doc8);
+ client.commit();
+ res = client.query(query);
+ assertEquals(3, res.getResults().getNumFound());
+ } finally {
+ client.shutdown();
+ client = null;
+ }
createAlias("testalias", "collection2,collection1");
@@ -257,21 +264,24 @@ public class AliasIntegrationTest extends AbstractFullDistribZkTestBase {
throws SolrServerException, IOException {
SolrClient client = createNewSolrClient("",
getBaseUrl((HttpSolrClient) clients.get(0)));
- if (random().nextBoolean()) {
- ModifiableSolrParams params = new ModifiableSolrParams();
- params.set("collections", collections);
- params.set("name", alias);
- params.set("action", CollectionAction.CREATEALIAS.toString());
- QueryRequest request = new QueryRequest(params);
- request.setPath("/admin/collections");
- client.request(request);
- } else {
- CreateAlias request = new CreateAlias();
- request.setAliasName(alias);
- request.setAliasedCollections(collections);
- request.process(client);
+ try {
+ if (random().nextBoolean()) {
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.set("collections", collections);
+ params.set("name", alias);
+ params.set("action", CollectionAction.CREATEALIAS.toString());
+ QueryRequest request = new QueryRequest(params);
+ request.setPath("/admin/collections");
+ client.request(request);
+ } else {
+ CreateAlias request = new CreateAlias();
+ request.setAliasName(alias);
+ request.setAliasedCollections(collections);
+ request.process(client);
+ }
+ } finally {
+ client.shutdown();
}
- client.shutdown();
}
private void deleteAlias(String alias) throws SolrServerException,
diff --git a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java
index 166aa5315f2..5ef74aedfd8 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java
@@ -19,6 +19,7 @@ package org.apache.solr.cloud;
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
import org.apache.http.client.HttpClient;
+import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
import org.apache.solr.client.solrj.SolrClient;
@@ -29,6 +30,7 @@ import org.apache.solr.client.solrj.impl.HttpClientUtil;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.cloud.ZkStateReader;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.core.Diagnostics;
import org.apache.solr.update.SolrCmdDistributor;
import org.junit.After;
@@ -46,7 +48,7 @@ import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
@Slow
-@SuppressSSL
+@SuppressSSL(bugUrl = "https://issues.apache.org/jira/browse/SOLR-5776")
@ThreadLeakLingering(linger = 60000)
public class ChaosMonkeyNothingIsSafeTest extends AbstractFullDistribZkTestBase {
private static final int FAIL_TOLERANCE = 20;
@@ -290,7 +292,7 @@ public class ChaosMonkeyNothingIsSafeTest extends AbstractFullDistribZkTestBase
}
class FullThrottleStopableIndexingThread extends StopableIndexingThread {
- private HttpClient httpClient = HttpClientUtil.createClient(null);
+ private CloseableHttpClient httpClient = HttpClientUtil.createClient(null);
private volatile boolean stop = false;
int clientIndex = 0;
private ConcurrentUpdateSolrClient cusc;
@@ -389,7 +391,7 @@ public class ChaosMonkeyNothingIsSafeTest extends AbstractFullDistribZkTestBase
stop = true;
cusc.blockUntilFinished();
cusc.shutdownNow();
- httpClient.getConnectionManager().shutdown();
+ IOUtils.closeQuietly(httpClient);
}
@Override
diff --git a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIAsyncDistributedZkTest.java b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIAsyncDistributedZkTest.java
index 0e5e522fae1..99262f70b97 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIAsyncDistributedZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIAsyncDistributedZkTest.java
@@ -70,48 +70,51 @@ public class CollectionsAPIAsyncDistributedZkTest extends AbstractFullDistribZkT
private void testSolrJAPICalls() throws Exception {
SolrClient client = createNewSolrClient("", getBaseUrl((HttpSolrClient) clients.get(0)));
-
- Create createCollectionRequest = new Create();
- createCollectionRequest.setCollectionName("testasynccollectioncreation");
- createCollectionRequest.setNumShards(1);
- createCollectionRequest.setConfigName("conf1");
- createCollectionRequest.setAsyncId("1001");
- createCollectionRequest.process(client);
-
- String state = getRequestStateAfterCompletion("1001", MAX_TIMEOUT_SECONDS, client);
-
- assertEquals("CreateCollection task did not complete!", "completed", state);
-
-
- createCollectionRequest = new Create();
- createCollectionRequest.setCollectionName("testasynccollectioncreation");
- createCollectionRequest.setNumShards(1);
- createCollectionRequest.setConfigName("conf1");
- createCollectionRequest.setAsyncId("1002");
- createCollectionRequest.process(client);
-
- state = getRequestStateAfterCompletion("1002", MAX_TIMEOUT_SECONDS, client);
-
- assertEquals("Recreating a collection with the same name didn't fail, should have.", "failed", state);
-
- CollectionAdminRequest.AddReplica addReplica = new CollectionAdminRequest.AddReplica();
- addReplica.setCollectionName("testasynccollectioncreation");
- addReplica.setShardName("shard1");
- addReplica.setAsyncId("1003");
- client.request(addReplica);
- state = getRequestStateAfterCompletion("1003", MAX_TIMEOUT_SECONDS, client);
- assertEquals("Add replica did not complete", "completed", state);
-
-
- SplitShard splitShardRequest = new SplitShard();
- splitShardRequest.setCollectionName("testasynccollectioncreation");
- splitShardRequest.setShardName("shard1");
- splitShardRequest.setAsyncId("1004");
- splitShardRequest.process(client);
-
- state = getRequestStateAfterCompletion("1004", MAX_TIMEOUT_SECONDS * 2, client);
-
- assertEquals("Shard split did not complete. Last recorded state: " + state, "completed", state);
+ try {
+ Create createCollectionRequest = new Create();
+ createCollectionRequest.setCollectionName("testasynccollectioncreation");
+ createCollectionRequest.setNumShards(1);
+ createCollectionRequest.setConfigName("conf1");
+ createCollectionRequest.setAsyncId("1001");
+ createCollectionRequest.process(client);
+
+ String state = getRequestStateAfterCompletion("1001", MAX_TIMEOUT_SECONDS, client);
+
+ assertEquals("CreateCollection task did not complete!", "completed", state);
+
+
+ createCollectionRequest = new Create();
+ createCollectionRequest.setCollectionName("testasynccollectioncreation");
+ createCollectionRequest.setNumShards(1);
+ createCollectionRequest.setConfigName("conf1");
+ createCollectionRequest.setAsyncId("1002");
+ createCollectionRequest.process(client);
+
+ state = getRequestStateAfterCompletion("1002", MAX_TIMEOUT_SECONDS, client);
+
+ assertEquals("Recreating a collection with the same name didn't fail, should have.", "failed", state);
+
+ CollectionAdminRequest.AddReplica addReplica = new CollectionAdminRequest.AddReplica();
+ addReplica.setCollectionName("testasynccollectioncreation");
+ addReplica.setShardName("shard1");
+ addReplica.setAsyncId("1003");
+ client.request(addReplica);
+ state = getRequestStateAfterCompletion("1003", MAX_TIMEOUT_SECONDS, client);
+ assertEquals("Add replica did not complete", "completed", state);
+
+
+ SplitShard splitShardRequest = new SplitShard();
+ splitShardRequest.setCollectionName("testasynccollectioncreation");
+ splitShardRequest.setShardName("shard1");
+ splitShardRequest.setAsyncId("1004");
+ splitShardRequest.process(client);
+
+ state = getRequestStateAfterCompletion("1004", MAX_TIMEOUT_SECONDS * 2, client);
+
+ assertEquals("Shard split did not complete. Last recorded state: " + state, "completed", state);
+ } finally {
+ client.shutdown();
+ }
}
private String getRequestStateAfterCompletion(String requestId, int waitForSeconds, SolrClient client)
diff --git a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java
index b47e963e8a9..a2e7c3e060c 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java
@@ -19,6 +19,7 @@ package org.apache.solr.cloud;
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.lucene.util.TestUtil;
+import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
@@ -63,6 +64,7 @@ import org.junit.BeforeClass;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
+
import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
@@ -231,8 +233,7 @@ public class CollectionsAPIDistributedZkTest extends AbstractFullDistribZkTestBa
QueryRequest request = new QueryRequest(params);
request.setPath("/admin/collections");
try {
- NamedList