Skip to content

Commit b4229e2

Browse files
OAK-11767 Use 'suffixesToSkip' for indexing with the index store (#2338)
1 parent aec6d3e commit b4229e2

File tree

2 files changed

+52
-0
lines changed
  • oak-run-commons/src

2 files changed

+52
-0
lines changed

oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/tree/TreeStore.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,15 @@
3535
import org.apache.jackrabbit.oak.index.indexer.document.NodeStateEntry;
3636
import org.apache.jackrabbit.oak.index.indexer.document.NodeStateEntry.NodeStateEntryBuilder;
3737
import org.apache.jackrabbit.oak.index.indexer.document.flatfile.NodeStateEntryReader;
38+
import org.apache.jackrabbit.oak.index.indexer.document.flatfile.pipelined.PipelinedStrategy;
3839
import org.apache.jackrabbit.oak.index.indexer.document.indexstore.IndexStore;
3940
import org.apache.jackrabbit.oak.index.indexer.document.tree.store.TreeSession;
4041
import org.apache.jackrabbit.oak.index.indexer.document.tree.store.Compression;
4142
import org.apache.jackrabbit.oak.index.indexer.document.tree.store.Store;
4243
import org.apache.jackrabbit.oak.index.indexer.document.tree.store.StoreBuilder;
4344
import org.apache.jackrabbit.oak.index.indexer.document.tree.store.utils.FilePacker;
4445
import org.apache.jackrabbit.oak.index.indexer.document.tree.store.utils.SieveCache;
46+
import org.apache.jackrabbit.oak.plugins.index.ConfigHelper;
4547
import org.apache.jackrabbit.oak.plugins.index.search.IndexDefinition;
4648
import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
4749
import org.apache.jackrabbit.oak.spi.filter.PathFilter;
@@ -87,6 +89,7 @@ public class TreeStore implements ParallelIndexStore {
8789
private long iterationCount;
8890
private PathIteratorFilter filter = new PathIteratorFilter();
8991
private ArrayList<String> splitPoints;
92+
private final List<String> suffixesToSkip = ConfigHelper.getSystemPropertyAsStringList(PipelinedStrategy.OAK_INDEXER_PIPELINED_NODE_DOCUMENT_FILTER_SUFFIXES_TO_SKIP, "", ';');
9093

9194
// the prefetcher, if any. we keep a references so we can shut it down on close
9295
private Prefetcher prefetcher;
@@ -120,6 +123,7 @@ public TreeStore(String name, File fileOrDirectory, NodeStateEntryReader entryRe
120123
this.session = new TreeSession(store);
121124
// we don not want to merge too early during the download
122125
session.setMaxRoots(1000);
126+
LOG.info("Suffixed to skip: " + suffixesToSkip);
123127
}
124128

125129
public void init() {
@@ -153,6 +157,15 @@ public Iterator<String> iteratorOverPaths() {
153157
return iteratorOverPaths(null, null);
154158
}
155159

160+
private boolean canSkip(String path) {
161+
for (String suffix : suffixesToSkip) {
162+
if (path.endsWith(suffix)) {
163+
return true;
164+
}
165+
}
166+
return false;
167+
}
168+
156169
private Iterator<String> iteratorOverPaths(String start, String end) {
157170
startPrefetch();
158171
final Iterator<Entry<String, String>> firstIterator = session.iterator(start);
@@ -178,6 +191,9 @@ private void fetch() {
178191
if (value.isEmpty()) {
179192
continue;
180193
}
194+
if (canSkip(key)) {
195+
continue;
196+
}
181197
if (!filter.includes(key)) {
182198
// if the path is not, see if there is a next included path
183199
String next = filter.nextIncludedPath(key);

oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/tree/TreeStoreTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030

3131
import org.apache.jackrabbit.oak.InitialContent;
3232
import org.apache.jackrabbit.oak.OakInitializer;
33+
import org.apache.jackrabbit.oak.commons.junit.TemporarySystemProperty;
34+
import org.apache.jackrabbit.oak.index.indexer.document.flatfile.pipelined.PipelinedStrategy;
3335
import org.apache.jackrabbit.oak.index.indexer.document.tree.store.TreeSession;
3436
import org.apache.jackrabbit.oak.index.indexer.document.tree.store.utils.FilePacker;
3537
import org.apache.jackrabbit.oak.plugins.index.search.IndexDefinition;
@@ -43,6 +45,7 @@
4345
import org.apache.jackrabbit.oak.spi.commit.EditorHook;
4446
import org.apache.jackrabbit.oak.spi.state.NodeStore;
4547
import org.junit.ClassRule;
48+
import org.junit.Rule;
4649
import org.junit.Test;
4750
import org.junit.rules.TemporaryFolder;
4851
import org.mockito.Mockito;
@@ -52,6 +55,9 @@ public class TreeStoreTest {
5255
@ClassRule
5356
public static TemporaryFolder temporaryFolder = new TemporaryFolder(new File("target"));
5457

58+
@Rule
59+
public TemporarySystemProperty temporarySystemProperty = new TemporarySystemProperty();
60+
5561
@Test
5662
public void convertPathTest() {
5763
assertEquals("\t", TreeStore.toChildNodeEntry("/"));
@@ -203,6 +209,36 @@ public void includedPathTest() throws IOException {
203209
}
204210
}
205211

212+
@Test
213+
public void skipSuffixTest() throws IOException {
214+
File testFolder = temporaryFolder.newFolder();
215+
// thanks to the TemporarySystemProperty rule, this is reset
216+
// at the end of the test
217+
System.setProperty(
218+
PipelinedStrategy.OAK_INDEXER_PIPELINED_NODE_DOCUMENT_FILTER_SUFFIXES_TO_SKIP,
219+
"/unimportant");
220+
TreeStore store = new TreeStore("test", testFolder, null, 1);
221+
try {
222+
store.getSession().init();
223+
store.putNode("/", "{}");
224+
store.putNode("/content", "{}");
225+
store.putNode("/content/abc", "{}");
226+
store.putNode("/content/abc/unimportant", "{}");
227+
store.putNode("/content/def", "{}");
228+
store.putNode("/jcr:system", "{}");
229+
230+
Set<IndexDefinition> defs = inMemoryIndexDefinitions("/content", "/var", "/tmp");
231+
store.setIndexDefinitions(defs);
232+
233+
Iterator<String> it = store.iteratorOverPaths();
234+
assertEquals("/content", it.next());
235+
assertEquals("/content/abc", it.next());
236+
assertEquals("/content/def", it.next());
237+
assertFalse(it.hasNext());
238+
} finally {
239+
store.close();
240+
}
241+
}
206242
private static Set<IndexDefinition> inMemoryIndexDefinitions(String... includedPaths) {
207243
NodeStore store = new MemoryNodeStore();
208244
EditorHook hook = new EditorHook(

0 commit comments

Comments
 (0)