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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]