Author: chetanm
Date: Tue Nov 29 05:58:44 2016
New Revision: 1771844
URL: http://svn.apache.org/viewvc?rev=1771844&view=rev
Log:
OAK-5177 - Non default MissingIndexProviderStrategy is not being passed to
child editor
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java?rev=1771844&r1=1771843&r2=1771844&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
Tue Nov 29 05:58:44 2016
@@ -122,7 +122,6 @@ public class IndexUpdate implements Edit
*/
private final Map<String, Editor> reindex = new HashMap<String, Editor>();
- private MissingIndexProviderStrategy missingProvider = new
MissingIndexProviderStrategy();
public IndexUpdate(
IndexEditorProvider provider, String async,
@@ -235,7 +234,7 @@ public class IndexUpdate implements Edit
Editor editor = rootState.provider.getIndexEditor(type,
definition, rootState.root,
rootState.newCallback(indexPath, shouldReindex));
if (editor == null) {
- missingProvider.onMissingIndex(type, definition,
indexPath);
+ rootState.missingProvider.onMissingIndex(type, definition,
indexPath);
} else if (shouldReindex) {
if (definition.getBoolean(REINDEX_ASYNC_PROPERTY_NAME)
&& definition.getString(ASYNC_PROPERTY_NAME) ==
null) {
@@ -464,7 +463,7 @@ public class IndexUpdate implements Edit
public IndexUpdate withMissingProviderStrategy(
MissingIndexProviderStrategy missingProvider) {
- this.missingProvider = missingProvider;
+ rootState.setMissingProvider(missingProvider);
return this;
}
@@ -482,6 +481,7 @@ public class IndexUpdate implements Edit
final CorruptIndexHandler corruptIndexHandler;
private int changedNodeCount;
private int changedPropertyCount;
+ private MissingIndexProviderStrategy missingProvider = new
MissingIndexProviderStrategy();
private IndexUpdateRootState(IndexEditorProvider provider, String
async, NodeState root,
IndexUpdateCallback updateCallback,
CommitInfo commitInfo, CorruptIndexHandler corruptIndexHandler) {
@@ -558,6 +558,10 @@ public class IndexUpdate implements Edit
changedNodeCount, changedPropertyCount);
}
+ public void setMissingProvider(MissingIndexProviderStrategy
missingProvider) {
+ this.missingProvider = missingProvider;
+ }
+
private class CountingCallback implements ContextAwareCallback,
IndexingContext {
final String indexPath;
final boolean reindex;
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=1771844&r1=1771843&r2=1771844&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
Tue Nov 29 05:58:44 2016
@@ -85,6 +85,7 @@ import org.apache.jackrabbit.oak.spi.que
import org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.spi.state.ProxyNodeStore;
import org.apache.jackrabbit.oak.stats.Clock;
@@ -835,6 +836,51 @@ public class AsyncIndexUpdateTest {
.getString("asyncMissing"));
}
+ @Test
+ public void testReindexMissingProvider_NonRoot() throws Exception {
+ MemoryNodeStore store = new MemoryNodeStore();
+ IndexEditorProvider provider = new PropertyIndexEditorProvider();
+
+ NodeBuilder builder = store.getRoot().builder();
+
createIndexDefinition(builder.child("subNodeIndex").child(INDEX_DEFINITIONS_NAME),
+ "rootIndex2", true, false, ImmutableSet.of("foo"), null)
+ .setProperty(ASYNC_PROPERTY_NAME, "asyncMissing");
+
+ builder.child("subNodeIndex").child("testRoot").setProperty("foo",
"abc");
+ store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+
+ AsyncIndexUpdate async = new AsyncIndexUpdate("asyncMissing", store,
provider);
+ //first run, creates a checkpoint and a ref to it as the last indexed
state
+ async.run();
+ assertFalse(async.isFailing());
+
+ assertTrue("Expecting one checkpoint",
+ store.listCheckpoints().size() == 1);
+ String firstCp = store.listCheckpoints().iterator().next();
+ assertEquals(firstCp,
store.getRoot().getChildNode(ASYNC).getString("asyncMissing"));
+
+ builder = store.getRoot().builder();
+ builder.child("subNodeIndex").child("testRoot2").setProperty("foo",
"abc");
+ store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+
+ // second run, simulate an index going away
+ provider = CompositeIndexEditorProvider.compose(new
ArrayList<IndexEditorProvider>());
+ async = new AsyncIndexUpdate("asyncMissing", store, provider);
+ async.run();
+ assertTrue(async.isFailing());
+ // don't set reindex=true but skip the update
+ NodeState rootIndex2 = NodeStateUtils.getNode(store.getRoot(),
"/subNodeIndex/oak:index/rootIndex2");
+ assertTrue(rootIndex2.exists());
+
+ PropertyState reindex2 = rootIndex2.getProperty(REINDEX_PROPERTY_NAME);
+ assertTrue(reindex2 == null || !reindex2.getValue(Type.BOOLEAN));
+
+ 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"));
+ }
+
private static class FaultyIndexEditorProvder implements
IndexEditorProvider {