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());


Reply via email to