Author: chetanm
Date: Mon Jan 16 08:33:28 2017
New Revision: 1778988

URL: http://svn.apache.org/viewvc?rev=1778988&view=rev
Log:
OAK-5230 - AsyncIndexService should ensure that async lanes should confirm to 
naming convention

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
    
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/OakTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.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/Oak.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1778988&r1=1778987&r2=1778988&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java 
(original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java 
Mon Jan 16 08:33:28 2017
@@ -603,7 +603,7 @@ public class Oak {
             asyncTasks = new HashMap<String, Long>();
         }
         checkState(delayInSeconds > 0, "delayInSeconds value must be > 0");
-        asyncTasks.put(checkNotNull(name), delayInSeconds);
+        asyncTasks.put(AsyncIndexUpdate.checkValidName(name), delayInSeconds);
         return this;
     }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java?rev=1778988&r1=1778987&r2=1778988&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
 Mon Jan 16 08:33:28 2017
@@ -18,6 +18,7 @@
  */
 package org.apache.jackrabbit.oak.plugins.index;
 
+import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Throwables.getStackTraceAsString;
 import static com.google.common.collect.Sets.newHashSet;
@@ -205,7 +206,7 @@ public class AsyncIndexUpdate implements
 
     public AsyncIndexUpdate(@Nonnull String name, @Nonnull NodeStore store,
                             @Nonnull IndexEditorProvider provider, 
StatisticsProvider statsProvider, boolean switchOnSync) {
-        this.name = checkNotNull(name);
+        this.name = checkValidName(name);
         this.lastIndexedTo = name + "-LastIndexedTo";
         this.store = checkNotNull(store);
         this.provider = checkNotNull(provider);
@@ -219,6 +220,16 @@ public class AsyncIndexUpdate implements
         this(name, store, provider, false);
     }
 
