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 md...@apache.org on 2013/09/11 12:11:56 UTC

svn commit: r1521781 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session: RefreshStrategy.java SessionImpl.java operation/SessionOperation.java

Author: mduerig
Date: Wed Sep 11 10:11:56 2013
New Revision: 1521781

URL: http://svn.apache.org/r1521781
Log:
OAK-960 Enable session refresh state coordination between multiple session in single thread
Avoid refreshing sessions on logout

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/RefreshStrategy.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

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/RefreshStrategy.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/RefreshStrategy.java?rev=1521781&r1=1521780&r2=1521781&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/RefreshStrategy.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/RefreshStrategy.java Wed Sep 11 10:11:56 2013
@@ -71,7 +71,8 @@ public class RefreshStrategy {
     public boolean needsRefresh(SessionOperation<?> sessionOperation) {
         // Don't refresh if this operation is a refresh operation itself or
         // a save operation, which does an implicit refresh
-        if (sessionOperation.isRefresh() || sessionOperation.isSave()) {
+        if (sessionOperation.isRefresh() || sessionOperation.isSave()
+                || sessionOperation.isLogout()) {
             return false;
         }
 

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=1521781&r1=1521780&r2=1521781&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 10:11:56 2013
@@ -117,6 +117,11 @@ public class SessionImpl implements Jack
         return sd.perform(op);
     }
 
+    @CheckForNull
+    private <T> T safePerform(@Nonnull SessionOperation<T> op) {
+        return sd.safePerform(op);
+    }
+
     @Nonnull
     private String getOakPathOrThrow(String absPath) throws RepositoryException {
         String p = sessionContext.getOakPathOrThrow(absPath);
@@ -438,8 +443,19 @@ public class SessionImpl implements Jack
     @Override
     public void logout() {
         if (sd.isAlive()) {
-            sessionContext.dispose();
-            sd.logout();
+            safePerform(new SessionOperation<Void>() {
+                @Override
+                public Void perform() {
+                    sessionContext.dispose();
+                    sd.logout();
+                    return null;
+                }
+
+                @Override
+                public boolean isLogout() {
+                    return true;
+                }
+            });
         }
     }
 

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=1521781&r1=1521780&r2=1521781&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 10:11:56 2013
@@ -56,6 +56,10 @@ public abstract class SessionOperation<T
         return false;
     }
 
+    public boolean isLogout() {
+        return false;
+    }
+
     public void checkPreconditions() throws RepositoryException {
     }