Author: chetanm
Date: Tue Nov 15 07:49:11 2016
New Revision: 1769747
URL: http://svn.apache.org/viewvc?rev=1769747&view=rev
Log:
OAK-5074 - Configure Async Indexer via OSGi
Make lease timeout configurable via OSGi
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerServiceTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java?rev=1769747&r1=1769746&r2=1769747&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
Tue Nov 15 07:49:11 2016
@@ -22,6 +22,7 @@ package org.apache.jackrabbit.oak.plugin
import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
import com.google.common.collect.Lists;
import org.apache.felix.scr.annotations.Activate;
@@ -57,6 +58,16 @@ public class AsyncIndexerService {
description = "Async indexer configs in the form of
<name>:<interval in secs> e.g. \"async:5\""
)
private static final String PROP_ASYNC_CONFIG = "asyncConfigs";
+
+ private static final int PROP_LEASE_TIMEOUT_DEFAULT = 15;
+ @Property(
+ intValue = PROP_LEASE_TIMEOUT_DEFAULT,
+ label = "Lease time out",
+ description = "Lease timeout in minutes. AsyncIndexer would wait
for this timeout period before breaking " +
+ "async indexer lease"
+ )
+ private static final String PROP_LEASE_TIME_OUT = "leaseTimeOutMinutes";
+
private static final char CONFIG_SEP = ':';
private final Logger log = LoggerFactory.getLogger(getClass());
private final WhiteboardIndexEditorProvider indexEditorProvider = new
WhiteboardIndexEditorProvider();
@@ -72,12 +83,15 @@ public class AsyncIndexerService {
indexRegistration = new IndexMBeanRegistration(whiteboard);
indexEditorProvider.start(whiteboard);
+ long leaseTimeOutMin =
PropertiesUtil.toInteger(config.get(PROP_LEASE_TIME_OUT),
PROP_LEASE_TIMEOUT_DEFAULT);
+
for (AsyncConfig c : asyncIndexerConfig) {
- //TODO Pass name as part of scheduled job service property
AsyncIndexUpdate task = new AsyncIndexUpdate(c.name, nodeStore,
indexEditorProvider);
+ task.setLeaseTimeOut(TimeUnit.MINUTES.toMillis(leaseTimeOutMin));
indexRegistration.registerAsyncIndexer(task, c.timeIntervalInSecs);
}
log.info("Configured async indexers {} ", asyncIndexerConfig);
+ log.info("Lease time: {} mins", leaseTimeOutMin);
}
@Deactivate
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerServiceTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerServiceTest.java?rev=1769747&r1=1769746&r2=1769747&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerServiceTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerServiceTest.java
Tue Nov 15 07:49:11 2016
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.plugin
import java.util.List;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
import com.google.common.collect.ImmutableMap;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexerService.AsyncConfig;
@@ -53,12 +54,28 @@ public class AsyncIndexerServiceTest {
);
MockOsgi.activate(service, context.bundleContext(), config);
assertNotNull(context.getService(Runnable.class));
+ assertEquals(TimeUnit.MINUTES.toMillis(15),
getIndexUpdate("async").getLeaseTimeOut());
MockOsgi.deactivate(service);
assertNull(context.getService(Runnable.class));
}
@Test
+ public void leaseTimeout() throws Exception{
+ Map<String,Object> config = ImmutableMap.<String, Object>of(
+ "asyncConfigs", new String[] {"async:5"},
+ "leaseTimeOutMinutes" , "20"
+ );
+ MockOsgi.activate(service, context.bundleContext(), config);
+ AsyncIndexUpdate indexUpdate = getIndexUpdate("async");
+ assertEquals(TimeUnit.MINUTES.toMillis(20),
indexUpdate.getLeaseTimeOut());
+ }
+
+ private AsyncIndexUpdate getIndexUpdate(String name) {
+ return (AsyncIndexUpdate) context.getServices(Runnable.class,
"(oak.async="+name+")")[0];
+ }
+
+ @Test
public void configParsing() throws Exception{
List<AsyncConfig> configs = AsyncIndexerService.getAsyncConfig(new
String[]{"async:15"});
assertEquals(1, configs.size());