This is an automated email from the ASF dual-hosted git repository. kwin pushed a commit to branch bugfix/improve-nondefaultmonuntwritereportingobserver-exception-message in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit fa4d3870933e5d154339c6c859ebf58d9f31fa04 Author: Konrad Windszus <[email protected]> AuthorDate: Fri Feb 16 11:57:27 2024 +0100 OAK-10655 Improve error message in NonDefaultMountWriteReportingObserver Do no longer generate an exception just for retrieving the stack trace --- .../impl/NonDefaultMountWriteReportingObserver.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/impl/NonDefaultMountWriteReportingObserver.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/impl/NonDefaultMountWriteReportingObserver.java index f8ff24aeab..e5b88b427a 100644 --- a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/impl/NonDefaultMountWriteReportingObserver.java +++ b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/impl/NonDefaultMountWriteReportingObserver.java @@ -20,8 +20,11 @@ package org.apache.jackrabbit.oak.composite.impl; import static org.apache.jackrabbit.guava.common.base.Preconditions.checkNotNull; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.jackrabbit.oak.commons.PathUtils; import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState; @@ -102,14 +105,13 @@ public class NonDefaultMountWriteReportingObserver implements Observer { public void report() { if ( changes.isEmpty() ) return; - - RuntimeException location = new RuntimeException(); - for ( StackTraceElement element : location.getStackTrace() ) + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + for ( StackTraceElement element : stackTrace ) for ( String acceptedClassName : cfg.ignoredClassNameFragments() ) if ( element.getClassName().contains(acceptedClassName )) return; - reporter.reportChanges(changes, location); + reporter.reportChanges(changes, Arrays.stream(stackTrace)); } @Override @@ -150,10 +152,11 @@ public class NonDefaultMountWriteReportingObserver implements Observer { static class ChangeReporter { private static final int LOG_OUTPUT_MAX_ITEMS = 50; + private static final String STACK_TRACE_DELIMITER = "\tat "; private final Logger logger = LoggerFactory.getLogger(getClass()); - void reportChanges(Map<String, String> changes, RuntimeException location) { + void reportChanges(Map<String, String> changes, Stream<StackTraceElement> stackTrace) { if ( !logger.isWarnEnabled() ) return; @@ -170,7 +173,8 @@ public class NonDefaultMountWriteReportingObserver implements Observer { out.append("\n- ").append(e.getKey()).append(" : ").append(e.getValue()) ); - logger.warn(out.toString(), location); + logger.warn("{}. Changes triggered in {}{}", out, STACK_TRACE_DELIMITER, + stackTrace.map(StackTraceElement::toString).collect(Collectors.joining(STACK_TRACE_DELIMITER))); } } }
