You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2013/09/11 08:39:28 UTC

svn commit: r1521747 - in /jackrabbit/oak/trunk/oak-jcr/src: main/java/org/apache/jackrabbit/oak/jcr/delegate/ main/java/org/apache/jackrabbit/oak/jcr/session/ main/java/org/apache/jackrabbit/oak/jcr/session/operation/ test/resources/

Author: chetanm
Date: Wed Sep 11 06:39:27 2013
New Revision: 1521747

URL: http://svn.apache.org/r1521747
Log:
OAK-946 - Improve support for debugging Oak

Adding logging about high level JCR operation being performed. Logs can be enabled
by turning on DEBUG logs for 'org.apache.jackrabbit.oak.jcr.operations'

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/operation/SessionOperation.java
    jackrabbit/oak/trunk/oak-jcr/src/test/resources/logback-test.xml

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java?rev=1521747&r1=1521746&r2=1521747&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java Wed Sep 11 06:39:27 2013
@@ -57,12 +57,15 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
 
 /**
  * TODO document
  */
 public class SessionDelegate {
     static final Logger log = LoggerFactory.getLogger(SessionDelegate.class);
+    static final Logger operationLogger = LoggerFactory.getLogger("org.apache.jackrabbit.oak.jcr.operations");
 
     private final ContentSession contentSession;
     private final RefreshStrategy refreshStrategy;
@@ -128,7 +131,9 @@ public class SessionDelegate {
         }
         try {
             sessionOpCount++;
-            return sessionOperation.perform();
+            T result =  sessionOperation.perform();
+            logOperationDetails(sessionOperation);
+            return result;
         } finally {
             sessionOpCount--;
             if (sessionOperation.isUpdate()) {
@@ -424,6 +429,17 @@ public class SessionDelegate {
 
     //------------------------------------------------------------< internal >---
 
+    private <T> void logOperationDetails(SessionOperation<T> ops)  throws RepositoryException {
+        if(operationLogger.isDebugEnabled()){
+            String desc = ops.description();
+            if(desc != null){
+                Marker sessionMarker = MarkerFactory.getMarker(this.toString());
+                operationLogger.debug(sessionMarker,desc);
+            }
+        }
+    }
+
+
     /**
      * Wraps the given {@link CommitFailedException} instance using the
      * appropriate {@link RepositoryException} subclass based on the

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java?rev=1521747&r1=1521746&r2=1521747&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java Wed Sep 11 06:39:27 2013
@@ -212,6 +212,11 @@ public class NodeImpl<T extends NodeDele
                 dlg.remove();
                 return null;
             }
+
+            @Override
+            public String description() throws RepositoryException {
+                return String.format("Removing node [%s]",dlg.getPath());
+            }
         });
     }
 
@@ -244,6 +249,8 @@ public class NodeImpl<T extends NodeDele
 
         SessionImpl.checkIndexOnName(sessionContext, relPath);
         return perform(new ItemWriteOperation<Node>() {
+            private NodeDelegate nodeAdded;
+
             @Override
             public Node perform() throws RepositoryException {
                 String oakName = PathUtils.getName(oakPath);
@@ -280,8 +287,15 @@ public class NodeImpl<T extends NodeDele
                 if (added == null) {
                     throw new ItemExistsException();
                 }
+                nodeAdded = added;
+
                 return NodeImpl.createNode(added, sessionContext);
             }
+
+            @Override
+            public String description() {
+                return String.format("Adding node [%s]",nodeAdded.getPath());
+            }
         });
     }
 
@@ -1291,7 +1305,7 @@ public class NodeImpl<T extends NodeDele
     }
 
     private Property internalSetProperty(
-            String jcrName, final Value value, final boolean exactTypeMatch)
+            final String jcrName, final Value value, final boolean exactTypeMatch)
             throws RepositoryException {
         final String oakName = getOakPathOrThrow(checkNotNull(jcrName));
         final PropertyState state = createSingleState(
@@ -1311,11 +1325,16 @@ public class NodeImpl<T extends NodeDele
                         dlg.setProperty(state, exactTypeMatch, false),
                         sessionContext);
             }
+
+            @Override
+            public String description() throws RepositoryException {
+                return String.format("Setting property [%s/%s]",dlg.getPath(),jcrName);
+            }
         });
     }
 
     private Property internalSetProperty(
-            String jcrName, final Value[] values,
+            final String jcrName, final Value[] values,
             final int type, final boolean exactTypeMatch)
             throws RepositoryException {
         final String oakName = getOakPathOrThrow(checkNotNull(jcrName));
@@ -1336,6 +1355,11 @@ public class NodeImpl<T extends NodeDele
                         dlg.setProperty(state, exactTypeMatch, false),
                         sessionContext);
             }
+
+            @Override
+            public String description() throws RepositoryException {
+                return String.format("Setting property [%s/%s]",dlg.getPath(),jcrName);
+            }
         });
     }
 
@@ -1371,6 +1395,11 @@ public class NodeImpl<T extends NodeDele
                 }
                 return new PropertyImpl(property, sessionContext);
             }
+
+            @Override
+            public String description() throws RepositoryException {
+                return String.format("Removing property [%s]",jcrName);
+            }
         });
     }
 

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java?rev=1521747&r1=1521746&r2=1521747&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java Wed Sep 11 06:39:27 2013
@@ -108,6 +108,11 @@ public class PropertyImpl extends ItemIm
                 dlg.remove();
                 return null;
             }
+
+            @Override
+            public String description() throws RepositoryException {
+                return String.format("Removing property [%s/%s] ",dlg.getPath(),dlg.getName());
+            }
         });
     }
 
@@ -446,6 +451,11 @@ public class PropertyImpl extends ItemIm
                 dlg.setState(createSingleState(dlg.getName(), converted, type));
                 return null;
             }
+
+            @Override
+            public String description() throws RepositoryException {
+                return String.format("Setting property [%s/%s]",dlg.getPath(),dlg.getName());
+            }
         });
     }
 
@@ -471,6 +481,11 @@ public class PropertyImpl extends ItemIm
                 dlg.setState(createMultiState(dlg.getName(), converted, type));
                 return null;
             }
+
+            @Override
+            public String description() throws RepositoryException {
+                return String.format("Setting property [%s/%s]",dlg.getPath(),dlg.getName());
+            }
         });
     }
 

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java?rev=1521747&r1=1521746&r2=1521747&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java Wed Sep 11 06:39:27 2013
@@ -399,6 +399,11 @@ public class SessionImpl implements Jack
             public boolean isSave() {
                 return true;
             }
+
+            @Override
+            public String description() {
+                return "Session saved";
+            }
         });
     }
 

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/operation/SessionOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/operation/SessionOperation.java?rev=1521747&r1=1521746&r2=1521747&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/operation/SessionOperation.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/operation/SessionOperation.java Wed Sep 11 06:39:27 2013
@@ -61,4 +61,14 @@ public abstract class SessionOperation<T
 
     public abstract T perform() throws RepositoryException;
 
+    /**
+     * Provide details about the operation being performed
+     *
+     * @return operation description. Would return <code>null</code>
+     * if no description provided
+     */
+    public String description() throws RepositoryException{
+        return null;
+    }
+
 }

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/resources/logback-test.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/resources/logback-test.xml?rev=1521747&r1=1521746&r2=1521747&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/resources/logback-test.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/resources/logback-test.xml Wed Sep 11 06:39:27 2013
@@ -25,12 +25,13 @@
     <appender name="file" class="ch.qos.logback.core.FileAppender">
         <file>target/unit-tests.log</file>
         <encoder>
-            <pattern>%date{HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n</pattern>
+            <pattern>%date{HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %marker %msg%n</pattern>
         </encoder>
     </appender>
 
     <logger name="org.apache.jackrabbit.test.api" level="DEBUG"/>
     <logger name="com.mongodb.tcp" level="ERROR"/>
+    <logger name="org.apache.jackrabbit.oak.jcr.operations" level="INFO"/>
 
     <root level="INFO">
         <!--