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)));
         }
     }
 }

Reply via email to