This is an automated email from the ASF dual-hosted git repository.
nfsantos pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push:
new 0550fd63f3 OAK-11538 - Cleanups and small performance improvements to
CompositeEditor and CompositeIndexEditorProvider
0550fd63f3 is described below
commit 0550fd63f3e9afb14d13c642eb4d04502f2b8182
Author: Nuno Santos <[email protected]>
AuthorDate: Mon Mar 3 16:42:43 2025 +0100
OAK-11538 - Cleanups and small performance improvements to CompositeEditor
and CompositeIndexEditorProvider
---
.../index/CompositeIndexEditorProvider.java | 38 +++++++++++++-------
.../jackrabbit/oak/plugins/index/IndexUpdate.java | 41 ++++++++++------------
.../oak/plugins/index/importer/NodeStoreUtils.java | 6 ++--
.../oak/plugins/index/AsyncIndexUpdateTest.java | 5 ++-
.../lucene/AsyncIndexStatsUpdateCallbackTest.java | 29 +++++++--------
.../lucene/AsyncIndexUpdateCorruptMarkingTest.java | 7 ++--
.../lucene/IndexlaneRepositoryTraversalTest.java | 14 ++++----
.../oak/plugins/index/lucene/InvalidIndexTest.java | 6 ++--
.../index/lucene/LuceneTestRepositoryBuilder.java | 11 +++---
.../oak/indexversion/PurgeOldIndexVersion.java | 25 +++++++------
.../oak/index/ElasticOutOfBandIndexer.java | 4 +--
.../jackrabbit/oak/index/OutOfBandIndexer.java | 3 +-
.../oak/index/async/AsyncIndexerLucene.java | 4 +--
.../index/elastic/ElasticAbstractQueryTest.java | 6 ++--
.../elastic/ElasticTestRepositoryBuilder.java | 8 ++---
.../jackrabbit/oak/spi/commit/CompositeEditor.java | 41 ++++++++++------------
16 files changed, 119 insertions(+), 129 deletions(-)
diff --git
a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java
index c9127014a5..b12d8ffc42 100644
---
a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java
+++
b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java
@@ -16,12 +16,6 @@
*/
package org.apache.jackrabbit.oak.plugins.index;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.spi.commit.CompositeEditor;
import org.apache.jackrabbit.oak.spi.commit.Editor;
@@ -29,19 +23,37 @@ import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.jetbrains.annotations.NotNull;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
/**
* Aggregation of a list of editor providers into a single provider.
*/
public class CompositeIndexEditorProvider implements IndexEditorProvider {
@NotNull
- public static IndexEditorProvider compose(@NotNull
Collection<IndexEditorProvider> providers) {
- if (providers.isEmpty()) {
- return (type, builder, root, callback) -> null;
- } else if (providers.size() == 1) {
- return providers.iterator().next();
- } else {
- return new CompositeIndexEditorProvider(List.copyOf(providers));
+ public static IndexEditorProvider compose(IndexEditorProvider...
providers) {
+ switch (providers.length) {
+ case 0:
+ return (type, builder, root, callback) -> null;
+ case 1:
+ return providers[0];
+ default:
+ return new CompositeIndexEditorProvider(providers);
+ }
+ }
+
+ @NotNull
+ public static IndexEditorProvider compose(@NotNull
List<IndexEditorProvider> providers) {
+ switch (providers.size()) {
+ case 0:
+ return (type, builder, root, callback) -> null;
+ case 1:
+ return providers.iterator().next();
+ default:
+ return new CompositeIndexEditorProvider(providers);
}
}
diff --git
a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
index b853cf9da3..d56a4ad5ba 100644
---
a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
+++
b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
@@ -39,8 +39,6 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
-import org.apache.jackrabbit.guava.common.collect.Iterables;
-
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
@@ -184,7 +182,7 @@ public class IndexUpdate implements Editor, PathSource {
// no-op when reindex is empty
CommitFailedException exception = EditorDiff.process(
-
VisibleEditor.wrap(wrapProgress(CompositeEditor.compose(reindex.values()))),
+
VisibleEditor.wrap(wrapProgress(CompositeEditor.compose(List.copyOf(reindex.values())))),
MISSING_NODE,
after);
rootState.progressReporter.reindexingTraversalEnd();
@@ -197,31 +195,31 @@ public class IndexUpdate implements Editor, PathSource {
}
}
- public boolean isReindexingPerformed(){
+ public boolean isReindexingPerformed() {
return !getReindexStats().isEmpty();
}
- public List<String> getReindexStats(){
+ public List<String> getReindexStats() {
return rootState.progressReporter.getReindexStats();
}
- public Set<String> getUpdatedIndexPaths(){
+ public Set<String> getUpdatedIndexPaths() {
return rootState.progressReporter.getUpdatedIndexPaths();
}
- public void setTraversalRateEstimator(TraversalRateEstimator estimator){
+ public void setTraversalRateEstimator(TraversalRateEstimator estimator) {
rootState.progressReporter.setTraversalRateEstimator(estimator);
}
- public void setNodeCountEstimator(NodeCountEstimator nodeCountEstimator){
+ public void setNodeCountEstimator(NodeCountEstimator nodeCountEstimator) {
rootState.progressReporter.setNodeCountEstimator(nodeCountEstimator);
}
- public String getIndexingStats(){
+ public String getIndexingStats() {
return rootState.getIndexingStats();
}
- public void setIgnoreReindexFlags(boolean ignoreReindexFlag){
+ public void setIgnoreReindexFlags(boolean ignoreReindexFlag) {
rootState.setIgnoreReindexFlags(ignoreReindexFlag);
}
@@ -271,7 +269,7 @@ public class IndexUpdate implements Editor, PathSource {
return result;
}
- private static boolean hasAnyHiddenNodes(NodeBuilder builder){
+ private static boolean hasAnyHiddenNodes(NodeBuilder builder) {
for (String name : builder.getChildNodeNames()) {
if (NodeStateUtils.isHidden(name)) {
NodeBuilder childNode = builder.getChildNode(name);
@@ -284,8 +282,7 @@ public class IndexUpdate implements Editor, PathSource {
return false;
}
- private void collectIndexEditors(NodeBuilder definitions,
- NodeState before) throws CommitFailedException {
+ private void collectIndexEditors(NodeBuilder definitions, NodeState
before) throws CommitFailedException {
for (String name : definitions.getChildNodeNames()) {
NodeBuilder definition = definitions.getChildNode(name);
if (isIncluded(rootState.async, definition)) {
@@ -312,7 +309,7 @@ public class IndexUpdate implements Editor, PathSource {
boolean shouldReindex = shouldReindex(definition, before,
name);
String indexPath = getIndexPath(getPath(), name);
- if
(definition.hasProperty(IndexConstants.CORRUPT_PROPERTY_NAME) &&
!shouldReindex){
+ if
(definition.hasProperty(IndexConstants.CORRUPT_PROPERTY_NAME) &&
!shouldReindex) {
String corruptSince =
definition.getProperty(IndexConstants.CORRUPT_PROPERTY_NAME).getValue(Type.DATE);
rootState.corruptIndexHandler.skippingCorruptIndex(rootState.async, indexPath,
ISO8601.parse(corruptSince));
continue;
@@ -341,7 +338,7 @@ public class IndexUpdate implements Editor, PathSource {
long now = System.nanoTime();
long last = lastMissingProviderMessageTime.get();
if (now > last + silenceMessagesNanos
- &&
lastMissingProviderMessageTime.compareAndSet(last, now)) {
+ &&
lastMissingProviderMessageTime.compareAndSet(last, now)) {
log.warn("Missing provider for nrt/sync index:
{}. " +
"Please note, it means that index data
should be trusted only after this index " +
"is processed in an async indexing
cycle. " +
@@ -429,7 +426,7 @@ public class IndexUpdate implements Editor, PathSource {
* <p>Note that this differs from #isIncluded which also considers the
value of <code>async</code>
* property to determine if the index should be selected for current
IndexUpdate run.
*/
- private boolean isMatchingIndexMode(NodeBuilder definition){
+ private boolean isMatchingIndexMode(NodeBuilder definition) {
boolean async = definition.hasProperty(ASYNC_PROPERTY_NAME);
//Either
// 1. async index and async index update
@@ -439,7 +436,7 @@ public class IndexUpdate implements Editor, PathSource {
private void incrementReIndexCount(NodeBuilder definition) {
long count = 0;
- if(definition.hasProperty(REINDEX_COUNT)){
+ if (definition.hasProperty(REINDEX_COUNT)) {
count = definition.getProperty(REINDEX_COUNT).getValue(Type.LONG);
}
definition.setProperty(REINDEX_COUNT, count + 1);
@@ -463,7 +460,7 @@ public class IndexUpdate implements Editor, PathSource {
editor.leave(before, after);
}
- if (parent == null){
+ if (parent == null) {
rootState.progressReporter.logReport();
}
}
@@ -562,7 +559,7 @@ public class IndexUpdate implements Editor, PathSource {
return path + "/" + INDEX_DEFINITIONS_NAME + "/" + indexName;
}
- private Editor wrapProgress(Editor editor){
+ private Editor wrapProgress(Editor editor) {
return rootState.progressReporter.wrapProgress(editor);
}
@@ -651,7 +648,7 @@ public class IndexUpdate implements Editor, PathSource {
return new ReportingCallback(indexPath, reindex);
}
- public boolean isAsync(){
+ public boolean isAsync() {
return async != null;
}
@@ -660,7 +657,7 @@ public class IndexUpdate implements Editor, PathSource {
progressReporter.traversedNode(pathSource);
}
- public void propertyChanged(String name){
+ public void propertyChanged(String name) {
changedPropertyCount++;
}
@@ -702,7 +699,7 @@ public class IndexUpdate implements Editor, PathSource {
@Override
public void indexUpdate() throws CommitFailedException {
- progressReporter.indexUpdate(indexPath);
+ progressReporter.indexUpdate(indexPath);
}
//~------------------------------< ContextAwareCallback >
diff --git
a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/NodeStoreUtils.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/NodeStoreUtils.java
index 8a0b8333c4..121284def7 100644
---
a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/NodeStoreUtils.java
+++
b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/NodeStoreUtils.java
@@ -29,7 +29,6 @@ import
org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
import org.apache.jackrabbit.oak.spi.commit.CommitContext;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
-import org.apache.jackrabbit.oak.spi.commit.CompositeEditorProvider;
import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
import org.apache.jackrabbit.oak.spi.commit.EditorHook;
import org.apache.jackrabbit.oak.spi.commit.ResetCommitAttributeHook;
@@ -37,7 +36,6 @@ import
org.apache.jackrabbit.oak.spi.commit.SimpleCommitContext;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
-import static java.util.Collections.singletonList;
import static java.util.Objects.requireNonNull;
final class NodeStoreUtils {
@@ -46,7 +44,7 @@ final class NodeStoreUtils {
CompositeHook hooks = new CompositeHook(
ResetCommitAttributeHook.INSTANCE,
new ConflictHook(new AnnotatingConflictHandler()),
- new
EditorHook(CompositeEditorProvider.compose(singletonList(new
ConflictValidatorProvider())))
+ new EditorHook(new ConflictValidatorProvider())
);
nodeStore.merge(builder, hooks, createCommitInfo());
}
@@ -57,7 +55,7 @@ final class NodeStoreUtils {
ResetCommitAttributeHook.INSTANCE,
new EditorHook(new IndexUpdateProvider(indexEditorProvider,
null, true)),
new ConflictHook(new AnnotatingConflictHandler()),
- new
EditorHook(CompositeEditorProvider.compose(singletonList(new
ConflictValidatorProvider())))
+ new EditorHook(new ConflictValidatorProvider())
);
nodeStore.merge(builder, hooks, createCommitInfo());
}
diff --git
a/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
b/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
index 2cafdcd188..633e94bf07 100644
---
a/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
+++
b/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
@@ -1032,8 +1032,7 @@ public class AsyncIndexUpdateTest {
.getString(missingAsync));
// second run, simulate an index going away
- provider = CompositeIndexEditorProvider
- .compose(new ArrayList<IndexEditorProvider>());
+ provider = CompositeIndexEditorProvider.compose();
async = new AsyncIndexUpdate(missingAsync, store, provider);
async.run();
assertTrue(async.isFailing());
@@ -1083,7 +1082,7 @@ public class AsyncIndexUpdateTest {
store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
// second run, simulate an index going away
- provider = CompositeIndexEditorProvider.compose(new
ArrayList<IndexEditorProvider>());
+ provider = CompositeIndexEditorProvider.compose();
async = new AsyncIndexUpdate(missingAsyncName, store, provider);
async.run();
assertTrue(async.isFailing());
diff --git
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AsyncIndexStatsUpdateCallbackTest.java
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AsyncIndexStatsUpdateCallbackTest.java
index b49ddfee8b..cb8349bb5d 100644
---
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AsyncIndexStatsUpdateCallbackTest.java
+++
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AsyncIndexStatsUpdateCallbackTest.java
@@ -26,6 +26,7 @@ import org.apache.jackrabbit.oak.api.ContentSession;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.commons.junit.LogCustomizer;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate;
+import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
import
org.apache.jackrabbit.oak.plugins.index.counter.NodeCounterEditorProvider;
import
org.apache.jackrabbit.oak.plugins.index.lucene.directory.ActiveDeletedBlobCollectorFactory;
import
org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexDefinitionBuilder;
@@ -42,26 +43,22 @@ import org.mockito.Mockito;
import java.io.IOException;
import java.util.List;
-import static
org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider.compose;
import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
/**
* Tests AsyncIndexStatsUpdateCallback works as scheduled callback
*/
public class AsyncIndexStatsUpdateCallbackTest {
- private int SCHEDULED_CALLBACK_TIME_IN_MILLIS = 1000; //1 second
+ private final int SCHEDULED_CALLBACK_TIME_IN_MILLIS = 1000; //1 second
protected Root root;
private AsyncIndexUpdate asyncIndexUpdate;
private LuceneIndexEditorProvider luceneIndexEditorProvider;
private LogCustomizer customLogger;
- private AsyncIndexesSizeStatsUpdateImpl asyncIndexesSizeStatsUpdate =
+ private final AsyncIndexesSizeStatsUpdateImpl asyncIndexesSizeStatsUpdate =
new
AsyncIndexesSizeStatsUpdateImpl(SCHEDULED_CALLBACK_TIME_IN_MILLIS);
- private LuceneIndexMBeanImpl mBean =
Mockito.mock(LuceneIndexMBeanImpl.class);
+ private final LuceneIndexMBeanImpl mBean =
Mockito.mock(LuceneIndexMBeanImpl.class);
@Before
public void before() throws Exception {
@@ -87,10 +84,10 @@ public class AsyncIndexStatsUpdateCallbackTest {
null, Mounts.defaultMountInfoProvider(),
ActiveDeletedBlobCollectorFactory.NOOP, mBean,
StatisticsProvider.NOOP);
- asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
compose(List.of(
+ asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
CompositeIndexEditorProvider.compose(
luceneIndexEditorProvider,
new NodeCounterEditorProvider()
- )), StatisticsProvider.NOOP, false);
+ ), StatisticsProvider.NOOP, false);
return new Oak(nodeStore)
.with(new InitialContent())
.with(new OpenSecurityProvider())
@@ -111,16 +108,16 @@ public class AsyncIndexStatsUpdateCallbackTest {
customLogger.starting();
asyncIndexUpdate.run();
List<String> logs = customLogger.getLogs();
- assertTrue(logs.size() == 1);
+ assertEquals(1, logs.size());
root.getTree("/content").addChild("c2").setProperty("foo", "bar");
root.commit();
asyncIndexUpdate.run();
- assertTrue(logs.size() == 1);
+ assertEquals(1, logs.size());
root.getTree("/content").addChild("c3").setProperty("foo", "bar");
root.commit();
Thread.sleep(2000);
asyncIndexUpdate.run();
- assertTrue(logs.size() == 2);
+ assertEquals(2, logs.size());
validateLogs(logs);
}
@@ -138,16 +135,16 @@ public class AsyncIndexStatsUpdateCallbackTest {
customLogger.starting();
asyncIndexUpdate.run();
List<String> logs = customLogger.getLogs();
- assertTrue(logs.size() == 0);
+ assertEquals(0, logs.size());
root.getTree("/content").addChild("c2").setProperty("foo", "bar");
root.commit();
asyncIndexUpdate.run();
- assertTrue(logs.size() == 0);
+ assertEquals(0, logs.size());
root.getTree("/content").addChild("c3").setProperty("foo", "bar");
root.commit();
Thread.sleep(2000);
asyncIndexUpdate.run();
- assertTrue(logs.size() == 0);
+ assertEquals(0, logs.size());
//validateLogs(logs);
}
diff --git
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AsyncIndexUpdateCorruptMarkingTest.java
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AsyncIndexUpdateCorruptMarkingTest.java
index 393d172c0b..3e3b08f010 100644
---
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AsyncIndexUpdateCorruptMarkingTest.java
+++
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AsyncIndexUpdateCorruptMarkingTest.java
@@ -24,6 +24,7 @@ import org.apache.jackrabbit.oak.api.ContentRepository;
import org.apache.jackrabbit.oak.api.ContentSession;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate;
+import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.TrackingCorruptIndexHandler;
import
org.apache.jackrabbit.oak.plugins.index.counter.NodeCounterEditorProvider;
import
org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexDefinitionBuilder;
@@ -39,10 +40,8 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
-import java.util.List;
import java.util.concurrent.TimeUnit;
-import static
org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider.compose;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@@ -76,10 +75,10 @@ public class AsyncIndexUpdateCorruptMarkingTest {
LuceneIndexProvider provider = new LuceneIndexProvider();
luceneIndexEditorProvider.setBlobStore(blobStore);
- asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
compose(List.of(
+ asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
CompositeIndexEditorProvider.compose(
luceneIndexEditorProvider,
new NodeCounterEditorProvider()
- )));
+ ));
TrackingCorruptIndexHandler trackingCorruptIndexHandler = new
TrackingCorruptIndexHandler();
trackingCorruptIndexHandler.setCorruptInterval(INDEX_CORRUPT_INTERVAL_IN_MILLIS,
TimeUnit.MILLISECONDS);
asyncIndexUpdate.setCorruptIndexHandler(trackingCorruptIndexHandler);
diff --git
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexlaneRepositoryTraversalTest.java
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexlaneRepositoryTraversalTest.java
index 870c3ef503..c8d163d93b 100644
---
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexlaneRepositoryTraversalTest.java
+++
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexlaneRepositoryTraversalTest.java
@@ -29,6 +29,7 @@ import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.commons.junit.LogCustomizer;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate;
+import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.TrackingCorruptIndexHandler;
import
org.apache.jackrabbit.oak.plugins.index.counter.NodeCounterEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.property.RecursiveDelete;
@@ -51,7 +52,6 @@ import java.util.List;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
-import static
org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider.compose;
import static
org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -101,14 +101,14 @@ public class IndexlaneRepositoryTraversalTest {
LuceneIndexProvider provider = new LuceneIndexProvider();
luceneIndexEditorProvider.setBlobStore(blobStore);
- asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
compose(List.of(
+ asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
CompositeIndexEditorProvider.compose(
luceneIndexEditorProvider,
new NodeCounterEditorProvider()
- )));
- asyncIndexUpdateFulltext = new AsyncIndexUpdate("fulltext-async",
nodeStore, compose(List.of(
+ ));
+ asyncIndexUpdateFulltext = new AsyncIndexUpdate("fulltext-async",
nodeStore, CompositeIndexEditorProvider.compose(
luceneIndexEditorProvider,
new NodeCounterEditorProvider()
- )));
+ ));
TrackingCorruptIndexHandler trackingCorruptIndexHandler = new
TrackingCorruptIndexHandler();
trackingCorruptIndexHandler.setCorruptInterval(INDEX_CORRUPT_INTERVAL_IN_MILLIS,
TimeUnit.MILLISECONDS);
asyncIndexUpdate.setCorruptIndexHandler(trackingCorruptIndexHandler);
@@ -163,7 +163,7 @@ public class IndexlaneRepositoryTraversalTest {
}
@Test
- public void repositoryTraversalAsyncNodeContainsAsyncProperty() throws
Exception {
+ public void repositoryTraversalAsyncNodeContainsAsyncProperty() {
// first run to populate /:async node.
asyncIndexUpdate.run();
asyncIndexUpdate.run();
@@ -173,7 +173,7 @@ public class IndexlaneRepositoryTraversalTest {
}
@Test
- public void
repositoryTraversalAsyncNodeDonotContainsFulltextAsyncProperty() throws
Exception {
+ public void
repositoryTraversalAsyncNodeDonotContainsFulltextAsyncProperty() {
// first run to populate /:async node.
asyncIndexUpdate.run();
List<String> logs = customLogger.getLogs();
diff --git
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/InvalidIndexTest.java
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/InvalidIndexTest.java
index 26e6b9adba..9ebd35c157 100644
---
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/InvalidIndexTest.java
+++
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/InvalidIndexTest.java
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.api.*;
import org.apache.jackrabbit.oak.commons.junit.LogCustomizer;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate;
+import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdate;
import org.apache.jackrabbit.oak.plugins.index.TrackingCorruptIndexHandler;
import
org.apache.jackrabbit.oak.plugins.index.counter.NodeCounterEditorProvider;
@@ -45,7 +46,6 @@ import org.junit.Test;
import java.util.List;
import java.util.concurrent.TimeUnit;
-import static
org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider.compose;
import static
org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
@@ -96,10 +96,10 @@ public class InvalidIndexTest {
LuceneIndexProvider provider = new LuceneIndexProvider();
luceneIndexEditorProvider.setBlobStore(blobStore);
- asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
compose(List.of(
+ asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
CompositeIndexEditorProvider.compose(
luceneIndexEditorProvider,
new NodeCounterEditorProvider()
- )));
+ ));
TrackingCorruptIndexHandler trackingCorruptIndexHandler = new
TrackingCorruptIndexHandler();
trackingCorruptIndexHandler.setCorruptInterval(INDEX_CORRUPT_INTERVAL_IN_MILLIS,
TimeUnit.MILLISECONDS);
asyncIndexUpdate.setCorruptIndexHandler(trackingCorruptIndexHandler);
diff --git
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneTestRepositoryBuilder.java
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneTestRepositoryBuilder.java
index 0681998bc9..48358551ce 100644
---
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneTestRepositoryBuilder.java
+++
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneTestRepositoryBuilder.java
@@ -22,6 +22,7 @@ import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.oak.InitialContentHelper;
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate;
+import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.TestRepository;
import org.apache.jackrabbit.oak.plugins.index.TestRepositoryBuilder;
import
org.apache.jackrabbit.oak.plugins.index.counter.NodeCounterEditorProvider;
@@ -33,15 +34,13 @@ import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.junit.rules.TemporaryFolder;
import java.io.IOException;
-import java.util.List;
import java.util.concurrent.ExecutorService;
-import static
org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider.compose;
public class LuceneTestRepositoryBuilder extends TestRepositoryBuilder {
- private ResultCountingIndexProvider resultCountingIndexProvider;
- private TestUtil.OptionalEditorProvider optionalEditorProvider;
+ private final ResultCountingIndexProvider resultCountingIndexProvider;
+ private final TestUtil.OptionalEditorProvider optionalEditorProvider;
public LuceneTestRepositoryBuilder(ExecutorService executorService,
TemporaryFolder temporaryFolder) {
IndexCopier copier = null;
@@ -52,10 +51,10 @@ public class LuceneTestRepositoryBuilder extends
TestRepositoryBuilder {
}
this.editorProvider = new LuceneIndexEditorProvider(copier, new
ExtractedTextCache(10 * FileUtils.ONE_MB, 100));
this.indexProvider = new LuceneIndexProvider(copier);
- this.asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
compose(List.of(
+ this.asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
CompositeIndexEditorProvider.compose(
editorProvider,
new NodeCounterEditorProvider()
- )));
+ ));
resultCountingIndexProvider = new
ResultCountingIndexProvider(indexProvider);
queryEngineSettings = new QueryEngineSettings();
diff --git
a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/indexversion/PurgeOldIndexVersion.java
b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/indexversion/PurgeOldIndexVersion.java
index 3556f052a6..93dd50137d 100644
---
a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/indexversion/PurgeOldIndexVersion.java
+++
b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/indexversion/PurgeOldIndexVersion.java
@@ -18,21 +18,11 @@
*/
package org.apache.jackrabbit.oak.indexversion;
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import org.apache.jackrabbit.guava.common.io.Closer;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
-import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexName;
import org.apache.jackrabbit.oak.plugins.index.IndexPathService;
import org.apache.jackrabbit.oak.plugins.index.IndexPathServiceImpl;
@@ -49,6 +39,15 @@ import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
import static
org.apache.jackrabbit.oak.plugins.index.IndexConstants.ORIGINAL_TYPE_PROPERTY_NAME;
import static
org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_DISABLED;
import static
org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_PROPERTY_NAME;
@@ -227,9 +226,9 @@ public abstract class PurgeOldIndexVersion implements
Closeable {
NodeBuilder nodeBuilder =
PurgeOldVersionUtils.getNode(rootBuilder, nodeName);
if (nodeBuilder.exists()) {
String type =
nodeBuilder.getProperty(TYPE_PROPERTY_NAME).getValue(Type.STRING);
- List<IndexEditorProvider> indexEditorProviders = List.of(
- new ReferenceEditorProvider(), new
PropertyIndexEditorProvider(), new NodeCounterEditorProvider());
- EditorHook hook = new EditorHook(new
IndexUpdateProvider(CompositeIndexEditorProvider.compose(indexEditorProviders)));
+ EditorHook hook = new EditorHook(new IndexUpdateProvider(
+ CompositeIndexEditorProvider.compose(new
ReferenceEditorProvider(), new PropertyIndexEditorProvider(), new
NodeCounterEditorProvider())
+ ));
if (toDeleteIndexNameObject.getOperation() ==
IndexVersionOperation.Operation.DELETE_HIDDEN_AND_DISABLE) {
LOG.info("Disabling {}", nodeName);
nodeBuilder.setProperty(TYPE_PROPERTY_NAME, TYPE_DISABLED,
Type.STRING);
diff --git
a/oak-run-elastic/src/main/java/org/apache/jackrabbit/oak/index/ElasticOutOfBandIndexer.java
b/oak-run-elastic/src/main/java/org/apache/jackrabbit/oak/index/ElasticOutOfBandIndexer.java
index 31e656470f..c6538bb4a9 100644
---
a/oak-run-elastic/src/main/java/org/apache/jackrabbit/oak/index/ElasticOutOfBandIndexer.java
+++
b/oak-run-elastic/src/main/java/org/apache/jackrabbit/oak/index/ElasticOutOfBandIndexer.java
@@ -28,8 +28,6 @@ import
org.apache.jackrabbit.oak.plugins.index.elastic.index.ElasticIndexEditorP
import org.apache.jackrabbit.oak.plugins.index.search.ExtractedTextCache;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
-import java.util.Collections;
-
/*
Out of band indexer for Elasticsearch. Provides support to index segment store
for given index definitions or reindex existing indexes
*/
@@ -57,7 +55,7 @@ public class ElasticOutOfBandIndexer extends
OutOfBandIndexerBase {
@Override
protected IndexEditorProvider createIndexEditorProvider() {
IndexEditorProvider elastic = createElasticEditorProvider();
- return
CompositeIndexEditorProvider.compose(Collections.singletonList(elastic));
+ return CompositeIndexEditorProvider.compose(elastic);
}
private IndexEditorProvider createElasticEditorProvider() {
diff --git
a/oak-run/src/main/java/org/apache/jackrabbit/oak/index/OutOfBandIndexer.java
b/oak-run/src/main/java/org/apache/jackrabbit/oak/index/OutOfBandIndexer.java
index 91080dfe7e..2d8b2d0514 100644
---
a/oak-run/src/main/java/org/apache/jackrabbit/oak/index/OutOfBandIndexer.java
+++
b/oak-run/src/main/java/org/apache/jackrabbit/oak/index/OutOfBandIndexer.java
@@ -20,7 +20,6 @@ package org.apache.jackrabbit.oak.index;
import java.io.File;
import java.io.IOException;
-import java.util.List;
import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
@@ -45,7 +44,7 @@ public class OutOfBandIndexer extends OutOfBandIndexerBase {
LuceneIndexEditorProvider lucene = createLuceneEditorProvider();
SegmentPropertyIndexEditorProvider property =
createPropertyEditorProvider();
- return CompositeIndexEditorProvider.compose(List.of(lucene, property));
+ return CompositeIndexEditorProvider.compose(lucene, property);
}
private SegmentPropertyIndexEditorProvider createPropertyEditorProvider()
throws IOException {
diff --git
a/oak-run/src/main/java/org/apache/jackrabbit/oak/index/async/AsyncIndexerLucene.java
b/oak-run/src/main/java/org/apache/jackrabbit/oak/index/async/AsyncIndexerLucene.java
index f854b060e4..234d31aead 100644
---
a/oak-run/src/main/java/org/apache/jackrabbit/oak/index/async/AsyncIndexerLucene.java
+++
b/oak-run/src/main/java/org/apache/jackrabbit/oak/index/async/AsyncIndexerLucene.java
@@ -29,7 +29,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
-import java.util.Arrays;
import java.util.List;
@@ -47,8 +46,7 @@ public class AsyncIndexerLucene extends AsyncIndexerBase {
@Override
public IndexEditorProvider getIndexEditorProvider() {
try {
- return CompositeIndexEditorProvider
- .compose(Arrays.asList(createLuceneEditorProvider(), new
NodeCounterEditorProvider()));
+ return
CompositeIndexEditorProvider.compose(createLuceneEditorProvider(), new
NodeCounterEditorProvider());
} catch (IOException e) {
log.error("Exception while initializing IndexEditorProvider", e);
return null;
diff --git
a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticAbstractQueryTest.java
b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticAbstractQueryTest.java
index 34c4202671..207edbd71a 100644
---
a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticAbstractQueryTest.java
+++
b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticAbstractQueryTest.java
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.api.ContentRepository;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate;
+import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.TestUtil;
import org.apache.jackrabbit.oak.plugins.index.TrackingCorruptIndexHandler;
@@ -54,7 +55,6 @@ import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;
-import static
org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider.compose;
import static
org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
import static
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexDefinition.BULK_FLUSH_INTERVAL_MS_DEFAULT;
import static org.junit.Assert.assertEquals;
@@ -148,10 +148,10 @@ public abstract class ElasticAbstractQueryTest extends
AbstractQueryTest {
nodeStore = getNodeStore();
- asyncIndexUpdate = getAsyncIndexUpdate("async", nodeStore,
compose(List.of(
+ asyncIndexUpdate = getAsyncIndexUpdate("async", nodeStore,
CompositeIndexEditorProvider.compose(
editorProvider,
new NodeCounterEditorProvider()
- )));
+ ));
TrackingCorruptIndexHandler trackingCorruptIndexHandler = new
TrackingCorruptIndexHandler();
trackingCorruptIndexHandler.setCorruptInterval(INDEX_CORRUPT_INTERVAL_IN_MILLIS,
TimeUnit.MILLISECONDS);
diff --git
a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticTestRepositoryBuilder.java
b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticTestRepositoryBuilder.java
index 1ff8fed997..889bc7326f 100644
---
a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticTestRepositoryBuilder.java
+++
b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticTestRepositoryBuilder.java
@@ -22,6 +22,7 @@ import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.oak.InitialContentHelper;
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate;
+import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.TestRepository;
import org.apache.jackrabbit.oak.plugins.index.TestRepositoryBuilder;
@@ -34,9 +35,6 @@ import org.apache.jackrabbit.oak.query.QueryEngineSettings;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
-import java.util.List;
-
-import static
org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider.compose;
public class ElasticTestRepositoryBuilder extends TestRepositoryBuilder {
@@ -50,10 +48,10 @@ public class ElasticTestRepositoryBuilder extends
TestRepositoryBuilder {
this.indexTracker = new ElasticIndexTracker(esConnection, new
ElasticMetricHandler(StatisticsProvider.NOOP));
this.editorProvider = getIndexEditorProvider();
this.indexProvider = new ElasticIndexProvider(indexTracker);
- this.asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
compose(List.of(
+ this.asyncIndexUpdate = new AsyncIndexUpdate("async", nodeStore,
CompositeIndexEditorProvider.compose(
editorProvider,
new NodeCounterEditorProvider()
- )));
+ ));
queryEngineSettings = new QueryEngineSettings();
asyncIndexUpdate.setCorruptIndexHandler(trackingCorruptIndexHandler);
}
diff --git
a/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeEditor.java
b/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeEditor.java
index b4b5264584..31d4193667 100644
---
a/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeEditor.java
+++
b/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeEditor.java
@@ -16,8 +16,6 @@
*/
package org.apache.jackrabbit.oak.spi.commit;
-import static java.util.Objects.requireNonNull;
-
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -25,7 +23,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
/**
@@ -33,13 +30,8 @@ import java.util.List;
*/
public class CompositeEditor implements Editor {
- public static Editor compose(@NotNull Collection<? extends Editor>
editors) {
- return compose(new ArrayList<>(editors));
- }
-
@Nullable
public static Editor compose(@NotNull List<? extends Editor> editors) {
- requireNonNull(editors);
switch (editors.size()) {
case 0:
return null;
@@ -79,24 +71,27 @@ public class CompositeEditor implements Editor {
@Override
public void propertyAdded(PropertyState after)
throws CommitFailedException {
- for (Editor editor : editors) {
- editor.propertyAdded(after);
+ // Performance critical code, avoid creating an iterator object
+ for (int i = 0; i < editors.size(); i++) {
+ editors.get(i).propertyAdded(after);
}
}
@Override
public void propertyChanged(PropertyState before, PropertyState after)
throws CommitFailedException {
- for (Editor editor : editors) {
- editor.propertyChanged(before, after);
+ // Performance critical code, avoid creating an iterator object
+ for (int i = 0; i < editors.size(); i++) {
+ editors.get(i).propertyChanged(before, after);
}
}
@Override
public void propertyDeleted(PropertyState before)
throws CommitFailedException {
- for (Editor editor : editors) {
- editor.propertyDeleted(before);
+ // Performance critical code, avoid creating an iterator object
+ for (int i = 0; i < editors.size(); i++) {
+ editors.get(i).propertyDeleted(before);
}
}
@@ -104,8 +99,9 @@ public class CompositeEditor implements Editor {
public Editor childNodeAdded(String name, NodeState after)
throws CommitFailedException {
List<Editor> list = new ArrayList<>(editors.size());
- for (Editor editor : editors) {
- Editor child = editor.childNodeAdded(name, after);
+ // Performance critical code, avoid creating an iterator object
+ for (int i = 0; i < editors.size(); i++) {
+ Editor child = editors.get(i).childNodeAdded(name, after);
if (child != null) {
list.add(child);
}
@@ -114,12 +110,12 @@ public class CompositeEditor implements Editor {
}
@Override
- public Editor childNodeChanged(
- String name, NodeState before, NodeState after)
+ public Editor childNodeChanged(String name, NodeState before, NodeState
after)
throws CommitFailedException {
List<Editor> list = new ArrayList<>(editors.size());
- for (Editor editor : editors) {
- Editor child = editor.childNodeChanged(name, before, after);
+ // Performance critical code, avoid creating an iterator object
+ for (int i = 0; i < editors.size(); i++) {
+ Editor child = editors.get(i).childNodeChanged(name, before,
after);
if (child != null) {
list.add(child);
}
@@ -131,8 +127,9 @@ public class CompositeEditor implements Editor {
public Editor childNodeDeleted(String name, NodeState before)
throws CommitFailedException {
List<Editor> list = new ArrayList<>(editors.size());
- for (Editor editor : editors) {
- Editor child = editor.childNodeDeleted(name, before);
+ // Performance critical code, avoid creating an iterator object
+ for (int i = 0; i < editors.size(); i++) {
+ Editor child = editors.get(i).childNodeDeleted(name, before);
if (child != null) {
list.add(child);
}