This is an automated email from the ASF dual-hosted git repository. baedke 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 dc6dc4e15f OAK-10768: query-spi: deprecate use of slf4j.event.Level in QueryInde… (#1426) dc6dc4e15f is described below commit dc6dc4e15fea721e277f0700d8730e61c4cc2b48 Author: mbaedke <manfred.bae...@gmail.com> AuthorDate: Fri May 10 14:36:30 2024 +0200 OAK-10768: query-spi: deprecate use of slf4j.event.Level in QueryInde… (#1426) done --- .../org/apache/jackrabbit/oak/query/QueryImpl.java | 16 +++---- .../jackrabbit/oak/spi/query/QueryIndex.java | 55 ++++++++++++++++++++-- .../jackrabbit/oak/spi/query/package-info.java | 2 +- .../search/spi/query/FulltextIndexPlanner.java | 5 +- 4 files changed, 61 insertions(+), 17 deletions(-) diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java index 028c0dceab..b314eb1a33 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java @@ -555,25 +555,25 @@ public class QueryImpl implements Query { for (SelectorImpl s : selectors) { if (s.getExecutionPlan() != null && s.getExecutionPlan().getIndexPlan() != null) { - s.getExecutionPlan().getIndexPlan().getAdditionalMessages().forEach((level, list) -> { + s.getExecutionPlan().getIndexPlan().getAdditionalLogMessages().forEach((level, list) -> { switch (level) { - case TRACE: for (String msg : list) { + case "TRACE": for (String msg : list) { LOG.trace(msg); } break; - case DEBUG: for (String msg : list) { + case "DEBUG": for (String msg : list) { LOG.debug(msg); } - break; - case INFO: for (String msg : list) { + break; + case "INFO": for (String msg : list) { LOG.info(msg); } - break; - case WARN: for (String msg : list) { + break; + case "WARN": for (String msg : list) { LOG.warn(msg); } break; - case ERROR: for (String msg : list) { + case "ERROR": for (String msg : list) { LOG.error(msg); } break; diff --git a/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java b/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java index 34f9adff06..6c10a98ffb 100644 --- a/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java +++ b/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java @@ -32,8 +32,11 @@ import org.osgi.annotation.versioning.ProviderType; import org.apache.jackrabbit.guava.common.collect.Maps; import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.spi.state.NodeState; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.slf4j.event.Level; +import static java.util.stream.Collectors.toMap; import static org.apache.jackrabbit.oak.spi.query.Filter.PropertyRestriction; /** @@ -221,6 +224,8 @@ public interface QueryIndex { @ProviderType interface IndexPlan extends Cloneable{ + Logger LOG = LoggerFactory.getLogger(QueryIndex.IndexPlan.class); + /** * The cost to execute the query once. The returned value should * approximately match the number of disk read operations plus the @@ -361,17 +366,32 @@ public interface QueryIndex { * This method can be used for communicating any messages which should be logged if this plan is selected for execution. * The messages are returned as a map whose key indicates log level and value is a list of messages against that * log level. + + * @deprecated use {@link #getAdditionalLogMessages()} instead * @return map containing log messages. */ + @Deprecated(forRemoval = true) default Map<Level, List<String>> getAdditionalMessages() { - return Collections.emptyMap(); + LOG.warn("use of deprecated API - this method is going to be removed in future Oak releases - see OAK-10768 for details"); + return getAdditionalLogMessages().entrySet().stream().collect(toMap(entry -> Level.valueOf(entry.getKey()), Map.Entry::getValue)); } + /** + * This method can be used for communicating any messages which should be logged if this plan is selected for execution. + * The messages are returned as a map whose key indicates log level and value is a list of messages against that + * log level. + + * @return map containing log messages. + */ + default Map<String, List<String>> getAdditionalLogMessages() { return Collections.emptyMap(); } + /** * A builder for index plans. */ class Builder { + private static Logger LOG = LoggerFactory.getLogger(QueryIndex.IndexPlan.Builder.class); + protected double costPerExecution = 1.0; protected double costPerEntry = 1.0; protected long estimatedEntryCount = 1000000; @@ -388,7 +408,7 @@ public interface QueryIndex { protected String planName; protected boolean deprecated; protected boolean logWarningForPathFilterMismatch; - protected final Map<Level, List<String>> additionalMessages = new HashMap<>(); + protected final Map<String, List<String>> additionalMessages = new HashMap<>(); public Builder setCostPerExecution(double costPerExecution) { this.costPerExecution = costPerExecution; @@ -415,7 +435,33 @@ public interface QueryIndex { return this; } + /** + * @deprecated use {@link #addAdditionalMessage(String level, String s)} instead + * */ + @Deprecated(forRemoval = true) public Builder addAdditionalMessage(Level level, String s) { + LOG.warn("use of deprecated API - this method is going to be removed in future Oak releases - see OAK-10768 for details"); + this.additionalMessages.compute(level.name(), (k,v) -> { + if (v == null) { + v = new ArrayList<>(); + } + v.add(s); + return v; + }); + return this; + } + + public Builder addAdditionalMessage(String level, String s) { + switch (level) { + case "TRACE": + case "DEBUG": + case "INFO": + case "WARN": + case "ERROR": + break; + default: + throw new IllegalArgumentException("unsupported log level: " + level); + } this.additionalMessages.compute(level, (k,v) -> { if (v == null) { v = new ArrayList<>(); @@ -517,7 +563,7 @@ public interface QueryIndex { private final boolean deprecated = Builder.this.deprecated; private final boolean logWarningForPathFilterMismatch = Builder.this.logWarningForPathFilterMismatch; - private final Map<Level, List<String>> additionalMessages = Builder.this.additionalMessages; + private final Map<String, List<String>> additionalMessages = Builder.this.additionalMessages; private String getAdditionalMessageString() { return additionalMessages.entrySet().stream() @@ -661,10 +707,9 @@ public interface QueryIndex { } @Override - public Map<Level, List<String>> getAdditionalMessages() { + public Map<String, List<String>> getAdditionalLogMessages() { return additionalMessages; } - }; } diff --git a/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/package-info.java b/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/package-info.java index 1287024c94..074a74a43e 100644 --- a/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/package-info.java +++ b/oak-query-spi/src/main/java/org/apache/jackrabbit/oak/spi/query/package-info.java @@ -18,7 +18,7 @@ /** * This package contains oak query index related classes. */ -@Version("1.8.0") +@Version("2.0.0") package org.apache.jackrabbit.oak.spi.query; import org.osgi.annotation.versioning.Version; 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 855d87c668..4b914c9c76 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 @@ -58,7 +58,6 @@ import org.apache.jackrabbit.oak.spi.query.fulltext.FullTextVisitor; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.slf4j.event.Level; import static org.apache.jackrabbit.guava.common.collect.Lists.newArrayList; import static org.apache.jackrabbit.guava.common.collect.Lists.newArrayListWithCapacity; @@ -307,13 +306,13 @@ public class FulltextIndexPlanner { if (queryFilterPattern != null) { if (ft != null && !queryFilterPattern.matcher(ft.toString()).find()) { - plan.addAdditionalMessage(Level.WARN, "Potentially improper use of index " + definition.getIndexPath() + " with queryFilterRegex " + plan.addAdditionalMessage("WARN", "Potentially improper use of index " + definition.getIndexPath() + " with queryFilterRegex " + queryFilterPattern + " to search for value '" + ft + "'"); } for (PropertyRestriction pr : filter.getPropertyRestrictions()) { // Ignore properties beginning with ";" like :indexTag / :indexName etx if (!pr.propertyName.startsWith(":") && !queryFilterPattern.matcher(pr.toString()).find()) { - plan.addAdditionalMessage(Level.WARN, "Potentially improper use of index " + definition.getIndexPath() + " with queryFilterRegex " + plan.addAdditionalMessage("WARN", "Potentially improper use of index " + definition.getIndexPath() + " with queryFilterRegex " + queryFilterPattern + " to search for value '" + pr + "'"); } }