You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by fo...@apache.org on 2020/08/20 14:57:25 UTC
svn commit: r1881021 - in /jackrabbit/oak/trunk/oak-search-elastic/src:
main/java/org/apache/jackrabbit/oak/plugins/index/elastic/
test/java/org/apache/jackrabbit/oak/plugins/index/elastic/
Author: fortino
Date: Thu Aug 20 14:57:25 2020
New Revision: 1881021
URL: http://svn.apache.org/viewvc?rev=1881021&view=rev
Log:
OAK-9169-2 - check elastic connection before activating service provider (patch by Amrit Verma)
Modified:
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticConnection.java
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java
Modified: jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticConnection.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticConnection.java?rev=1881021&r1=1881020&r2=1881021&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticConnection.java (original)
+++ jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticConnection.java Thu Aug 20 14:57:25 2020
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugin
import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.message.BasicHeader;
+import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
@@ -119,6 +120,15 @@ public class ElasticConnection implement
return indexPrefix;
}
+ /**
+ * Checks if elastic server is available for connection.
+ * @return true if available, false otherwise.
+ * @throws IOException if some connection exception occurs.
+ */
+ public boolean isAvailable() throws IOException {
+ return this.getClient().ping(RequestOptions.DEFAULT);
+ }
+
@Override
public synchronized void close() throws IOException {
if (client != null) {
Modified: jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java?rev=1881021&r1=1881020&r2=1881021&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java (original)
+++ jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java Thu Aug 20 14:57:25 2020
@@ -36,6 +36,7 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
@@ -48,6 +49,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Hashtable;
@@ -57,17 +59,17 @@ import static org.apache.commons.io.File
import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.scheduleWithFixedDelay;
-@Component
+@Component(configurationPolicy = ConfigurationPolicy.REQUIRE)
@Designate(ocd = ElasticIndexProviderService.Config.class)
public class ElasticIndexProviderService {
- static final String PROP_INDEX_PREFIX = "indexPrefix";
- private static final String PROP_ELASTIC_SCHEME = ElasticConnection.SCHEME_PROP;
- private static final String PROP_ELASTIC_HOST = ElasticConnection.HOST_PROP;
- private static final String PROP_ELASTIC_PORT = ElasticConnection.PORT_PROP;
- private static final String PROP_ELASTIC_API_KEY_ID = ElasticConnection.API_KEY_ID_PROP;
- private static final String PROP_ELASTIC_API_KEY_SECRET = ElasticConnection.API_KEY_SECRET_PROP;
- private static final String PROP_LOCAL_TEXT_EXTRACTION_DIR = "localTextExtractionDir";
+ protected static final String PROP_INDEX_PREFIX = "indexPrefix";
+ protected static final String PROP_ELASTIC_SCHEME = ElasticConnection.SCHEME_PROP;
+ protected static final String PROP_ELASTIC_HOST = ElasticConnection.HOST_PROP;
+ protected static final String PROP_ELASTIC_PORT = ElasticConnection.PORT_PROP;
+ protected static final String PROP_ELASTIC_API_KEY_ID = ElasticConnection.API_KEY_ID_PROP;
+ protected static final String PROP_ELASTIC_API_KEY_SECRET = ElasticConnection.API_KEY_SECRET_PROP;
+ protected static final String PROP_LOCAL_TEXT_EXTRACTION_DIR = "localTextExtractionDir";
@ObjectClassDefinition(name = "ElasticIndexProviderService", description = "Apache Jackrabbit Oak ElasticIndexProvider")
public @interface Config {
@@ -145,7 +147,7 @@ public class ElasticIndexProviderService
private String indexPrefix;
@Activate
- private void activate(BundleContext bundleContext, Config config) {
+ private void activate(BundleContext bundleContext, Config config) throws IOException {
whiteboard = new OsgiWhiteboard(bundleContext);
//initializeTextExtractionDir(bundleContext, config);
@@ -177,7 +179,11 @@ public class ElasticIndexProviderService
}
}
- private void registerIndexCleaner(Config contextConfig) {
+ private void registerIndexCleaner(Config contextConfig) throws IOException {
+ boolean reachable = elasticConnection.isAvailable();
+ if (!reachable) {
+ throw new IllegalArgumentException("Elastic server is not available - " + elasticConnection.toString());
+ }
ElasticIndexCleaner task = new ElasticIndexCleaner(elasticConnection, nodeStore, contextConfig.remoteIndexDeletionThreshold());
oakRegs.add(scheduleWithFixedDelay(whiteboard, task, contextConfig.remoteIndexCleanupFrequency()));
}
Modified: jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java?rev=1881021&r1=1881020&r2=1881021&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java (original)
+++ jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java Thu Aug 20 14:57:25 2020
@@ -29,6 +29,7 @@ import org.apache.jackrabbit.oak.stats.S
import org.apache.sling.testing.mock.osgi.MockOsgi;
import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.junit.Before;
+import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -37,17 +38,24 @@ import java.io.File;
import java.util.HashMap;
import java.util.Map;
+import static org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_HOST;
+import static org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_PORT;
import static org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_INDEX_PREFIX;
import static org.junit.Assert.assertNotNull;
public class ElasticIndexProviderServiceTest {
+ private static final String elasticConnectionString = System.getProperty("elasticConnectionString");
+
@Rule
public final TemporaryFolder folder = new TemporaryFolder(new File("target"));
@Rule
public final OsgiContext context = new OsgiContext();
+ @ClassRule
+ public static ElasticConnectionRule elasticRule = new ElasticConnectionRule(elasticConnectionString);
+
private final ElasticIndexProviderService service = new ElasticIndexProviderService();
private Whiteboard wb;
@@ -68,6 +76,8 @@ public class ElasticIndexProviderService
Map<String, Object> props = new HashMap<>();
props.put("localTextExtractionDir", folder.newFolder("localTextExtractionDir").getAbsolutePath());
props.put(PROP_INDEX_PREFIX, "elastic");
+ props.put(PROP_ELASTIC_HOST, "localhost");
+ props.put(PROP_ELASTIC_PORT, elasticRule.elastic.getFirstMappedPort());
MockOsgi.activate(service, context.bundleContext(), props);
assertNotNull(context.getService(QueryIndexProvider.class));