Author: chetanm
Date: Wed Sep 20 12:31:54 2017
New Revision: 1809015
URL: http://svn.apache.org/viewvc?rev=1809015&view=rev
Log:
OAK-6684 - IndexPathService should work with Oak 1.0 setups
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImpl.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImplTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImpl.java?rev=1809015&r1=1809014&r2=1809015&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImpl.java
Wed Sep 20 12:31:54 2017
@@ -21,12 +21,11 @@ package org.apache.jackrabbit.oak.plugin
import java.util.Iterator;
-import com.google.common.base.Function;
import com.google.common.collect.Iterables;
-import com.google.common.collect.Iterators;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.index.nodetype.NodeTypeIndexProvider;
import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider;
import org.apache.jackrabbit.oak.query.QueryEngineSettings;
@@ -38,17 +37,25 @@ import org.apache.jackrabbit.oak.spi.mou
import org.apache.jackrabbit.oak.spi.mount.Mounts;
import org.apache.jackrabbit.oak.spi.query.IndexRow;
import org.apache.jackrabbit.oak.spi.query.QueryIndex;
+import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.transform;
+import static com.google.common.collect.Iterators.transform;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
import static
org.apache.jackrabbit.oak.plugins.index.IndexConstants.DECLARING_NODE_TYPES;
import static
org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NODE_TYPE;
@Component
@Service
public class IndexPathServiceImpl implements IndexPathService {
+ private final Logger log = LoggerFactory.getLogger(getClass());
private final QueryEngineSettings settings = new QueryEngineSettings();
@@ -82,20 +89,19 @@ public class IndexPathServiceImpl implem
//Check if oak:QueryIndexDefinition is indexed as part of nodetype
index
boolean indxDefnTypeIndexed =
Iterables.contains(nodeType.getNames(DECLARING_NODE_TYPES),
INDEX_DEFINITIONS_NODE_TYPE);
- checkState(indxDefnTypeIndexed, INDEX_DEFINITIONS_NODE_TYPE + " is not
found to be indexed as part of " +
- "nodetype index. Cannot determine the paths of all indexes");
- return new Iterable<String>() {
- @Override
- public Iterator<String> iterator() {
- Iterator<IndexRow> itr =
getIndex().query(createFilter(INDEX_DEFINITIONS_NODE_TYPE),
nodeStore.getRoot());
- return Iterators.transform(itr, new Function<IndexRow,
String>() {
- @Override
- public String apply(IndexRow input) {
- return input.getPath();
- }
- });
- }
+ if (!indxDefnTypeIndexed) {
+ log.warn("{} is not found to be indexed as part of nodetype index.
Non root indexes would " +
+ "not be listed", INDEX_DEFINITIONS_NODE_TYPE);
+ NodeState oakIndex = nodeStore.getRoot().getChildNode("oak:index");
+ return transform(filter(oakIndex.getChildNodeEntries(),
+ cne ->
INDEX_DEFINITIONS_NODE_TYPE.equals(cne.getNodeState().getName(JCR_PRIMARYTYPE))),
+ cne -> PathUtils.concat("/oak:index", cne.getName()));
+ }
+
+ return () -> {
+ Iterator<IndexRow> itr =
getIndex().query(createFilter(INDEX_DEFINITIONS_NODE_TYPE),
nodeStore.getRoot());
+ return transform(itr, input -> input.getPath());
};
}
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImplTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImplTest.java?rev=1809015&r1=1809014&r2=1809015&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImplTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImplTest.java
Wed Sep 20 12:31:54 2017
@@ -59,9 +59,10 @@ public class IndexPathServiceImplTest ex
.createContentRepository();
}
- @Test(expected = IllegalStateException.class)
- public void errorIfQueryDefinitionsNotIndexed() throws Exception{
- indexPathService.getIndexPaths();
+ @Test
+ public void noErrorIfQueryDefinitionsNotIndexed() throws Exception{
+ Set<String> paths = Sets.newHashSet(indexPathService.getIndexPaths());
+ assertThat(paths, hasItem("/oak:index/uuid"));
}
@Test(expected = IllegalStateException.class)