From 921091c3a6f7869b94d60aa43c61112a5bb2f329 Mon Sep 17 00:00:00 2001 From: Michael Peter Christen Date: Mon, 4 Feb 2013 17:48:04 +0100 Subject: [PATCH] use thread-safe http connection manager for authenticated remote solr connections --- .../federate/solr/connector/RemoteSolrConnector.java | 9 +++++---- .../federate/solr/connector/SolrServerConnector.java | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/source/net/yacy/cora/federate/solr/connector/RemoteSolrConnector.java b/source/net/yacy/cora/federate/solr/connector/RemoteSolrConnector.java index faf551a75..995e695bd 100644 --- a/source/net/yacy/cora/federate/solr/connector/RemoteSolrConnector.java +++ b/source/net/yacy/cora/federate/solr/connector/RemoteSolrConnector.java @@ -46,18 +46,16 @@ import org.apache.http.impl.auth.BasicScheme; import org.apache.http.impl.client.BasicAuthCache; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.apache.http.protocol.HttpContext; import org.apache.solr.client.solrj.ResponseParser; import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.impl.XMLResponseParser; import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.util.NamedList; -import org.apache.solr.core.CoreContainer; -import org.apache.solr.core.SolrCore; public class RemoteSolrConnector extends SolrServerConnector implements SolrConnector { @@ -94,7 +92,10 @@ public class RemoteSolrConnector extends SolrServerConnector implements SolrConn } HttpSolrServer s; if (this.solraccount.length() > 0) { - this.client = new DefaultHttpClient() { + PoolingClientConnectionManager cm = new PoolingClientConnectionManager(); // try also: ThreadSafeClientConnManager + cm.setMaxTotal(100); + + this.client = new DefaultHttpClient(cm) { @Override protected HttpContext createHttpContext() { HttpContext context = super.createHttpContext(); diff --git a/source/net/yacy/cora/federate/solr/connector/SolrServerConnector.java b/source/net/yacy/cora/federate/solr/connector/SolrServerConnector.java index a26999bd8..9e1642fda 100644 --- a/source/net/yacy/cora/federate/solr/connector/SolrServerConnector.java +++ b/source/net/yacy/cora/federate/solr/connector/SolrServerConnector.java @@ -33,6 +33,7 @@ import net.yacy.cora.sorting.ReversibleScoreMap; import net.yacy.kelondro.logging.Log; import org.apache.log4j.Logger; +import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; @@ -102,8 +103,10 @@ public abstract class SolrServerConnector extends AbstractSolrConnector implemen @Override public synchronized void commit(final boolean softCommit) { + //if (this.server instanceof HttpSolrServer) ((HttpSolrServer) this.server).getHttpClient().getConnectionManager().closeExpiredConnections(); try { this.server.commit(true, true, softCommit); + if (this.server instanceof HttpSolrServer) ((HttpSolrServer) this.server).shutdown(); } catch (Throwable e) { Log.logException(e); }