Author: tommaso
Date: Wed Jul 29 14:27:02 2015
New Revision: 1693272

URL: http://svn.apache.org/r1693272
Log:
OAK-2292 - caching indexing solr server in remote ssp

Modified:
    
jackrabbit/oak/branches/1.0/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java

Modified: 
jackrabbit/oak/branches/1.0/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java?rev=1693272&r1=1693271&r2=1693272&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.0/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
 (original)
+++ 
jackrabbit/oak/branches/1.0/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
 Wed Jul 29 14:27:02 2015
@@ -44,6 +44,7 @@ public class RemoteSolrServerProvider im
     private final RemoteSolrServerConfiguration remoteSolrServerConfiguration;
 
     private SolrServer solrServer;
+    private SolrServer indexingSolrServer;
 
     public RemoteSolrServerProvider(RemoteSolrServerConfiguration 
remoteSolrServerConfiguration) {
         this.remoteSolrServerConfiguration = remoteSolrServerConfiguration;
@@ -51,23 +52,26 @@ public class RemoteSolrServerProvider im
 
     @Override
     public SolrServer getSolrServer() throws Exception {
-        if (solrServer == null && 
remoteSolrServerConfiguration.getSolrZkHost() != null && 
remoteSolrServerConfiguration.getSolrZkHost().length() > 0) {
-            try {
-                solrServer = initializeWithCloudSolrServer();
-            } catch (Exception e) {
-                log.warn("unable to initialize SolrCloud client for {}", 
remoteSolrServerConfiguration.getSolrZkHost(), e);
+        synchronized (this) {
+            if (solrServer == null && 
remoteSolrServerConfiguration.getSolrZkHost() != null && 
remoteSolrServerConfiguration.getSolrZkHost().length() > 0) {
+                try {
+                    solrServer = initializeWithCloudSolrServer();
+                } catch (Exception e) {
+                    log.warn("unable to initialize SolrCloud client for {}", 
remoteSolrServerConfiguration.getSolrZkHost(), e);
+                }
             }
-        }
-        if (solrServer == null && 
remoteSolrServerConfiguration.getSolrHttpUrls() != null && 
remoteSolrServerConfiguration.getSolrHttpUrls().length == 1
-                && remoteSolrServerConfiguration.getSolrHttpUrls()[0] != null 
&& remoteSolrServerConfiguration.getSolrHttpUrls()[0].length() > 0) {
-            try {
-                solrServer = initializeWithExistingHttpServer();
-            } catch (Exception e1) {
-                log.warn("unable to initialize Solr HTTP client for {}", 
remoteSolrServerConfiguration.getSolrHttpUrls(), e1);
+            if (solrServer == null && 
remoteSolrServerConfiguration.getSolrHttpUrls() != null && 
remoteSolrServerConfiguration.getSolrHttpUrls().length == 1
+                    && remoteSolrServerConfiguration.getSolrHttpUrls()[0] != 
null && remoteSolrServerConfiguration.getSolrHttpUrls()[0].length() > 0) {
+                try {
+                    solrServer = initializeWithExistingHttpServer();
+                } catch (Exception e1) {
+                    log.warn("unable to initialize Solr HTTP client for {}", 
remoteSolrServerConfiguration.getSolrHttpUrls(), e1);
+                }
             }
-        }
-        if (solrServer == null) {
-            throw new IOException("could not connect to any remote Solr 
server");
+            if (solrServer == null) {
+                throw new IOException("could not connect to any remote Solr 
server");
+            }
+            log.debug("initialized remote search solr server");
         }
         return solrServer;
     }
@@ -75,14 +79,19 @@ public class RemoteSolrServerProvider im
     @CheckForNull
     @Override
     public SolrServer getIndexingSolrServer() throws Exception {
-        SolrServer server = getSolrServer();
-
-        if (server instanceof HttpSolrServer) {
-            String url = ((HttpSolrServer) server).getBaseURL();
-            server = new ConcurrentUpdateSolrServer(url, 1000, 4);
+        synchronized (this) {
+            if (indexingSolrServer == null) {
+                SolrServer server = getSolrServer();
+
+                if (server instanceof HttpSolrServer) {
+                    String url = ((HttpSolrServer) server).getBaseURL();
+                    indexingSolrServer = new ConcurrentUpdateSolrServer(url, 
1000, 4);
+                    log.debug("initialized remote indexing solr server");
+                }
+            }
         }
 
-        return server;
+        return indexingSolrServer;
     }
 
     @CheckForNull


Reply via email to