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 1a675de5c5 OAK-11025 Silence more warnings for ordered properties
(#1651)
1a675de5c5 is described below
commit 1a675de5c51b3cabd4f2ca261b269b56b84acc46
Author: Thomas Mueller <[email protected]>
AuthorDate: Fri Aug 16 16:50:55 2024 +0200
OAK-11025 Silence more warnings for ordered properties (#1651)
---
oak-commons/pom.xml | 1 +
.../jackrabbit/oak/commons/log}/LogSilencer.java | 2 +-
.../jackrabbit/oak/commons/log/package-info.java | 26 +++++++++++
.../oak/commons/log}/LogSilencerTest.java | 2 +-
.../plugins/index/lucene/LuceneDocumentMaker.java | 52 ++++++++++++++++------
.../oak/plugins/document/NodeDocument.java | 38 ++++++++--------
.../oak/plugins/document/SplitDocumentCleanUp.java | 13 +++---
7 files changed, 92 insertions(+), 42 deletions(-)
diff --git a/oak-commons/pom.xml b/oak-commons/pom.xml
index e0b1cbc186..14d3e8e929 100644
--- a/oak-commons/pom.xml
+++ b/oak-commons/pom.xml
@@ -51,6 +51,7 @@
org.apache.jackrabbit.oak.commons.concurrent,
org.apache.jackrabbit.oak.commons.io,
org.apache.jackrabbit.oak.commons.json,
+ org.apache.jackrabbit.oak.commons.log,
org.apache.jackrabbit.oak.commons.sort,
org.apache.jackrabbit.oak.commons.properties
</Export-Package>
diff --git
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LogSilencer.java
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/log/LogSilencer.java
similarity index 98%
rename from
oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LogSilencer.java
rename to
oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/log/LogSilencer.java
index d05d9e12ab..4ed3f3b543 100644
---
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LogSilencer.java
+++
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/log/LogSilencer.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.jackrabbit.oak.plugins.document.util;
+package org.apache.jackrabbit.oak.commons.log;
import java.time.Duration;
import java.util.Collections;
diff --git
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/log/package-info.java
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/log/package-info.java
new file mode 100644
index 0000000000..4da92d131a
--- /dev/null
+++
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/log/package-info.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * <em>For Oak internal use only. Do not use outside Oak components.</em>
+ */
+@Internal(since = "1.0.0")
+@Version("1.0.0")
+package org.apache.jackrabbit.oak.commons.log;
+
+import org.osgi.annotation.versioning.Version;
+import org.apache.jackrabbit.oak.commons.annotations.Internal;
+
diff --git
a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/LogSilencerTest.java
b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/log/LogSilencerTest.java
similarity index 98%
rename from
oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/LogSilencerTest.java
rename to
oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/log/LogSilencerTest.java
index 4502031511..0caa3693c3 100644
---
a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/LogSilencerTest.java
+++
b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/log/LogSilencerTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.jackrabbit.oak.plugins.document.util;
+package org.apache.jackrabbit.oak.commons.log;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
diff --git
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneDocumentMaker.java
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneDocumentMaker.java
index 2be705154e..505efa27ce 100644
---
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneDocumentMaker.java
+++
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneDocumentMaker.java
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.plugins.index.lucene;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
+import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -29,6 +30,7 @@ import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.commons.log.LogSilencer;
import
org.apache.jackrabbit.oak.plugins.index.lucene.util.FacetsConfigProvider;
import org.apache.jackrabbit.oak.plugins.index.search.Aggregate;
import org.apache.jackrabbit.oak.plugins.index.search.FieldNames;
@@ -60,14 +62,14 @@ public class LuceneDocumentMaker extends
FulltextDocumentMaker<Document> {
private static final String DYNAMIC_BOOST_SPLIT_REGEX = "[:/]";
- // warn once every 10 seconds at most
- private static final long DUPLICATE_WARNING_INTERVAL_MS = 10 * 1000;
-
private final FacetsConfigProvider facetsConfigProvider;
private final IndexAugmentorFactory augmentorFactory;
- // when did we warn (static, as we construct new objects quite often)
- private static long lastDuplicateWarning;
+ private static final LogSilencer LOG_SILENCER = new
LogSilencer(Duration.ofSeconds(10).toMillis(), 10);
+ private static final String LOG_KEY_DUPLICATE = "Duplicate value";
+ private static final String LOG_KEY_NOT_A_DATE_STRING = "Not a date
string";
+ private static final String LOG_KEY_UNABLE_TO_PARSE = "Unable to parse the
provided date field";
+ private static final String LOG_KEY_FOR_INPUT_STRING = "For input string";
public LuceneDocumentMaker(IndexDefinition definition,
IndexDefinition.IndexingRule indexingRule,
@@ -299,19 +301,43 @@ public class LuceneDocumentMaker extends
FulltextDocumentMaker<Document> {
doc.add(f);
fieldAdded = true;
} else {
- long now = System.currentTimeMillis();
- if (now > lastDuplicateWarning +
DUPLICATE_WARNING_INTERVAL_MS) {
+ if (!LOG_SILENCER.silence(LOG_KEY_DUPLICATE)) {
log.warn("Duplicate value for ordered field {};
ignoring. Possibly duplicate index definition.", f.name());
- lastDuplicateWarning = now;
}
}
}
} catch (Exception e) {
- log.warn(
- "[{}] Ignoring ordered property. Could not convert
property {} of type {} to type {} for path {}",
- getIndexName(), pname,
- Type.fromTag(property.getType().tag(), false),
- Type.fromTag(tag, false), path, e);
+ String message = e.getMessage();
+ String key = null;
+ // This is a known warning, one of:
+ // - IllegalArgumentException: Not a date string
+ // - RuntimeException: Unable to parse the provided date field
+ // - NumberFormatException: For input string
+ // For these we do not log a stack trace, and we only log once
every 10 seconds
+ // (the location of the code can be found if needed, as it's in
Oak)
+ if (message.startsWith("Not a date string")) {
+ key = LOG_KEY_NOT_A_DATE_STRING;
+ } else if (message.startsWith("Unable to parse the provided date
field")) {
+ key = LOG_KEY_UNABLE_TO_PARSE;
+ } else if (message.startsWith("For input string")) {
+ key = LOG_KEY_FOR_INPUT_STRING;
+ }
+ if (key != null) {
+ if (!LOG_SILENCER.silence(key)) {
+ // log without stack trace (as it is known)
+ log.warn(
+ "[{}] Ignoring ordered property. Could not convert
property {} of type {} to type {} for path {}, message {}",
+ getIndexName(), pname,
+ Type.fromTag(property.getType().tag(), false),
+ Type.fromTag(tag, false), path, e.getMessage());
+ }
+ } else {
+ log.warn(
+ "[{}] Ignoring ordered property. Could not convert
property {} of type {} to type {} for path {}",
+ getIndexName(), pname,
+ Type.fromTag(property.getType().tag(), false),
+ Type.fromTag(tag, false), path, e);
+ }
}
return fieldAdded;
}
diff --git
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
index 92218b0ab3..7c1da65208 100644
---
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
+++
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
@@ -16,6 +16,20 @@
*/
package org.apache.jackrabbit.oak.plugins.document;
+import static java.util.Objects.requireNonNull;
+import static java.util.stream.Collectors.toSet;
+import static
org.apache.jackrabbit.guava.common.base.Preconditions.checkArgument;
+import static org.apache.jackrabbit.guava.common.collect.ImmutableList.copyOf;
+import static org.apache.jackrabbit.guava.common.collect.Iterables.filter;
+import static org.apache.jackrabbit.guava.common.collect.Iterables.mergeSorted;
+import static org.apache.jackrabbit.guava.common.collect.Iterables.transform;
+import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
+import static
org.apache.jackrabbit.oak.plugins.document.StableRevisionComparator.REVERSE;
+import static
org.apache.jackrabbit.oak.plugins.document.util.Utils.abortingIterable;
+import static
org.apache.jackrabbit.oak.plugins.document.util.Utils.resolveCommitRevision;
+import static org.apache.jackrabbit.oak.plugins.document.UpdateOp.Key;
+import static org.apache.jackrabbit.oak.plugins.document.UpdateOp.Operation;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -39,42 +53,26 @@ import java.util.function.Predicate;
import org.apache.jackrabbit.guava.common.collect.AbstractIterator;
import org.apache.jackrabbit.guava.common.collect.ImmutableList;
+import org.apache.jackrabbit.guava.common.collect.Iterables;
import org.apache.jackrabbit.guava.common.collect.Lists;
+import org.apache.jackrabbit.guava.common.collect.Maps;
import org.apache.jackrabbit.guava.common.collect.Ordering;
import org.apache.jackrabbit.guava.common.collect.Queues;
+import org.apache.jackrabbit.guava.common.collect.Sets;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
import org.apache.jackrabbit.oak.commons.json.JsopReader;
import org.apache.jackrabbit.oak.commons.json.JsopTokenizer;
import org.apache.jackrabbit.oak.commons.json.JsopWriter;
+import org.apache.jackrabbit.oak.commons.log.LogSilencer;
import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
-import org.apache.jackrabbit.oak.plugins.document.util.LogSilencer;
import org.apache.jackrabbit.oak.plugins.document.util.Utils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.jackrabbit.guava.common.collect.Iterables;
-import org.apache.jackrabbit.guava.common.collect.Maps;
-import org.apache.jackrabbit.guava.common.collect.Sets;
-
-import static java.util.Objects.requireNonNull;
-import static java.util.stream.Collectors.toSet;
-
-import static
org.apache.jackrabbit.guava.common.base.Preconditions.checkArgument;
-import static org.apache.jackrabbit.guava.common.collect.ImmutableList.copyOf;
-import static org.apache.jackrabbit.guava.common.collect.Iterables.filter;
-import static org.apache.jackrabbit.guava.common.collect.Iterables.mergeSorted;
-import static org.apache.jackrabbit.guava.common.collect.Iterables.transform;
-import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
-import static
org.apache.jackrabbit.oak.plugins.document.StableRevisionComparator.REVERSE;
-import static org.apache.jackrabbit.oak.plugins.document.UpdateOp.Key;
-import static org.apache.jackrabbit.oak.plugins.document.UpdateOp.Operation;
-import static
org.apache.jackrabbit.oak.plugins.document.util.Utils.abortingIterable;
-import static
org.apache.jackrabbit.oak.plugins.document.util.Utils.resolveCommitRevision;
-
/**
* A document storing data about a node.
*/
diff --git
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java
index b72b83f8e0..ecfe5ae124 100644
---
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java
+++
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java
@@ -16,23 +16,22 @@
*/
package org.apache.jackrabbit.oak.plugins.document;
+import static
org.apache.jackrabbit.guava.common.base.Preconditions.checkArgument;
+import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
+import static
org.apache.jackrabbit.oak.plugins.document.NodeDocument.SplitDocType.INTERMEDIATE;
+import static
org.apache.jackrabbit.oak.plugins.document.NodeDocument.SplitDocType.NONE;
+
import java.io.Closeable;
import java.io.IOException;
import java.util.List;
import org.apache.jackrabbit.guava.common.collect.Lists;
-
+import org.apache.jackrabbit.oak.commons.log.LogSilencer;
import
org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector.VersionGCStats;
-import org.apache.jackrabbit.oak.plugins.document.util.LogSilencer;
import org.apache.jackrabbit.oak.plugins.document.util.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static
org.apache.jackrabbit.guava.common.base.Preconditions.checkArgument;
-import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
-import static
org.apache.jackrabbit.oak.plugins.document.NodeDocument.SplitDocType.INTERMEDIATE;
-import static
org.apache.jackrabbit.oak.plugins.document.NodeDocument.SplitDocType.NONE;
-
/**
* Implements a split document cleanup.
*/