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());
     }

Reply via email to