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