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 35f8650f47 OAK-11849 - Make facet evaluation timeout configurable.
(#2440)
35f8650f47 is described below
commit 35f8650f47b72eb6625426dddc1acd0672677b13
Author: Nuno Santos <[email protected]>
AuthorDate: Tue Aug 12 06:53:38 2025 +0200
OAK-11849 - Make facet evaluation timeout configurable. (#2440)
---
.../index/elastic/ElasticIndexProviderService.java | 14 +++++++++--
.../plugins/index/elastic/query/ElasticIndex.java | 10 +++++---
.../index/elastic/query/ElasticIndexProvider.java | 19 ++++++++++++---
.../index/elastic/query/ElasticRequestHandler.java | 6 +++--
.../query/async/facets/ElasticFacetProvider.java | 12 +++++-----
.../facets/ElasticSecureFacetAsyncProvider.java | 10 ++++----
.../ElasticStatisticalFacetAsyncProvider.java | 28 +++++++++++-----------
.../index/elastic/ElasticAbstractQueryTest.java | 9 ++++++-
.../elastic/ElasticIndexProviderServiceTest.java | 4 +++-
9 files changed, 76 insertions(+), 36 deletions(-)
diff --git
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java
index 98dc55d690..0c6efc53f4 100644
---
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java
+++
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java
@@ -76,6 +76,7 @@ public class ElasticIndexProviderService {
protected static final String PROP_ELASTIC_API_KEY_SECRET =
"elasticsearch.apiKeySecret";
protected static final String PROP_ELASTIC_MAX_RETRY_TIME =
"elasticsearch.maxRetryTime";
protected static final String
PROP_ELASTIC_ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS =
"elasticsearch.asyncIteratorEnqueueTimeoutMs";
+ protected static final String PROP_ELASTIC_FACETS_EVALUATION_TIMEOUT_MS =
"elasticsearch.facetsEvaluationTimeoutMs";
protected static final String PROP_LOCAL_TEXT_EXTRACTION_DIR =
"localTextExtractionDir";
private static final boolean DEFAULT_IS_INFERENCE_ENABLED = false;
private static final String ENV_VAR_OAK_INFERENCE_STATISTICS_DISABLED =
"OAK_INFERENCE_STATISTICS_DISABLED";
@@ -132,6 +133,12 @@ public class ElasticIndexProviderService {
"Default is 60000 ms (60 seconds).")
long elasticsearch_asyncIteratorEnqueueTimeoutMs() default
ElasticIndexProvider.DEFAULT_ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS;
+ @AttributeDefinition(
+ name = "Elasticsearch Facets Evaluation Timeout (ms)",
+ description = "Time in milliseconds to wait for facets to be
evaluated before timing out the client query. " +
+ "Default is 15000 ms (15 seconds).")
+ long elasticsearch_facetsEvaluationTimeoutMs() default
ElasticIndexProvider.DEFAULT_FACETS_EVALUATION_TIMEOUT_MS;
+
@AttributeDefinition(name = "Local text extraction cache path",
description = "Local file system path where text extraction
cache stores/load entries to recover from timed out operation")
String localTextExtractionDir();
@@ -285,8 +292,11 @@ public class ElasticIndexProviderService {
}
private void registerIndexProvider(BundleContext bundleContext, Config
config) {
- long asyncIteratorEnqueueTimeoutMs =
Long.getLong(PROP_ELASTIC_ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS,
config.elasticsearch_asyncIteratorEnqueueTimeoutMs());
- ElasticIndexProvider indexProvider = new
ElasticIndexProvider(indexTracker, asyncIteratorEnqueueTimeoutMs);
+ long asyncIteratorEnqueueTimeoutMs =
Long.getLong(PROP_ELASTIC_ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS,
+ config.elasticsearch_asyncIteratorEnqueueTimeoutMs());
+ long facetsEvaluationTimeoutMs =
Long.getLong(PROP_ELASTIC_FACETS_EVALUATION_TIMEOUT_MS,
+ config.elasticsearch_facetsEvaluationTimeoutMs());
+ ElasticIndexProvider indexProvider = new
ElasticIndexProvider(indexTracker, asyncIteratorEnqueueTimeoutMs,
facetsEvaluationTimeoutMs);
Dictionary<String, Object> props = new Hashtable<>();
props.put("type", ElasticIndexDefinition.TYPE_ELASTICSEARCH);
diff --git
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticIndex.java
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticIndex.java
index 915a1891ef..96f7155a05 100644
---
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticIndex.java
+++
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticIndex.java
@@ -45,10 +45,12 @@ class ElasticIndex extends FulltextIndex {
private final ElasticIndexTracker elasticIndexTracker;
private final long asyncIteratorEnqueueTimeoutMs;
+ private final long facetsEvaluationTimeoutMs;
- ElasticIndex(ElasticIndexTracker elasticIndexTracker, long
asyncIteratorEnqueueTimeoutMs) {
+ ElasticIndex(ElasticIndexTracker elasticIndexTracker, long
asyncIteratorEnqueueTimeoutMs, long facetsEvaluationTimeoutMs) {
this.elasticIndexTracker = elasticIndexTracker;
this.asyncIteratorEnqueueTimeoutMs = asyncIteratorEnqueueTimeoutMs;
+ this.facetsEvaluationTimeoutMs = facetsEvaluationTimeoutMs;
}
@Override
@@ -66,7 +68,9 @@ class ElasticIndex extends FulltextIndex {
return () -> {
ElasticIndexNode indexNode = acquireIndexNode(plan);
try {
- return indexNode.getIndexStatistics().getDocCountFor(new
ElasticRequestHandler(plan, getPlanResult(plan), null).baseQuery());
+ return indexNode.getIndexStatistics().getDocCountFor(
+ new ElasticRequestHandler(plan, getPlanResult(plan),
null, facetsEvaluationTimeoutMs).baseQuery()
+ );
} finally {
indexNode.release();
}
@@ -110,7 +114,7 @@ class ElasticIndex extends FulltextIndex {
Filter filter = plan.getFilter();
FulltextIndexPlanner.PlanResult planResult = getPlanResult(plan);
- ElasticRequestHandler requestHandler = new ElasticRequestHandler(plan,
planResult, rootState);
+ ElasticRequestHandler requestHandler = new ElasticRequestHandler(plan,
planResult, rootState, facetsEvaluationTimeoutMs);
ElasticResponseHandler responseHandler = new
ElasticResponseHandler(planResult, filter);
ElasticQueryIterator itr;
diff --git
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticIndexProvider.java
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticIndexProvider.java
index 9f51001e53..a032df312b 100644
---
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticIndexProvider.java
+++
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticIndexProvider.java
@@ -29,25 +29,38 @@ public class ElasticIndexProvider implements
QueryIndexProvider {
public static final String ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS_PROPERTY =
"oak.index.elastic.query.asyncIteratorEnqueueTimeoutMs";
public static final long DEFAULT_ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS =
60000L; // 60 seconds
+ public static final String FACETS_EVALUATION_TIMEOUT_MS_PROPERTY =
"oak.index.elastic.query.facetsEvaluationTimeoutMs";
+ public static final long DEFAULT_FACETS_EVALUATION_TIMEOUT_MS = 15000L; //
15 seconds
private final ElasticIndexTracker indexTracker;
private final long asyncIteratorEnqueueTimeoutMs;
+ private final long facetsEvaluationTimeoutMs;
- public ElasticIndexProvider(ElasticIndexTracker indexTracker, long
asyncIteratorEnqueueTimeoutMs) {
+ public ElasticIndexProvider(ElasticIndexTracker indexTracker,
+ long asyncIteratorEnqueueTimeoutMs,
+ long facetsEvaluationTimeoutMs) {
this.indexTracker = indexTracker;
this.asyncIteratorEnqueueTimeoutMs = asyncIteratorEnqueueTimeoutMs;
+ this.facetsEvaluationTimeoutMs = facetsEvaluationTimeoutMs;
}
public ElasticIndexProvider(ElasticIndexTracker indexTracker) {
- this(indexTracker,
ConfigHelper.getSystemPropertyAsLong(ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS_PROPERTY,
DEFAULT_ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS));
+ this(indexTracker,
+
ConfigHelper.getSystemPropertyAsLong(ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS_PROPERTY,
DEFAULT_ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS),
+
ConfigHelper.getSystemPropertyAsLong(FACETS_EVALUATION_TIMEOUT_MS_PROPERTY,
DEFAULT_FACETS_EVALUATION_TIMEOUT_MS)
+ );
}
public long getAsyncIteratorEnqueueTimeoutMs() {
return asyncIteratorEnqueueTimeoutMs;
}
+ public long getFacetsEvaluationTimeoutMs() {
+ return facetsEvaluationTimeoutMs;
+ }
+
@Override
public @NotNull List<? extends QueryIndex> getQueryIndexes(NodeState
nodeState) {
- return List.of(new ElasticIndex(indexTracker,
asyncIteratorEnqueueTimeoutMs));
+ return List.of(new ElasticIndex(indexTracker,
asyncIteratorEnqueueTimeoutMs, facetsEvaluationTimeoutMs));
}
}
diff --git
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
index 75826edef5..18cdf42b3f 100644
---
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
+++
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
@@ -141,6 +141,7 @@ public class ElasticRequestHandler {
private final Filter filter;
private final PlanResult planResult;
private final ElasticIndexDefinition elasticIndexDefinition;
+ private final long facetsEvaluationTimeoutMs;
private final String propertyRestrictionQuery;
private final NodeState rootState;
@@ -149,11 +150,12 @@ public class ElasticRequestHandler {
private static final ElasticSemVer MAXIMUM_NULL_CHECK_VERSION = new
ElasticSemVer(1, 5, 0);
ElasticRequestHandler(@NotNull IndexPlan indexPlan, @NotNull
FulltextIndexPlanner.PlanResult planResult,
- NodeState rootState) {
+ NodeState rootState, long facetsEvaluationTimeoutMs)
{
this.indexPlan = indexPlan;
this.filter = indexPlan.getFilter();
this.planResult = planResult;
this.elasticIndexDefinition = (ElasticIndexDefinition)
planResult.indexDefinition;
+ this.facetsEvaluationTimeoutMs = facetsEvaluationTimeoutMs;
// Check if native function is supported
Filter.PropertyRestriction pr = null;
@@ -405,7 +407,7 @@ public class ElasticRequestHandler {
public ElasticFacetProvider getAsyncFacetProvider(ElasticConnection
connection, ElasticResponseHandler responseHandler) {
return requiresFacets()
?
ElasticFacetProvider.getProvider(planResult.indexDefinition.getSecureFacetConfiguration(),
connection,
- elasticIndexDefinition, this, responseHandler,
filter::isAccessible)
+ elasticIndexDefinition, this, responseHandler,
filter::isAccessible, facetsEvaluationTimeoutMs)
: null;
}
diff --git
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticFacetProvider.java
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticFacetProvider.java
index 53d056dec9..9a03dec075 100644
---
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticFacetProvider.java
+++
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticFacetProvider.java
@@ -48,8 +48,8 @@ public interface ElasticFacetProvider extends
FulltextIndex.FacetProvider {
ElasticIndexDefinition indexDefinition,
ElasticRequestHandler requestHandler,
ElasticResponseHandler responseHandler,
- Predicate<String> isAccessible
- ) {
+ Predicate<String> isAccessible,
+ long facetsEvaluationTimeoutMs) {
final ElasticFacetProvider facetProvider;
switch (facetConfiguration.getMode()) {
case INSECURE:
@@ -57,14 +57,14 @@ public interface ElasticFacetProvider extends
FulltextIndex.FacetProvider {
break;
case STATISTICAL:
facetProvider = new
ElasticStatisticalFacetAsyncProvider(connection, indexDefinition,
- requestHandler, responseHandler, isAccessible,
facetConfiguration.getRandomSeed(),
- facetConfiguration.getStatisticalFacetSampleSize()
+ requestHandler, responseHandler, isAccessible,
+ facetConfiguration.getStatisticalFacetSampleSize(),
+ facetsEvaluationTimeoutMs
);
break;
case SECURE:
default:
- facetProvider = new
ElasticSecureFacetAsyncProvider(requestHandler, responseHandler, isAccessible);
-
+ facetProvider = new
ElasticSecureFacetAsyncProvider(requestHandler, responseHandler, isAccessible,
facetsEvaluationTimeoutMs);
}
return facetProvider;
}
diff --git
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticSecureFacetAsyncProvider.java
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticSecureFacetAsyncProvider.java
index ee0e359128..5ff183b44d 100644
---
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticSecureFacetAsyncProvider.java
+++
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticSecureFacetAsyncProvider.java
@@ -47,6 +47,7 @@ class ElasticSecureFacetAsyncProvider implements
ElasticFacetProvider, ElasticRe
private static final Logger LOG =
LoggerFactory.getLogger(ElasticSecureFacetAsyncProvider.class);
private final Set<String> facetFields;
+ private final long facetsEvaluationTimeoutMs;
private final Map<String, Map<String, MutableInt>> accessibleFacetCounts =
new ConcurrentHashMap<>();
private final ElasticResponseHandler elasticResponseHandler;
private final Predicate<String> isAccessible;
@@ -56,13 +57,14 @@ class ElasticSecureFacetAsyncProvider implements
ElasticFacetProvider, ElasticRe
ElasticSecureFacetAsyncProvider(
ElasticRequestHandler elasticRequestHandler,
ElasticResponseHandler elasticResponseHandler,
- Predicate<String> isAccessible
- ) {
+ Predicate<String> isAccessible,
+ long facetsEvaluationTimeoutMs) {
this.elasticResponseHandler = elasticResponseHandler;
this.isAccessible = isAccessible;
this.facetFields = elasticRequestHandler.facetFields().
map(ElasticIndexUtils::fieldName).
- collect(Collectors.toSet());
+ collect(Collectors.toUnmodifiableSet());
+ this.facetsEvaluationTimeoutMs = facetsEvaluationTimeoutMs;
}
@Override
@@ -130,7 +132,7 @@ class ElasticSecureFacetAsyncProvider implements
ElasticFacetProvider, ElasticRe
public List<FulltextIndex.Facet> getFacets(int numberOfFacets, String
columnName) {
LOG.trace("Requested facets for {} - Latch count: {}", columnName,
latch.getCount());
try {
- boolean completed = latch.await(15, TimeUnit.SECONDS);
+ boolean completed = latch.await(facetsEvaluationTimeoutMs,
TimeUnit.MILLISECONDS);
if (!completed) {
throw new IllegalStateException("Timed out while waiting for
facets");
}
diff --git
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticStatisticalFacetAsyncProvider.java
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticStatisticalFacetAsyncProvider.java
index df9c671663..bf7b636455 100644
---
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticStatisticalFacetAsyncProvider.java
+++
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/facets/ElasticStatisticalFacetAsyncProvider.java
@@ -16,6 +16,14 @@
*/
package org.apache.jackrabbit.oak.plugins.index.elastic.query.async.facets;
+import co.elastic.clients.elasticsearch._types.aggregations.Aggregate;
+import co.elastic.clients.elasticsearch._types.aggregations.StringTermsBucket;
+import co.elastic.clients.elasticsearch._types.mapping.FieldType;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch.core.SearchRequest;
+import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.elasticsearch.core.search.Hit;
+import co.elastic.clients.elasticsearch.core.search.SourceConfig;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.commons.lang3.mutable.MutableInt;
@@ -29,15 +37,6 @@ import
org.apache.jackrabbit.oak.plugins.index.search.spi.query.FulltextIndex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import co.elastic.clients.elasticsearch._types.aggregations.Aggregate;
-import co.elastic.clients.elasticsearch._types.aggregations.StringTermsBucket;
-import co.elastic.clients.elasticsearch._types.mapping.FieldType;
-import co.elastic.clients.elasticsearch._types.query_dsl.Query;
-import co.elastic.clients.elasticsearch.core.SearchRequest;
-import co.elastic.clients.elasticsearch.core.SearchResponse;
-import co.elastic.clients.elasticsearch.core.search.Hit;
-import co.elastic.clients.elasticsearch.core.search.SourceConfig;
-
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
@@ -63,6 +62,7 @@ public class ElasticStatisticalFacetAsyncProvider implements
ElasticFacetProvide
private final ElasticResponseHandler elasticResponseHandler;
private final Predicate<String> isAccessible;
private final Set<String> facetFields;
+ private final long facetsEvaluationTimeoutMs;
private final Map<String, List<FulltextIndex.Facet>> allFacets = new
HashMap<>();
private final Map<String, Map<String, MutableInt>> accessibleFacetCounts =
new ConcurrentHashMap<>();
private Map<String, List<FulltextIndex.Facet>> facets;
@@ -73,13 +73,14 @@ public class ElasticStatisticalFacetAsyncProvider
implements ElasticFacetProvide
ElasticStatisticalFacetAsyncProvider(ElasticConnection connection,
ElasticIndexDefinition indexDefinition,
ElasticRequestHandler
elasticRequestHandler, ElasticResponseHandler elasticResponseHandler,
- Predicate<String> isAccessible, long
randomSeed, int sampleSize) {
+ Predicate<String> isAccessible, int
sampleSize, long facetsEvaluationTimeoutMs) {
this.elasticResponseHandler = elasticResponseHandler;
this.isAccessible = isAccessible;
this.facetFields = elasticRequestHandler.facetFields().
map(ElasticIndexUtils::fieldName).
- collect(Collectors.toSet());
+ collect(Collectors.toUnmodifiableSet());
+ this.facetsEvaluationTimeoutMs = facetsEvaluationTimeoutMs;
this.searchRequest = SearchRequest.of(srb ->
srb.index(indexDefinition.getIndexAlias())
.trackTotalHits(thb -> thb.enabled(true))
@@ -88,8 +89,7 @@ public class ElasticStatisticalFacetAsyncProvider implements
ElasticFacetProvide
.aggregations(elasticRequestHandler.aggregations())
.size(sampleSize)
.sort(s ->
- s.field(fs -> fs.field(
- ElasticIndexDefinition.PATH_RANDOM_VALUE)
+ s.field(fs ->
fs.field(ElasticIndexDefinition.PATH_RANDOM_VALUE)
// this will handle the case when the field is
not present in the index
.unmappedType(FieldType.Integer)
)
@@ -124,7 +124,7 @@ public class ElasticStatisticalFacetAsyncProvider
implements ElasticFacetProvide
public List<FulltextIndex.Facet> getFacets(int numberOfFacets, String
columnName) {
LOG.trace("Requested facets for {} - Latch count: {}", columnName,
latch.getCount());
try {
- boolean completed = latch.await(15, TimeUnit.SECONDS);
+ boolean completed = latch.await(facetsEvaluationTimeoutMs,
TimeUnit.MILLISECONDS);
if (!completed) {
LOG.error("Timed out while waiting for facets. Search request:
{}", searchRequest);
throw new IllegalStateException("Timed out while waiting for
facets");
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 d5fc07271e..9b2007b739 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
@@ -163,7 +163,10 @@ public abstract class ElasticAbstractQueryTest extends
AbstractQueryTest {
ElasticIndexEditorProvider editorProvider = new
ElasticIndexEditorProvider(indexTracker, esConnection,
new ExtractedTextCache(10 * FileUtils.ONE_MB, 100),
getElasticRetryPolicy());
- ElasticIndexProvider indexProvider = new
ElasticIndexProvider(indexTracker, getAsyncIteratorEnqueueTimeoutMs());
+ ElasticIndexProvider indexProvider = new ElasticIndexProvider(
+ indexTracker,
+ getAsyncIteratorEnqueueTimeoutMs(),
+ getFacetsEvaluationTimeoutMs());
asyncIndexUpdate = getAsyncIndexUpdate("async", nodeStore,
CompositeIndexEditorProvider.compose(
@@ -194,6 +197,10 @@ public abstract class ElasticAbstractQueryTest extends
AbstractQueryTest {
return ElasticIndexProvider.DEFAULT_ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS;
}
+ protected long getFacetsEvaluationTimeoutMs() {
+ return ElasticIndexProvider.DEFAULT_FACETS_EVALUATION_TIMEOUT_MS;
+ }
+
protected long limitReads() {
return QueryEngineSettings.DEFAULT_QUERY_LIMIT_READS;
}
diff --git
a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java
b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java
index 0a8cc33e5c..d927d4ec64 100644
---
a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java
+++
b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java
@@ -34,7 +34,6 @@ import org.apache.jackrabbit.oak.stats.MeterStats;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
import org.apache.sling.testing.mock.osgi.MockOsgi;
import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
-import org.jetbrains.annotations.Nullable;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
@@ -51,6 +50,7 @@ import static
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProvid
import static
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_API_KEY_ID;
import static
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_API_KEY_SECRET;
import static
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS;
+import static
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_FACETS_EVALUATION_TIMEOUT_MS;
import static
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_HOST;
import static
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_MAX_RETRY_TIME;
import static
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_PORT;
@@ -205,12 +205,14 @@ public class ElasticIndexProviderServiceTest {
public void withAsyncIteratorEnqueueTimeoutMs() {
Map<String, Object> props = new HashMap<>(getElasticConfig());
props.put(PROP_ELASTIC_ASYNC_ITERATOR_ENQUEUE_TIMEOUT_MS, 123);
+ props.put(PROP_ELASTIC_FACETS_EVALUATION_TIMEOUT_MS, 321);
MockOsgi.activate(service, context.bundleContext(), props);
QueryIndexProvider queryIndexProvider =
context.getService(QueryIndexProvider.class);
assertNotNull(queryIndexProvider);
ElasticIndexProvider elasticIndexProvider = (ElasticIndexProvider)
queryIndexProvider;
assertEquals(123,
elasticIndexProvider.getAsyncIteratorEnqueueTimeoutMs());
+ assertEquals(321, elasticIndexProvider.getFacetsEvaluationTimeoutMs());
MockOsgi.deactivate(service, context.bundleContext());
}