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 <[email protected]>
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 + "'");
}
}