+    public static String checkValidName(String asyncName){
+        checkNotNull(asyncName, "async name should not be null");
+        if (IndexConstants.ASYNC_REINDEX_VALUE.equals(asyncName)){
+            return asyncName;
+        }
+        checkArgument(asyncName.endsWith("async"), "async name [%s] does not 
confirm to " +
+                "naming pattern of ending with 'async'", asyncName);
+        return asyncName;
+    }
+
     /**
      * Index update callback that tries to raise the async status flag when
      * the first index change is detected.

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=1778988&r1=1778987&r2=1778988&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
 Mon Jan 16 08:33:28 2017
@@ -228,7 +228,7 @@ public class AsyncIndexerService {
         final long timeIntervalInSecs;
 
         private AsyncConfig(String name, long timeIntervalInSecs) {
-            this.name = name;
+            this.name = AsyncIndexUpdate.checkValidName(name);
             this.timeIntervalInSecs = timeIntervalInSecs;
         }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java?rev=1778988&r1=1778987&r2=1778988&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
 Mon Jan 16 08:33:28 2017
@@ -165,7 +165,7 @@ public class OakTest {
         Oak oak = new Oak()
                 .with(new OpenSecurityProvider())
                 .with(wb)
-                .withAsyncIndexing("foo", 5);
+                .withAsyncIndexing("foo-async", 5);
         ContentRepository repo = oak.createContentRepository();
 
         ((Closeable)repo).close();

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java?rev=1778988&r1=1778987&r2=1778988&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
 Mon Jan 16 08:33:28 2017
@@ -791,16 +791,17 @@ public class AsyncIndexUpdateTest {
         IndexEditorProvider provider = new PropertyIndexEditorProvider();
 
         NodeBuilder builder = store.getRoot().builder();
+        String missingAsync = "missing-async";
         createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME),
                 "rootIndex", true, false, ImmutableSet.of("foo"), null)
-                .setProperty(ASYNC_PROPERTY_NAME, "asyncMissing");
+                .setProperty(ASYNC_PROPERTY_NAME, missingAsync);
 
         builder.child("testRoot").setProperty("foo", "abc");
 
         // merge it back in
         store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
-        AsyncIndexUpdate async = new AsyncIndexUpdate("asyncMissing", store,
+        AsyncIndexUpdate async = new AsyncIndexUpdate(missingAsync, store,
                 provider);
         //first run, creates a checkpoint and a ref to it as the last indexed 
state
         async.run();
@@ -811,12 +812,12 @@ public class AsyncIndexUpdateTest {
         assertEquals(
                 firstCp,
                 store.getRoot().getChildNode(ASYNC)
-                        .getString("asyncMissing"));
+                        .getString(missingAsync));
 
         // second run, simulate an index going away
         provider = CompositeIndexEditorProvider
                 .compose(new ArrayList<IndexEditorProvider>());
-        async = new AsyncIndexUpdate("asyncMissing", store, provider);
+        async = new AsyncIndexUpdate(missingAsync, store, provider);
         async.run();
         assertTrue(async.isFailing());
         // don't set reindex=true but skip the update
@@ -833,7 +834,7 @@ public class AsyncIndexUpdateTest {
         assertEquals(
                 firstCp,
                 store.getRoot().getChildNode(ASYNC)
-                        .getString("asyncMissing"));
+                        .getString(missingAsync));
     }
 
     @Test
@@ -842,14 +843,15 @@ public class AsyncIndexUpdateTest {
         IndexEditorProvider provider = new PropertyIndexEditorProvider();
 
         NodeBuilder builder = store.getRoot().builder();
+        String missingAsyncName = "missing-async";
         
createIndexDefinition(builder.child("subNodeIndex").child(INDEX_DEFINITIONS_NAME),
                 "rootIndex2", true, false, ImmutableSet.of("foo"), null)
-                .setProperty(ASYNC_PROPERTY_NAME, "asyncMissing");
+                .setProperty(ASYNC_PROPERTY_NAME, missingAsyncName);
 
         builder.child("subNodeIndex").child("testRoot").setProperty("foo", 
"abc");
         store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
-        AsyncIndexUpdate async = new AsyncIndexUpdate("asyncMissing", store,  
provider);
+        AsyncIndexUpdate async = new AsyncIndexUpdate(missingAsyncName, store, 
 provider);
         //first run, creates a checkpoint and a ref to it as the last indexed 
state
         async.run();
         assertFalse(async.isFailing());
@@ -857,7 +859,7 @@ public class AsyncIndexUpdateTest {
         assertTrue("Expecting one checkpoint",
                 store.listCheckpoints().size() == 1);
         String firstCp = store.listCheckpoints().iterator().next();
-        assertEquals(firstCp, 
store.getRoot().getChildNode(ASYNC).getString("asyncMissing"));
+        assertEquals(firstCp, 
store.getRoot().getChildNode(ASYNC).getString(missingAsyncName));
 
         builder = store.getRoot().builder();
         builder.child("subNodeIndex").child("testRoot2").setProperty("foo", 
"abc");
@@ -865,7 +867,7 @@ public class AsyncIndexUpdateTest {
 
         // second run, simulate an index going away
         provider = CompositeIndexEditorProvider.compose(new 
ArrayList<IndexEditorProvider>());
-        async = new AsyncIndexUpdate("asyncMissing", store, provider);
+        async = new AsyncIndexUpdate(missingAsyncName, store, provider);
         async.run();
         assertTrue(async.isFailing());
         // don't set reindex=true but skip the update
@@ -878,7 +880,7 @@ public class AsyncIndexUpdateTest {
         assertTrue("Expecting one checkpoint",store.listCheckpoints().size() 
== 1);
         String secondCp = store.listCheckpoints().iterator().next();
         assertTrue("Store should not create a new checkpoint",  
secondCp.equals(firstCp));
-        assertEquals(firstCp, 
store.getRoot().getChildNode(ASYNC).getString("asyncMissing"));
+        assertEquals(firstCp, 
store.getRoot().getChildNode(ASYNC).getString(missingAsyncName));
     }
 
     private static class FaultyIndexEditorProvder implements
@@ -1750,6 +1752,27 @@ public class AsyncIndexUpdateTest {
         
assertFalse(async.getCorruptIndexHandler().getFailingIndexData("async").containsKey("/oak:index/barIndex"));
     }
 
+    @Test
+    public void validName() throws Exception{
+        assertNotNull(AsyncIndexUpdate.checkValidName("async"));
+        assertNotNull(AsyncIndexUpdate.checkValidName("foo-async"));
+        
assertNotNull(AsyncIndexUpdate.checkValidName(IndexConstants.ASYNC_REINDEX_VALUE));
+
+        try{
+            AsyncIndexUpdate.checkValidName(null);
+            fail();
+        } catch (Exception ignore){
+
+        }
+
+        try{
+            AsyncIndexUpdate.checkValidName("foo");
+            fail();
+        } catch (Exception ignore){
+
+        }
+    }
+
     private static class TestIndexEditorProvider extends 
PropertyIndexEditorProvider {
         private String indexPathToFail;
         @Override

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=1778988&r1=1778987&r2=1778988&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
 Mon Jan 16 08:33:28 2017
@@ -139,9 +139,9 @@ public class AsyncIndexerServiceTest {
         assertEquals("async", configs.get(0).name);
         assertEquals(15, configs.get(0).timeIntervalInSecs);
 
-        configs = AsyncIndexerService.getAsyncConfig(new String[]{"async:15", 
"foo:23"});
+        configs = AsyncIndexerService.getAsyncConfig(new String[]{"async:15", 
"foo-async:23"});
         assertEquals(2, configs.size());
-        assertEquals("foo", configs.get(1).name);
+        assertEquals("foo-async", configs.get(1).name);
         assertEquals(23, configs.get(1).timeIntervalInSecs);
     }
 


Reply via email to