This is an automated email from the ASF dual-hosted git repository.
thomasm 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 255950d432 OAK-12063: Remove obsolete feature toggles
FT_NAME_IMPROVED_IS_NULL_COST, FT_OPTIMIZE_IN_RESTRICTIONS_FOR_FUNCTIONS, and
FT_NAME_PREFETCH_FOR_QUERIES (#2690)
255950d432 is described below
commit 255950d432fc058df03012b85d51b0683f51b4a7
Author: Benjamin Habegger <[email protected]>
AuthorDate: Wed Feb 4 17:18:49 2026 +0100
OAK-12063: Remove obsolete feature toggles FT_NAME_IMPROVED_IS_NULL_COST,
FT_OPTIMIZE_IN_RESTRICTIONS_FOR_FUNCTIONS, and FT_NAME_PREFETCH_FOR_QUERIES
(#2690)
---
.../main/java/org/apache/jackrabbit/oak/Oak.java | 21 +---------------
.../jackrabbit/oak/query/QueryEngineSettings.java | 28 ----------------------
.../jackrabbit/oak/query/ast/LowerCaseImpl.java | 3 ---
.../oak/query/ast/NodeLocalNameImpl.java | 3 ---
.../jackrabbit/oak/query/ast/NodeNameImpl.java | 3 ---
.../apache/jackrabbit/oak/query/ast/PathImpl.java | 3 ---
.../jackrabbit/oak/query/ast/UpperCaseImpl.java | 3 ---
.../jackrabbit/oak/query/index/FilterImpl.java | 6 -----
.../oak/query/QueryEngineSettingsServiceTest.java | 28 +---------------------
.../apache/jackrabbit/oak/spi/query/Filter.java | 6 -----
.../jackrabbit/oak/spi/query/QueryLimits.java | 18 +++++++-------
.../search/spi/query/FulltextIndexPlanner.java | 10 +++-----
12 files changed, 15 insertions(+), 117 deletions(-)
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
index 3dda158b48..66b5f523d5 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
@@ -577,22 +577,11 @@ public class Oak {
}
if (queryEngineSettings != null) {
- Feature prefetchFeature =
newFeature(QueryEngineSettings.FT_NAME_PREFETCH_FOR_QUERIES, whiteboard);
- LOG.info("Registered Prefetch feature: " +
QueryEngineSettings.FT_NAME_PREFETCH_FOR_QUERIES);
- closer.register(prefetchFeature);
- queryEngineSettings.setPrefetchFeature(prefetchFeature);
- Feature improvedIsNullCostFeature =
newFeature(QueryEngineSettings.FT_NAME_IMPROVED_IS_NULL_COST, whiteboard);
- LOG.info("Registered improved cost feature: " +
QueryEngineSettings.FT_NAME_IMPROVED_IS_NULL_COST);
- closer.register(improvedIsNullCostFeature);
-
queryEngineSettings.setImprovedIsNullCostFeature(improvedIsNullCostFeature);
- Feature optimizeInRestrictionsForFunctions =
newFeature(QueryEngineSettings.FT_OPTIMIZE_IN_RESTRICTIONS_FOR_FUNCTIONS,
whiteboard);
- LOG.info("Registered optimize in restrictions for functions
feature: " + QueryEngineSettings.FT_OPTIMIZE_IN_RESTRICTIONS_FOR_FUNCTIONS);
- closer.register(optimizeInRestrictionsForFunctions);
-
queryEngineSettings.setOptimizeInRestrictionsForFunctions(optimizeInRestrictionsForFunctions);
Feature sortUnionQueryByScoreFeature =
newFeature(QueryEngineSettings.FT_SORT_UNION_QUERY_BY_SCORE, whiteboard);
LOG.info("Registered sort union query by score feature: " +
QueryEngineSettings.FT_SORT_UNION_QUERY_BY_SCORE);
closer.register(sortUnionQueryByScoreFeature);
queryEngineSettings.setSortUnionQueryByScoreFeature(sortUnionQueryByScoreFeature);
+
Feature optimizeXPathUnion =
newFeature(QueryEngineSettings.FT_OPTIMIZE_XPATH_UNION, whiteboard);
LOG.info("Registered optimize XPath union feature: " +
QueryEngineSettings.FT_OPTIMIZE_XPATH_UNION);
closer.register(optimizeXPathUnion);
@@ -1005,14 +994,6 @@ public class Oak {
settings.setPrefetchFeature(prefetch);
}
- public void setImprovedIsNullCostFeature(@Nullable Feature feature) {
- settings.setImprovedIsNullCostFeature(feature);
- }
-
- public void setOptimizeInRestrictionsForFunctions(@Nullable Feature
feature) {
- settings.setOptimizeInRestrictionsForFunctions(feature);
- }
-
public void setSortUnionQueryByScoreFeature(@Nullable Feature feature)
{
settings.setSortUnionQueryByScoreFeature(feature);
}
diff --git
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
index f34edce0b0..f7304749af 100644
---
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
+++
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
@@ -61,12 +61,6 @@ public class QueryEngineSettings implements
QueryEngineSettingsMBean, QueryLimit
public static final String OAK_QUERY_PREFETCH_COUNT = "oak.prefetchCount";
- public static final String FT_NAME_PREFETCH_FOR_QUERIES = "FT_OAK-10490";
-
- public static final String FT_NAME_IMPROVED_IS_NULL_COST = "FT_OAK-10532";
-
- public static final String FT_OPTIMIZE_IN_RESTRICTIONS_FOR_FUNCTIONS =
"FT_OAK-11214";
-
public static final String FT_SORT_UNION_QUERY_BY_SCORE = "FT_OAK-11949";
public static final String FT_OPTIMIZE_XPATH_UNION = "FT_OAK-12007";
@@ -126,8 +120,6 @@ public class QueryEngineSettings implements
QueryEngineSettingsMBean, QueryLimit
private final long queryLengthErrorLimit =
Long.getLong(OAK_QUERY_LENGTH_ERROR_LIMIT, 100 * 1024 * 1024); //100MB
private Feature prefetchFeature;
- private Feature improvedIsNullCostFeature;
- private Feature optimizeInRestrictionsForFunctions;
private Feature sortUnionQueryByScoreFeature;
private Feature optimizeXPathUnion;
@@ -234,26 +226,6 @@ public class QueryEngineSettings implements
QueryEngineSettingsMBean, QueryLimit
System.setProperty(OAK_FAST_QUERY_SIZE, String.valueOf(fastQuerySize));
}
- public void setImprovedIsNullCostFeature(@Nullable Feature feature) {
- this.improvedIsNullCostFeature = feature;
- }
-
- @Override
- public boolean getImprovedIsNullCost() {
- // enabled if the feature toggle is not used
- return improvedIsNullCostFeature == null ||
improvedIsNullCostFeature.isEnabled();
- }
-
- public void setOptimizeInRestrictionsForFunctions(@Nullable Feature
feature) {
- this.optimizeInRestrictionsForFunctions = feature;
- }
-
- @Override
- public boolean getOptimizeInRestrictionsForFunctions() {
- // enabled if the feature toggle is not used
- return optimizeInRestrictionsForFunctions == null ||
optimizeInRestrictionsForFunctions.isEnabled();
- }
-
public void setSortUnionQueryByScoreFeature(@Nullable Feature feature) {
this.sortUnionQueryByScoreFeature = feature;
}
diff --git
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java
index a9e9a38535..1b930e59ed 100644
---
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java
+++
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java
@@ -105,9 +105,6 @@ public class LowerCaseImpl extends DynamicOperandImpl {
public void restrictList(FilterImpl f, List<PropertyValue> list) {
// "LOWER(x) IN (A, B)" implies x is not null
operand.restrict(f, Operator.NOT_EQUAL, null);
- if (!f.getQueryLimits().getOptimizeInRestrictionsForFunctions()) {
- return;
- }
String fn = getFunction(f.getSelector());
if (fn != null) {
f.restrictPropertyAsList(QueryConstants.FUNCTION_RESTRICTION_PREFIX + fn, list);
diff --git
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
index 49d6d69b46..d52215ca0d 100644
---
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
+++
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
@@ -109,9 +109,6 @@ public class NodeLocalNameImpl extends DynamicOperandImpl {
@Override
public void restrictList(FilterImpl f, List<PropertyValue> list) {
- if (!f.getQueryLimits().getOptimizeInRestrictionsForFunctions()) {
- return;
- }
String fn = getFunction(f.getSelector());
if (fn != null) {
f.restrictPropertyAsList(QueryConstants.FUNCTION_RESTRICTION_PREFIX + fn, list);
diff --git
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
index 7c799153f7..4a008c4bbe 100644
---
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
+++
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
@@ -111,9 +111,6 @@ public class NodeNameImpl extends DynamicOperandImpl {
@Override
public void restrictList(FilterImpl f, List<PropertyValue> list) {
- if (!f.getQueryLimits().getOptimizeInRestrictionsForFunctions()) {
- return;
- }
String fn = getFunction(f.getSelector());
if (fn != null) {
f.restrictPropertyAsList(QueryConstants.FUNCTION_RESTRICTION_PREFIX + fn, list);
diff --git
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PathImpl.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PathImpl.java
index 131437fee3..bebc512fbe 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PathImpl.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PathImpl.java
@@ -95,9 +95,6 @@ public class PathImpl extends DynamicOperandImpl {
@Override
public void restrictList(FilterImpl f, List<PropertyValue> list) {
- if (!f.getQueryLimits().getOptimizeInRestrictionsForFunctions()) {
- return;
- }
String fn = getFunction(f.getSelector());
if (fn != null) {
f.restrictPropertyAsList(QueryConstants.FUNCTION_RESTRICTION_PREFIX + fn, list);
diff --git
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java
index af67009816..e8588e654c 100644
---
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java
+++
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java
@@ -98,9 +98,6 @@ public class UpperCaseImpl extends DynamicOperandImpl {
public void restrictList(FilterImpl f, List<PropertyValue> list) {
// "UPPER(x) IN (A, B)" implies x is not null
operand.restrict(f, Operator.NOT_EQUAL, null);
- if (!f.getQueryLimits().getOptimizeInRestrictionsForFunctions()) {
- return;
- }
String fn = getFunction(f.getSelector());
if (fn != null) {
f.restrictPropertyAsList(QueryConstants.FUNCTION_RESTRICTION_PREFIX + fn, list);
diff --git
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java
index a0d41c1e6f..a0910a0dcd 100644
---
a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java
+++
b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java
@@ -145,12 +145,6 @@ public class FilterImpl implements Filter {
public boolean getFailTraversal() {
return false;
}
-
- @Override
- public boolean getImprovedIsNullCost() {
- return true;
- }
-
});
}
diff --git
a/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryEngineSettingsServiceTest.java
b/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryEngineSettingsServiceTest.java
index e12fa98090..ef2ed3cf8e 100644
---
a/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryEngineSettingsServiceTest.java
+++
b/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryEngineSettingsServiceTest.java
@@ -19,22 +19,16 @@
package org.apache.jackrabbit.oak.query;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.jackrabbit.oak.api.jmx.QueryEngineSettingsMBean;
-import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
-import org.apache.jackrabbit.oak.spi.toggle.Feature;
-import org.apache.jackrabbit.oak.spi.toggle.FeatureToggle;
-import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils;
import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import static org.apache.jackrabbit.oak.spi.toggle.Feature.newFeature;
import static org.junit.Assert.*;
public class QueryEngineSettingsServiceTest {
@@ -94,26 +88,6 @@ public class QueryEngineSettingsServiceTest {
assertEquals(0, settings.getPrefetchCount());
}
- @Test
- public void prefetchWithFeature() {
- QueryEngineSettings settings = new QueryEngineSettings();
- OsgiContext context = new OsgiContext();
- OsgiWhiteboard whiteboard = new
OsgiWhiteboard(context.bundleContext());
- try (Feature feature =
newFeature(QueryEngineSettings.FT_NAME_PREFETCH_FOR_QUERIES, whiteboard)) {
- assertFalse(feature.isEnabled());
- List<FeatureToggle> toggles =
WhiteboardUtils.getServices(whiteboard, FeatureToggle.class);
- assertEquals(1, toggles.size());
- FeatureToggle toggle = toggles.get(0);
- assertEquals(QueryEngineSettings.FT_NAME_PREFETCH_FOR_QUERIES,
toggle.getName());
- assertEquals(0, settings.getPrefetchCount());
- toggle.setEnabled(true);
- settings.setPrefetchFeature(feature);
- assertEquals(20, settings.getPrefetchCount());
- toggle.setEnabled(false);
- assertEquals(0, settings.getPrefetchCount());
- }
- }
-
@Test
public void sysPropSupercedes() throws Exception{
System.setProperty(QueryEngineSettings.OAK_QUERY_LIMIT_IN_MEMORY,
String.valueOf(QueryEngineSettings
@@ -149,4 +123,4 @@ public class QueryEngineSettingsServiceTest {
}
}
-}
\ No newline at end of file
+}
diff --git
a/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java
b/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java
index 848b445822..7963eef18d 100644
---
a/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java
+++
b/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java
@@ -461,12 +461,6 @@ public interface Filter {
public boolean getFailTraversal() {
return false;
}
-
- @Override
- public boolean getImprovedIsNullCost() {
- return true;
- }
-
};
@Override
diff --git
a/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryLimits.java
b/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryLimits.java
index 050e1bf9da..b0b60395af 100644
---
a/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryLimits.java
+++
b/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryLimits.java
@@ -30,22 +30,24 @@ public interface QueryLimits {
boolean getFullTextComparisonWithoutIndex();
/**
- * See OAK-10532. This method is used for backward compatibility
- * (bug compatibility) only.
+ * See OAK-10532. This method is kept only to avoid breaking compatibility.
*
- * @return true, except when backward compatibility for OAK-10532 is
enabled
+ * @return true
+ * @deprecated Setting is no longer used
*/
+ @Deprecated
default boolean getImprovedIsNullCost() {
return true;
}
/**
- * See OAK-11214. This method is used for backward compatibility
- * (bug compatibility) only.
+ * See OAK-11214. This method is kept only to avoid breaking compatibility.
*
- * @return true, except when backward compatibility for OAK-11214 is
enabled
+ * @return true
+ * @deprecated Setting is no longer used
*/
- default public boolean getOptimizeInRestrictionsForFunctions() {
+ @Deprecated
+ default boolean getOptimizeInRestrictionsForFunctions() {
return true;
}
@@ -66,6 +68,6 @@ public interface QueryLimits {
default boolean isInferenceEnabled(){
return false;
- };
+ }
}
diff --git
a/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java
b/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java
index dbc275b150..9fffe4c866 100644
---
a/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java
+++
b/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java
@@ -86,7 +86,6 @@ public class FulltextIndexPlanner {
private final IndexNode indexNode;
protected PlanResult result;
protected static boolean useActualEntryCount;
- private final boolean improvedIsNullCost;
static {
useActualEntryCount =
Boolean.parseBoolean(System.getProperty(FLAG_ENTRY_COUNT, "true"));
@@ -104,7 +103,6 @@ public class FulltextIndexPlanner {
this.definition = indexNode.getDefinition();
this.filter = filter;
this.sortOrder = sortOrder;
- this.improvedIsNullCost =
filter.getQueryLimits().getImprovedIsNullCost();
}
public IndexPlan getPlan() {
@@ -840,10 +838,8 @@ public class FulltextIndexPlanner {
PropertyRestriction pr = filter.getPropertyRestriction(key);
String fieldName = key;
// for "is not null" we can use an asterisk query
- if (improvedIsNullCost) {
- if (pr != null && pr.isNullRestriction()) {
- fieldName = FieldNames.NULL_PROPS;
- }
+ if (pr != null && pr.isNullRestriction()) {
+ fieldName = FieldNames.NULL_PROPS;
}
int docCntForField = indexStatistics.getDocCountFor(fieldName);
if (docCntForField == -1) {
@@ -857,7 +853,7 @@ public class FulltextIndexPlanner {
// don't use weight for "is not null" restrictions
// as all documents with this field can match;
weight = 1;
- } else if (improvedIsNullCost && pr.isNullRestriction()) {
+ } else if (pr.isNullRestriction()) {
// don't use the weight for "is null" restrictions
// as all documents with ":nullProps" can match
weight = 1;