You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2008/10/19 01:54:45 UTC

svn commit: r705938 - in /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state: ChangeLog.java XAItemStateManager.java

Author: jukka
Date: Sat Oct 18 16:54:45 2008
New Revision: 705938

URL: http://svn.apache.org/viewvc?rev=705938&view=rev
Log:
JCR-1813: Invalid journal records during XATransactions

Only update the repository in an XA transaction if there actually are repository changes within that transaction.

Fix proposed by Stephane Landelle.

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChangeLog.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChangeLog.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChangeLog.java?rev=705938&r1=705937&r2=705938&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChangeLog.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChangeLog.java Sat Oct 18 16:54:45 2008
@@ -49,6 +49,20 @@
     private final Map modifiedRefs = new LinkedMap();
 
     /**
+     * Checks whether this change log contains any changes. This method is
+     * used to avoid extra work on updates that contain no changes.
+     *
+     * @since Apache Jackrabbit 1.5
+     * @see <a href="https://issues.apache.org/jira/browse/JCR-1813">JCR-1813</a>
+     * @return <code>true</code> if this log contains at least one change,
+     *         <code>false</code> otherwise
+     */
+    public boolean hasUpdates() { 
+        return !(addedStates.isEmpty() && modifiedStates.isEmpty()
+                && deletedStates.isEmpty() && modifiedRefs.isEmpty()); 
+    }
+
+    /**
      * A state has been added
      *
      * @param state state that has been added

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java?rev=705938&r1=705937&r2=705938&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java Sat Oct 18 16:54:45 2008
@@ -138,7 +138,7 @@
      */
     public void prepare(TransactionContext tx) throws TransactionException {
         ChangeLog txLog = (ChangeLog) tx.getAttribute(attributeName);
-        if (txLog != null) {
+        if (txLog != null && txLog.hasUpdates()) {
             try {
                 if (virtualProvider != null) {
                     updateVirtualReferences(txLog);
@@ -159,7 +159,7 @@
      */
     public void commit(TransactionContext tx) throws TransactionException {
         ChangeLog txLog = (ChangeLog) tx.getAttribute(attributeName);
-        if (txLog != null) {
+        if (txLog != null && txLog.hasUpdates()) {
             try {
                 update.end();
             } catch (ItemStateException ise) {
@@ -175,7 +175,7 @@
      */
     public void rollback(TransactionContext tx) {
         ChangeLog txLog = (ChangeLog) tx.getAttribute(attributeName);
-        if (txLog != null) {
+        if (txLog != null && txLog.hasUpdates()) {
             if (update != null) {
                 update.cancel();
             }