You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by oz...@apache.org on 2007/04/18 07:18:19 UTC

svn commit: r529868 - /jakarta/slide/trunk/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java

Author: ozeigermann
Date: Tue Apr 17 22:18:19 2007
New Revision: 529868

URL: http://svn.apache.org/viewvc?view=rev&rev=529868
Log:
Added mode fail-fast that does not block upon conflict, but
immedeately fails.

Modified:
    jakarta/slide/trunk/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java

Modified: jakarta/slide/trunk/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java
URL: http://svn.apache.org/viewvc/jakarta/slide/trunk/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java?view=diff&rev=529868&r1=529867&r2=529868
==============================================================================
--- jakarta/slide/trunk/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java (original)
+++ jakarta/slide/trunk/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java Tue Apr 17 22:18:19 2007
@@ -1059,6 +1059,11 @@
                 "sequential-mode"));
     }
 
+    protected boolean isFailFastSequential() {
+        return "fail-fast".equalsIgnoreCase(token.getNamespaceConfig().getParameter(
+                "sequential-mode"));
+    }
+
     /**
      * Checks if Slide is configured to internally repeat a request if it conflicts with other
      * concurrent ones.
@@ -1086,8 +1091,25 @@
         return DEFAULT_MAX_RETRY_REPEATS;
     }
     
-    protected void assureGlobalLocks() {
-        if (this instanceof FineGrainedLockingMethod && isFineGrainSequential()) {
+    protected void assureGlobalLocks() throws ConflictException {
+        if (isFailFastSequential()) {
+            boolean locked = true;
+            if (this instanceof ReadMethod) {
+                try {
+                    // NON-BLOCKING
+                    locked = GLOBAL_LOCK.acquire(this, 1, false, true, Long.MAX_VALUE);
+                } catch (InterruptedException e) {
+                }
+            } else if (this instanceof WriteMethod) {
+                try {
+                    // NON-BLOCKING
+                    locked = GLOBAL_LOCK.acquire(this, 2, false, true, Long.MAX_VALUE);
+                } catch (InterruptedException e) {
+                }
+            }
+            if (!locked)
+                throw new ConflictException("/");
+        } else if (this instanceof FineGrainedLockingMethod && isFineGrainSequential()) {
             ((FineGrainedLockingMethod) this).acquireFineGrainLocks();
         } else if (this instanceof ReadMethod) {
             if (isSequentialRead()) {



---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org