Author: tommaso
Date: Tue Feb 24 16:09:05 2015
New Revision: 1662001
URL: http://svn.apache.org/r1662001
Log:
OAK-2526 - persisted solr server configuration support
Added:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerConfigurationProvider.java
(with props)
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServersObserver.java
(with props)
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/NodeStateSolrServersObserverService.java
(with props)
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/OakSolrServer.java
(with props)
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSolrSearchTest.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationDefaults.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerProvider.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditorProvider.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrQueryIndexProviderService.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexProvider.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/SolrServerRegistry.java
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/SolrOakRepositoryStub.java
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/SolrBaseTest.java
jackrabbit/oak/trunk/oak-solr-osgi/pom.xml
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSolrSearchTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSolrSearchTest.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSolrSearchTest.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSolrSearchTest.java
Tue Feb 24 16:09:05 2015
@@ -22,6 +22,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.StringReader;
+import javax.annotation.Nonnull;
import javax.jcr.Repository;
import org.apache.commons.io.FileUtils;
@@ -36,13 +37,13 @@ import org.apache.jackrabbit.oak.plugins
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfigurationProvider;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.RemoteSolrServerConfiguration;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.NodeStateSolrServersObserver;
import
org.apache.jackrabbit.oak.plugins.index.solr.index.SolrIndexEditorProvider;
import
org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndexProvider;
import
org.apache.jackrabbit.oak.plugins.index.solr.server.EmbeddedSolrServerProvider;
import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider;
import org.apache.jackrabbit.oak.plugins.index.solr.util.SolrIndexInitializer;
import org.apache.jackrabbit.oak.spi.commit.Observer;
-import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.slf4j.Logger;
@@ -68,6 +69,7 @@ public class FullTextSolrSearchTest exte
@Override
public Jcr customize(Oak oak) {
OakSolrConfigurationProvider configurationProvider = new
OakSolrConfigurationProvider() {
+ @Nonnull
public OakSolrConfiguration getConfiguration() {
return new DefaultSolrConfiguration() {
@Override
@@ -79,7 +81,7 @@ public class FullTextSolrSearchTest exte
};
SolrQueryIndexProvider solrPRovider = new
SolrQueryIndexProvider(serverProvider, configurationProvider);
oak.with((Observer) solrPRovider)
- .with((QueryIndexProvider) solrPRovider)
+ .with(new NodeStateSolrServersObserver())
.with(new SolrIndexEditorProvider(serverProvider,
configurationProvider))
.with(new SolrIndexInitializer(false));
return new Jcr(oak);
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationDefaults.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationDefaults.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationDefaults.java
(original)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationDefaults.java
Tue Feb 24 16:09:05 2015
@@ -42,7 +42,7 @@ public class SolrServerConfigurationDefa
public static final String DESC_FIELD_NAME = "path_des";
public static final String ANC_FIELD_NAME = "path_anc";
public static final String CATCHALL_FIELD = "catch_all";
- public static final int ROWS = 50;
+ public static final int ROWS = Integer.MAX_VALUE;
public static final boolean PROPERTY_RESTRICTIONS = false;
public static final boolean PATH_RESTRICTIONS = false;
public static final boolean PRIMARY_TYPES = false;
Added:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerConfigurationProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerConfigurationProvider.java?rev=1662001&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerConfigurationProvider.java
(added)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerConfigurationProvider.java
Tue Feb 24 16:09:05 2015
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate;
+
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Type;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.EmbeddedSolrServerConfiguration;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.RemoteSolrServerConfiguration;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationDefaults;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationProvider;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+
+public class NodeStateSolrServerConfigurationProvider implements
SolrServerConfigurationProvider {
+
+ private final NodeState nodeState;
+
+ public NodeStateSolrServerConfigurationProvider(NodeState nodeState) {
+ this.nodeState = nodeState;
+ if (!nodeState.hasProperty(Properties.SERVER_TYPE)) {
+ throw new IllegalArgumentException("missing property " +
Properties.SERVER_TYPE + " in " + nodeState);
+ }
+ }
+
+ private int getIntValueFor(String propertyName, int defaultValue) {
+ long value = defaultValue;
+ PropertyState property = nodeState.getProperty(propertyName);
+ if (property != null) {
+ value = property.getValue(Type.LONG);
+ }
+ return (int) value;
+ }
+
+ private String getStringValueFor(String propertyName, String defaultValue)
{
+ String value = defaultValue;
+ PropertyState property = nodeState.getProperty(propertyName);
+ if (property != null) {
+ value = property.getValue(Type.STRING);
+ }
+ return value;
+ }
+
+ @Nonnull
+ @Override
+ public SolrServerConfiguration<SolrServerProvider>
getSolrServerConfiguration() {
+ String type = getStringValueFor(Properties.SERVER_TYPE, null);
+ if ("embedded".equalsIgnoreCase(type)) {
+ String solrHomePath = getStringValueFor(Properties.SOLRHOME_PATH,
SolrServerConfigurationDefaults.SOLR_HOME_PATH);
+ String coreName = getStringValueFor(Properties.CORE_NAME,
SolrServerConfigurationDefaults.CORE_NAME);
+ String context = getStringValueFor(Properties.CONTEXT, null);
+ Integer httpPort =
Integer.valueOf(getStringValueFor(Properties.HTTP_PORT, "0"));
+
+ if (context != null && httpPort > 0) {
+ return (SolrServerConfiguration) new
EmbeddedSolrServerConfiguration(solrHomePath, coreName)
+ .withHttpConfiguration(context, httpPort);
+ } else {
+ return (SolrServerConfiguration) new
EmbeddedSolrServerConfiguration(solrHomePath, coreName);
+ }
+ } else if ("remote".equalsIgnoreCase(type)) {
+ String solrZkHost = getStringValueFor(Properties.ZK_HOST, null);
+ String solrCollection = getStringValueFor(Properties.COLLECTION,
SolrServerConfigurationDefaults.COLLECTION);
+ int solrReplicationFactor =
getIntValueFor(Properties.REPLICATION_FACTOR,
SolrServerConfigurationDefaults.REPLICATION_FACTOR);
+ String solrConfDir =
getStringValueFor(Properties.CONFIGURATION_DIRECTORY,
SolrServerConfigurationDefaults.CONFIGURATION_DIRECTORY);
+ String solrHttpUrls = getStringValueFor(Properties.HTTP_URL,
SolrServerConfigurationDefaults.HTTP_URL);
+ int solrShardsNo = getIntValueFor(Properties.SHARDS_NO,
SolrServerConfigurationDefaults.SHARDS_NO);
+
+ return (SolrServerConfiguration) new
RemoteSolrServerConfiguration(solrZkHost, solrCollection, solrShardsNo,
+ solrReplicationFactor, solrConfDir, solrHttpUrls);
+ } else {
+ throw new RuntimeException("unexpected Solr server type: " + type);
+ }
+ }
+
+ /**
+ * Properties that may be retrieved from the configuration {@link
org.apache.jackrabbit.oak.spi.state.NodeState}.
+ */
+ public final class Properties {
+ public static final String SERVER_TYPE = "solrServerType";
+
+ // --> embedded solr server properties <--
+ public static final String SOLRHOME_PATH = "solrHomePath";
+ public static final String CONTEXT = "solrContext";
+ public static final String HTTP_PORT = "httpPort";
+ public static final String CORE_NAME = "coreName";
+
+ // --> remote solr server properties <--
+ public static final String ZK_HOST = "zkHost";
+ public static final String COLLECTION = "collection";
+ public static final String REPLICATION_FACTOR = "replicationFactor";
+ public static final String CONFIGURATION_DIRECTORY =
"configurationDirectory";
+ public static final String HTTP_URL = "httpUrl";
+ public static final String SHARDS_NO = "shardsNo";
+ }
+
+}
Propchange:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerConfigurationProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerProvider.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServerProvider.java
Tue Feb 24 16:09:05 2015
@@ -17,16 +17,10 @@
package org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate;
import java.io.IOException;
-import javax.annotation.Nonnull;
import com.google.common.collect.Iterables;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
-import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.EmbeddedSolrServerConfiguration;
-import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.RemoteSolrServerConfiguration;
-import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration;
-import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationDefaults;
-import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationProvider;
import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.solr.client.solrj.SolrServer;
@@ -66,7 +60,7 @@ public class NodeStateSolrServerProvider
private void checkProviderInitialization() throws IllegalAccessException,
java.lang.reflect.InvocationTargetException, InstantiationException {
synchronized (nodeState) {
if (provider == null) {
- this.provider = new
NodeStateSolrServerConfigurationProvider().getSolrServerConfiguration().getProvider();
+ this.provider = new
NodeStateSolrServerConfigurationProvider(nodeState).getSolrServerConfiguration().getProvider();
}
}
}
@@ -89,60 +83,6 @@ public class NodeStateSolrServerProvider
return provider.getSearchingSolrServer();
}
- private class NodeStateSolrServerConfigurationProvider implements
SolrServerConfigurationProvider {
- @Nonnull
- @Override
- public SolrServerConfiguration<SolrServerProvider>
getSolrServerConfiguration() {
- String type = getStringValueFor(Properties.SERVER_TYPE,
"embedded");
- if ("embedded".equalsIgnoreCase(type)) {
- String solrHomePath =
getStringValueFor(Properties.SOLRHOME_PATH,
SolrServerConfigurationDefaults.SOLR_HOME_PATH);
- String coreName = getStringValueFor(Properties.CORE_NAME,
SolrServerConfigurationDefaults.CORE_NAME);
- String context = getStringValueFor(Properties.CONTEXT, null);
- Integer httpPort =
Integer.valueOf(getStringValueFor(Properties.HTTP_PORT, "0"));
-
- if (context != null && httpPort > 0) {
- return (SolrServerConfiguration) new
EmbeddedSolrServerConfiguration(solrHomePath, coreName)
- .withHttpConfiguration(context, httpPort);
- } else {
- return (SolrServerConfiguration) new
EmbeddedSolrServerConfiguration(solrHomePath, coreName);
- }
- } else if ("remote".equalsIgnoreCase(type)) {
- String solrZkHost = getStringValueFor(Properties.ZK_HOST,
null);
- String solrCollection =
getStringValueFor(Properties.COLLECTION,
SolrServerConfigurationDefaults.COLLECTION);
- int solrReplicationFactor =
getIntValueFor(Properties.REPLICATION_FACTOR,
SolrServerConfigurationDefaults.REPLICATION_FACTOR);
- String solrConfDir =
getStringValueFor(Properties.CONFIGURATION_DIRECTORY,
SolrServerConfigurationDefaults.CONFIGURATION_DIRECTORY);
- String solrHttpUrls = getStringValueFor(Properties.HTTP_URL,
SolrServerConfigurationDefaults.HTTP_URL);
- int solrShardsNo = getIntValueFor(Properties.SHARDS_NO,
SolrServerConfigurationDefaults.SHARDS_NO);
-
- return (SolrServerConfiguration) new
RemoteSolrServerConfiguration(solrZkHost, solrCollection, solrShardsNo,
- solrReplicationFactor, solrConfDir, solrHttpUrls);
- } else {
- throw new RuntimeException("unexpected Solr server type: " +
type);
- }
- }
- }
-
-
- /**
- * Properties that may be retrieved from the configuration {@link
org.apache.jackrabbit.oak.spi.state.NodeState}.
- */
- public final class Properties {
- public static final String SERVER_TYPE = "serverType";
-
- // --> embedded solr server properties <--
- public static final String SOLRHOME_PATH = "solrHomePath";
- public static final String CONTEXT = "solrContext";
- public static final String HTTP_PORT = "httpPort";
- public static final String CORE_NAME = "coreName";
-
- // --> remote solr server properties <--
- public static final String ZK_HOST = "zkHost";
- public static final String COLLECTION = "collection";
- public static final String REPLICATION_FACTOR = "replicationFactor";
- public static final String CONFIGURATION_DIRECTORY =
"configurationDirectory";
- public static final String HTTP_URL = "httpUrl";
- public static final String SHARDS_NO = "shardsNo";
- }
@Override
public void close() throws IOException {
Added:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServersObserver.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServersObserver.java?rev=1662001&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServersObserver.java
(added)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServersObserver.java
Tue Feb 24 16:09:05 2015
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerRegistry;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.DiffObserver;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
+import org.apache.solr.client.solrj.SolrServer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * An {@link org.apache.jackrabbit.oak.spi.commit.Observer} looking for
changes on persisted Solr server configuration nodes.
+ * If any change is done there, the related {@link
org.apache.solr.client.solrj.SolrServer}s are shutdown and unregistered
+ * from the {@link
org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerRegistry}
+ */
+public class NodeStateSolrServersObserver extends DiffObserver {
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @Override
+ protected NodeStateDiff getRootDiff(@Nonnull NodeState before, @Nonnull
NodeState after, @Nullable CommitInfo info) {
+ return new ChangingSolrServersNodeStateDiff(after);
+ }
+
+ private void shutdownRegisteredSolrServers(NodeState nodeState) {
+ log.debug("shutting down servers at {}", nodeState);
+ NodeStateSolrServerConfigurationProvider
nodeStateSolrServerConfigurationProvider = new
NodeStateSolrServerConfigurationProvider(nodeState);
+ SolrServerConfiguration<SolrServerProvider> solrServerConfiguration =
nodeStateSolrServerConfigurationProvider.getSolrServerConfiguration();
+ SolrServer searchingSolrServer =
SolrServerRegistry.get(solrServerConfiguration,
SolrServerRegistry.Strategy.SEARCHING);
+ if (searchingSolrServer != null) {
+ searchingSolrServer.shutdown();
+ log.debug("searching SolrServer shut down");
+ SolrServerRegistry.unregister(solrServerConfiguration,
SolrServerRegistry.Strategy.SEARCHING);
+ }
+
+ SolrServer indexingSolrServer =
SolrServerRegistry.get(solrServerConfiguration,
SolrServerRegistry.Strategy.INDEXING);
+ if (indexingSolrServer != null) {
+ indexingSolrServer.shutdown();
+ log.debug("indexing SolrServer shut down");
+ SolrServerRegistry.unregister(solrServerConfiguration,
SolrServerRegistry.Strategy.INDEXING);
+ }
+ }
+
+ private class ChangingSolrServersNodeStateDiff implements NodeStateDiff {
+ private final NodeState nodeState;
+ private final String name;
+
+ public ChangingSolrServersNodeStateDiff(NodeState after) {
+ nodeState = after;
+ name = "";
+ }
+
+ public ChangingSolrServersNodeStateDiff(NodeState nodeState, String
name) {
+ this.nodeState = nodeState;
+ this.name = name;
+ }
+
+ @Override
+ public boolean propertyAdded(PropertyState after) {
+ if (isSolrServerNode(name, nodeState)) {
+ shutdownRegisteredSolrServers(nodeState);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean propertyChanged(PropertyState before, PropertyState
after) {
+ if (isSolrServerNode(name, nodeState)) {
+ shutdownRegisteredSolrServers(nodeState);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean propertyDeleted(PropertyState before) {
+ if (isSolrServerNode(name, nodeState)) {
+ shutdownRegisteredSolrServers(nodeState);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean childNodeAdded(String name, NodeState after) {
+ return true;
+ }
+
+ @Override
+ public boolean childNodeChanged(String name, NodeState before,
NodeState after) {
+ if (isSolrServerNode(name, before)) {
+ shutdownRegisteredSolrServers(before);
+ }
+ return after.compareAgainstBaseState(before, new
ChangingSolrServersNodeStateDiff(after, this.name + "/" + name));
+ }
+
+ @Override
+ public boolean childNodeDeleted(String name, NodeState before) {
+ if (isSolrServerNode(name, before)) { // look if the deleted node
was a server node
+ shutdownRegisteredSolrServers(before);
+ } else { //look among child nodes if there was a server node
+ for (String childNodeName : before.getChildNodeNames()) {
+ NodeState childNodeState =
before.getChildNode(childNodeName);
+ if (isSolrServerNode(childNodeName, childNodeState)) {
+ shutdownRegisteredSolrServers(childNodeState);
+ break;
+ }
+ }
+ }
+ return true;
+ }
+
+ private boolean isSolrServerNode(String name, NodeState nodeState) {
+ return "server".equals(name) &&
nodeState.hasProperty("solrServerType");
+ }
+
+ }
+}
Propchange:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/nodestate/NodeStateSolrServersObserver.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditorProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditorProvider.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditorProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditorProvider.java
Tue Feb 24 16:09:05 2015
@@ -23,9 +23,11 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.index.IndexUpdateCallback;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfigurationProvider;
-import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.NodeStateSolrServerProvider;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationProvider;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.NodeStateSolrServerConfigurationProvider;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.OakSolrNodeStateConfiguration;
import org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.OakSolrServer;
import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider;
import org.apache.jackrabbit.oak.spi.commit.Editor;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -60,15 +62,20 @@ public class SolrIndexEditorProvider imp
throws CommitFailedException {
SolrIndexEditor editor = null;
if (SolrQueryIndex.TYPE.equals(type)) {
- // if index definition contains a persisted configuration, use that
- if (isPersistedConfiguration(definition)) {
- NodeState nodeState = definition.getNodeState();
- OakSolrConfiguration configuration = new
OakSolrNodeStateConfiguration(nodeState);
- SolrServerProvider serverProvider = new
NodeStateSolrServerProvider(nodeState.getChildNode("server"));
- editor = getEditor(configuration, serverProvider, callback,
definition);
- } else { // otherwise use the default configuration providers
(e.g. defined via code or OSGi)
- OakSolrConfiguration configuration =
oakSolrConfigurationProvider.getConfiguration();
- editor = getEditor(configuration, solrServerProvider,
callback, definition);
+ try {
+ // if index definition contains a persisted configuration, use
that
+ if (isPersistedConfiguration(definition)) {
+ NodeState nodeState = definition.getNodeState();
+ OakSolrConfiguration configuration = new
OakSolrNodeStateConfiguration(nodeState);
+ SolrServerConfigurationProvider configurationProvider =
new
NodeStateSolrServerConfigurationProvider(definition.getChildNode("server").getNodeState());
+ SolrServer solrServer = new
OakSolrServer(configurationProvider);
+ editor = getEditor(configuration, solrServer, callback,
definition);
+ } else { // otherwise use the default configuration providers
(e.g. defined via code or OSGi)
+ OakSolrConfiguration configuration =
oakSolrConfigurationProvider.getConfiguration();
+ editor = getEditor(configuration,
solrServerProvider.getIndexingSolrServer(), callback, definition);
+ }
+ } catch (Exception e) {
+ log.warn("could not get Solr index editor from {}",
definition.getNodeState(), e);
}
}
return editor;
@@ -78,18 +85,17 @@ public class SolrIndexEditorProvider imp
return definition.hasChildNode("server");
}
- private SolrIndexEditor getEditor(OakSolrConfiguration configuration,
SolrServerProvider solrServerProvider,
+ private SolrIndexEditor getEditor(OakSolrConfiguration configuration,
SolrServer solrServer,
IndexUpdateCallback callback,
NodeBuilder definition) {
SolrIndexEditor editor = null;
try {
- SolrServer solrServer = solrServerProvider.getIndexingSolrServer();
- if (solrServer != null) {
+ if (solrServer != null && 0 == solrServer.ping().getStatus()) {
editor = new SolrIndexEditor(
solrServer,
configuration, callback);
} else {
if (log.isWarnEnabled()) {
- log.warn("null SolrServer provided, cannot index {}",
definition);
+ log.warn("no SolrServer provided, cannot index {}",
definition);
}
}
} catch (Exception e) {
Added:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/NodeStateSolrServersObserverService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/NodeStateSolrServersObserverService.java?rev=1662001&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/NodeStateSolrServersObserverService.java
(added)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/NodeStateSolrServersObserverService.java
Tue Feb 24 16:09:05 2015
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.index.solr.osgi;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.NodeStateSolrServersObserver;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.Observer;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+
+/**
+ * An OSGi service for {@link
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.NodeStateSolrServersObserver}
+ */
+@Component(immediate = true)
+@Service(value = Observer.class)
+public class NodeStateSolrServersObserverService implements Observer {
+
+ private final NodeStateSolrServersObserver nodeStateSolrServersObserver =
new NodeStateSolrServersObserver();
+
+ @Override
+ public void contentChanged(@Nonnull NodeState root, @Nullable CommitInfo
info) {
+ nodeStateSolrServersObserver.contentChanged(root, info);
+ }
+}
Propchange:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/NodeStateSolrServersObserverService.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrQueryIndexProviderService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrQueryIndexProviderService.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrQueryIndexProviderService.java
(original)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrQueryIndexProviderService.java
Tue Feb 24 16:09:05 2015
@@ -84,7 +84,6 @@ public class SolrQueryIndexProviderServi
}
regs.add(componentContext.getBundleContext().registerService(QueryIndexProvider.class.getName(),
solrQueryIndexProvider, null));
-
regs.add(componentContext.getBundleContext().registerService(Observer.class.getName(),
solrQueryIndexProvider, null));
}
}
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexProvider.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexProvider.java
Tue Feb 24 16:09:05 2015
@@ -26,8 +26,12 @@ import org.apache.jackrabbit.oak.api.Typ
import org.apache.jackrabbit.oak.plugins.index.aggregate.NodeAggregator;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfigurationProvider;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationProvider;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.NodeStateSolrServerConfigurationProvider;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.NodeStateSolrServerProvider;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.OakSolrNodeStateConfiguration;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.OakSolrServer;
import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.Observer;
@@ -45,7 +49,7 @@ import static org.apache.jackrabbit.oak.
/**
* {@link QueryIndexProvider} for {@link SolrQueryIndex}
*/
-public class SolrQueryIndexProvider implements QueryIndexProvider, Observer {
+public class SolrQueryIndexProvider implements QueryIndexProvider {
private final Logger log = LoggerFactory.getLogger(getClass());
@@ -80,17 +84,17 @@ public class SolrQueryIndexProvider impl
try {
if (isPersistedConfiguration(definition)) {
OakSolrConfiguration configuration = new
OakSolrNodeStateConfiguration(definition);
- SolrServerProvider serverProvider = new
NodeStateSolrServerProvider(definition.getChildNode("server"));
+ SolrServerConfigurationProvider
solrServerConfigurationProvider = new
NodeStateSolrServerConfigurationProvider(definition.getChildNode("server"));
+ SolrServer solrServer = new
OakSolrServer(solrServerConfigurationProvider);
// if it does not already exist I need to register an
observer that updates / closes this SolrServerProvider when the node is
updated/removed
- addQueryIndex(tempIndexes, name, serverProvider,
configuration);
+ addQueryIndex(tempIndexes, name, solrServer,
configuration);
} else { // otherwise use the default configuration
providers
OakSolrConfiguration configuration =
oakSolrConfigurationProvider.getConfiguration();
- addQueryIndex(tempIndexes, name, solrServerProvider,
configuration);
+ addQueryIndex(tempIndexes, name,
solrServerProvider.getSearchingSolrServer(), configuration);
}
} catch (Exception e) {
- log.warn("could not get Solr query index from node {}",
name);
+ log.warn("could not get Solr query index from node {}",
name, e);
}
- // TODO : need to add index tracking capabilities in order to
shutdown SolrServer in case the server node gets deleted
}
}
return tempIndexes;
@@ -100,9 +104,8 @@ public class SolrQueryIndexProvider impl
return definition.hasChildNode("server");
}
- private void addQueryIndex(List<QueryIndex> tempIndexes, String name,
SolrServerProvider solrServerProvider, OakSolrConfiguration configuration) {
+ private void addQueryIndex(List<QueryIndex> tempIndexes, String name,
SolrServer solrServer, OakSolrConfiguration configuration) {
try {
- SolrServer solrServer =
solrServerProvider.getSearchingSolrServer();
// the query engine should be returned only if the server is
alive, otherwise other indexes should be used
if (solrServer != null && 0 == solrServer.ping().getStatus()) {
tempIndexes.add(new AdvancedSolrQueryIndex(
@@ -122,9 +125,4 @@ public class SolrQueryIndexProvider impl
}
}
- @Override
- public void contentChanged(@Nonnull NodeState root, @Nullable CommitInfo
info) {
- // TODO : check if any change has been done on a persisted SSP
- }
-
}
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java
Tue Feb 24 16:09:05 2015
@@ -52,17 +52,7 @@ public class EmbeddedSolrServerProvider
private SolrServer createSolrServer() throws Exception {
- SolrServer cachedEntry =
SolrServerRegistry.get(solrServerConfiguration,
SolrServerRegistry.Strategy.SEARCHING);
-
- try {
- if (cachedEntry != null && 0 == cachedEntry.ping().getStatus()) {
- return cachedEntry;
- }
- } catch (Exception e) {
- log.warn("cached entry is shut down, creating new one");
- }
-
- log.warn("creating new embedded solr server with config: {}",
solrServerConfiguration);
+ log.info("creating new embedded solr server with config: {}",
solrServerConfiguration);
String solrHomePath = solrServerConfiguration.getSolrHomePath();
String coreName = solrServerConfiguration.getCoreName();
@@ -125,7 +115,6 @@ public class EmbeddedSolrServerProvider
EmbeddedSolrServer server = new
EmbeddedSolrServer(coreContainer, coreName);
if (server.ping().getStatus() == 0) {
- SolrServerRegistry.register(solrServerConfiguration,
server, SolrServerRegistry.Strategy.SEARCHING);
return server;
} else {
throw new IOException("the embedded Solr server is not
alive");
@@ -161,7 +150,6 @@ public class EmbeddedSolrServerProvider
throw new IOException("could not create nested core directory
in solrHomePath/solrCoreName/conf");
}
String solrCoreDir = solrCorePathFile.getAbsolutePath();
-// copy("/solr/oak/core.properties", solrCoreDir);
File coreProperties = new File(new File(solrCoreDir),
"core.properties");
assert coreProperties.createNewFile();
FileOutputStream out = new FileOutputStream(coreProperties);
@@ -265,15 +253,9 @@ public class EmbeddedSolrServerProvider
@Override
public void close() throws IOException {
try {
- getSolrServer().shutdown();
- } catch (Exception e) {
- // do nothing
- } try {
- getIndexingSolrServer().shutdown();
- } catch (Exception e) {
- // do nothing
- } try {
- getSearchingSolrServer().shutdown();
+ if (solrServer != null) {
+ solrServer.shutdown();
+ }
} catch (Exception e) {
// do nothing
}
Added:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/OakSolrServer.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/OakSolrServer.java?rev=1662001&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/OakSolrServer.java
(added)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/OakSolrServer.java
Tue Feb 24 16:09:05 2015
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.index.solr.server;
+
+import java.io.IOException;
+import javax.annotation.Nonnull;
+
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationProvider;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.common.util.NamedList;
+
+/**
+ * An Oak {@link org.apache.solr.client.solrj.SolrServer}, caching a {@link
org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider}
+ * for dispatching requests to indexing or searching specialized {@link
org.apache.solr.client.solrj.SolrServer}s.
+ */
+public class OakSolrServer extends SolrServer {
+
+ private final SolrServerConfiguration solrServerConfiguration;
+ private final SolrServerProvider solrServerProvider;
+
+ public OakSolrServer(@Nonnull SolrServerConfigurationProvider
solrServerConfigurationProvider) {
+ this.solrServerConfiguration =
solrServerConfigurationProvider.getSolrServerConfiguration();
+ try {
+ this.solrServerProvider = solrServerConfiguration.getProvider();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public NamedList<Object> request(SolrRequest request) throws
SolrServerException, IOException {
+ try {
+
+ SolrServer server = getServer(request);
+ return server.request(request);
+
+ } catch (Exception e) {
+ throw new SolrServerException(e);
+ }
+ }
+
+ private synchronized SolrServer getServer(SolrRequest request) throws
Exception {
+ boolean isIndex = request.getPath().contains("/update");
+ SolrServerRegistry.Strategy strategy = isIndex ?
SolrServerRegistry.Strategy.INDEXING : SolrServerRegistry.Strategy.SEARCHING;
+ SolrServer solrServer =
SolrServerRegistry.get(solrServerConfiguration, strategy);
+ if (solrServer == null) {
+ solrServer = isIndex ? solrServerProvider.getIndexingSolrServer()
: solrServerProvider.getSearchingSolrServer();
+ SolrServerRegistry.register(solrServerConfiguration, solrServer,
strategy);
+ }
+ return solrServer;
+ }
+
+ @Override
+ public void shutdown() {
+ try {
+ solrServerProvider.close();
+ } catch (IOException e) {
+ // do nothing
+ }
+ }
+}
Propchange:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/OakSolrServer.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
Tue Feb 24 16:09:05 2015
@@ -43,7 +43,8 @@ public class RemoteSolrServerProvider im
private final RemoteSolrServerConfiguration remoteSolrServerConfiguration;
- private SolrServer solrServer;
+ private SolrServer searchingSolrServer;
+ private SolrServer indexingSolrServer;
public RemoteSolrServerProvider(RemoteSolrServerConfiguration
remoteSolrServerConfiguration) {
this.remoteSolrServerConfiguration = remoteSolrServerConfiguration;
@@ -53,17 +54,8 @@ public class RemoteSolrServerProvider im
@Override
public SolrServer getSolrServer() throws Exception {
- SolrServer cachedEntry =
SolrServerRegistry.get(remoteSolrServerConfiguration,
SolrServerRegistry.Strategy.SEARCHING);
-
- try {
- if (cachedEntry != null && 0 == cachedEntry.ping().getStatus()) {
- return cachedEntry;
- }
- } catch (Exception e) {
- log.warn("cached entry is shut down, creating new one");
- }
-
- if (solrServer == null &&
remoteSolrServerConfiguration.getSolrZkHost() != null &&
remoteSolrServerConfiguration.getSolrZkHost().length() > 0) {
+ SolrServer solrServer = null;
+ if (remoteSolrServerConfiguration.getSolrZkHost() != null &&
remoteSolrServerConfiguration.getSolrZkHost().length() > 0) {
try {
solrServer = initializeWithCloudSolrServer();
} catch (Exception e) {
@@ -80,34 +72,20 @@ public class RemoteSolrServerProvider im
}
if (solrServer == null) {
throw new IOException("could not connect to any remote Solr
server");
- } else {
- SolrServerRegistry.register(remoteSolrServerConfiguration,
solrServer, SolrServerRegistry.Strategy.SEARCHING);
}
+
return solrServer;
}
@CheckForNull
@Override
public SolrServer getIndexingSolrServer() throws Exception {
-
- SolrServer cachedEntry =
SolrServerRegistry.get(remoteSolrServerConfiguration,
SolrServerRegistry.Strategy.INDEXING);
-
- try {
- if (cachedEntry != null && 0 == cachedEntry.ping().getStatus()) {
- return cachedEntry;
- }
- } catch (Exception e) {
- log.warn("cached entry is shut down, creating new one");
- }
-
SolrServer server = getSolrServer();
if (server instanceof HttpSolrServer) {
String url = ((HttpSolrServer) server).getBaseURL();
- server = new ConcurrentUpdateSolrServer(url, 1000, 4);
- SolrServerRegistry.register(remoteSolrServerConfiguration,
solrServer, SolrServerRegistry.Strategy.INDEXING);
+ server = new ConcurrentUpdateSolrServer(url, 1000,
Runtime.getRuntime().availableProcessors());
}
-
return server;
}
@@ -227,15 +205,12 @@ public class RemoteSolrServerProvider im
@Override
public void close() throws IOException {
try {
- getSolrServer().shutdown();
- } catch (Exception e) {
- // do nothing
- } try {
- getIndexingSolrServer().shutdown();
+ searchingSolrServer.shutdown();
} catch (Exception e) {
// do nothing
- } try {
- getSearchingSolrServer().shutdown();
+ }
+ try {
+ indexingSolrServer.shutdown();
} catch (Exception e) {
// do nothing
}
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/SolrServerRegistry.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/SolrServerRegistry.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/SolrServerRegistry.java
(original)
+++
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/SolrServerRegistry.java
Tue Feb 24 16:09:05 2015
@@ -63,7 +63,22 @@ public class SolrServerRegistry {
return null;
}
- enum Strategy {
+ public static void unregister(SolrServerConfiguration<SolrServerProvider>
configuration, @Nonnull Strategy strategy) {
+ switch (strategy) {
+ case INDEXING:
+ synchronized (indexingServerRegistry) {
+ indexingServerRegistry.remove(configuration.toString());
+ }
+ break;
+ case SEARCHING:
+ synchronized (searchingServerRegistry) {
+ searchingServerRegistry.remove(configuration.toString());
+ }
+ break;
+ }
+ }
+
+ public enum Strategy {
INDEXING,
SEARCHING
}
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/SolrOakRepositoryStub.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/SolrOakRepositoryStub.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/SolrOakRepositoryStub.java
(original)
+++
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/SolrOakRepositoryStub.java
Tue Feb 24 16:09:05 2015
@@ -29,6 +29,7 @@ import org.apache.jackrabbit.oak.plugins
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.EmbeddedSolrServerConfiguration;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfigurationProvider;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.NodeStateSolrServersObserver;
import
org.apache.jackrabbit.oak.plugins.index.solr.index.SolrIndexEditorProvider;
import
org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndexProvider;
import
org.apache.jackrabbit.oak.plugins.index.solr.server.EmbeddedSolrServerProvider;
@@ -92,6 +93,7 @@ public class SolrOakRepositoryStub exten
OakSolrConfigurationProvider oakSolrConfigurationProvider = new
DefaultSolrConfigurationProvider(configuration);
jcr.with(new SolrIndexInitializer(false))
.with(AggregateIndexProvider.wrap(new
SolrQueryIndexProvider(solrServerProvider, oakSolrConfigurationProvider)))
+ .with(new NodeStateSolrServersObserver())
.with(new SolrIndexEditorProvider(solrServerProvider,
oakSolrConfigurationProvider));
}
}
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/SolrBaseTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/SolrBaseTest.java?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/SolrBaseTest.java
(original)
+++
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/SolrBaseTest.java
Tue Feb 24 16:09:05 2015
@@ -24,6 +24,7 @@ import org.apache.jackrabbit.oak.api.Con
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
+import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.nodestate.NodeStateSolrServersObserver;
import
org.apache.jackrabbit.oak.plugins.index.solr.index.SolrIndexEditorProvider;
import
org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndexProvider;
import org.apache.jackrabbit.oak.plugins.index.solr.util.SolrIndexInitializer;
@@ -61,8 +62,8 @@ public abstract class SolrBaseTest {
Oak oak = new Oak().with(new InitialContent())
.with(new OpenSecurityProvider())
.with(new SolrIndexInitializer(false)) // synchronous
- .with((QueryIndexProvider) new
SolrQueryIndexProvider(provider, provider))
- .with((Observer) new SolrQueryIndexProvider(provider,
provider))
+ .with(new SolrQueryIndexProvider(provider, provider))
+ .with(new NodeStateSolrServersObserver())
.with(new SolrIndexEditorProvider(provider, provider));
repository = oak
.createContentRepository();
Modified: jackrabbit/oak/trunk/oak-solr-osgi/pom.xml
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-osgi/pom.xml?rev=1662001&r1=1662000&r2=1662001&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-osgi/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-solr-osgi/pom.xml Tue Feb 24 16:09:05 2015
@@ -57,15 +57,15 @@
*
</Import-Package>
<Embed-Dependency>*;scope=runtime;inline=true</Embed-Dependency>
-
<Service-Component>OSGI-INF/org.apache.jackrabbit.oak.plugins.index.solr
-
.osgi.SolrQueryIndexProviderService.xml,OSGI-INF/org.apache.jackrabbit.
-
oak.plugins.index.solr.osgi.SolrServerProviderService.xml,OSGI-I
-
NF/org.apache.jackrabbit.oak.plugins.index.solr.osgi.SolrIndexEditorPro
-
viderService.xml,OSGI-INF/org.apache.jackrabbit.oak.plugins.index.solr.
-
osgi.EmbeddedSolrServerConfigurationProvider.xml,OSGI-INF/org.apache.ja
-
ckrabbit.oak.plugins.index.solr.osgi.RemoteSolrServerConfigurationProvi
-
der.xml,OSGI-INF/org.apache.jackrabbit.oak.plugins.index.solr.osgi.OakS
-
olrConfigurationProviderService.xml</Service-Component>
+ <Service-Component>
+
OSGI-INF/org.apache.jackrabbit.oak.plugins.index.solr.osgi.SolrQueryIndexProviderService.xml,
+
OSGI-INF/org.apache.jackrabbit.oak.plugins.index.solr.osgi.SolrServerProviderService.xml,
+
OSGI-INF/org.apache.jackrabbit.oak.plugins.index.solr.osgi.SolrIndexEditorProviderService.xml,
+
OSGI-INF/org.apache.jackrabbit.oak.plugins.index.solr.osgi.EmbeddedSolrServerConfigurationProvider.xml,
+
OSGI-INF/org.apache.jackrabbit.oak.plugins.index.solr.osgi.RemoteSolrServerConfigurationProvider.xml,
+
OSGI-INF/org.apache.jackrabbit.oak.plugins.index.solr.osgi.OakSolrConfigurationProviderService.xml,
+
OSGI-INF/org.apache.jackrabbit.oak.plugins.index.solr.osgi.NodeStateSolrServersObserverService.xml
+ </Service-Component>
</instructions>
</configuration>
</plugin>