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 2004/10/26 23:09:29 UTC
cvs commit: jakarta-slide/src/share/org/apache/slide/structure StructureImpl.java
ozeigermann 2004/10/26 14:09:29
Modified: src/share/org/apache/slide/store AbstractStore.java
Store.java ExtendedStore.java
src/share/org/apache/slide/structure StructureImpl.java
Log:
Removed transient exclusive locks from the Slide core as they
have been replaced by new fine grain WebDAV level locks and
they have even been a (unresolveable) deadlock hazard for
people programming to the server API
Revision Changes Path
1.48 +4 -7 jakarta-slide/src/share/org/apache/slide/store/AbstractStore.java
Index: AbstractStore.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/store/AbstractStore.java,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- AbstractStore.java 25 Oct 2004 07:50:30 -0000 1.47
+++ AbstractStore.java 26 Oct 2004 21:09:29 -0000 1.48
@@ -1697,7 +1697,4 @@
return false;
}
- public void exclusiveTransientLock(String uri) throws ServiceAccessException {
- }
-
}
1.14 +4 -12 jakarta-slide/src/share/org/apache/slide/store/Store.java
Index: Store.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/store/Store.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Store.java 19 Oct 2004 11:47:05 -0000 1.13
+++ Store.java 26 Oct 2004 21:09:29 -0000 1.14
@@ -127,12 +127,4 @@
*/
boolean useBinding();
- /**
- * Acquires an exclusive access lock to a resource. This lock is transient, i.e. it will
- * automatically be released when your transaction terminates.
- *
- * @param uri the URI of the resource you want to have exclusive access to
- * @throws ServiceAccessException thrown if anything goes wrong, including the lock can not be acquired
- */
- void exclusiveTransientLock(String uri) throws ServiceAccessException;
}
1.23 +7 -91 jakarta-slide/src/share/org/apache/slide/store/ExtendedStore.java
Index: ExtendedStore.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/store/ExtendedStore.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- ExtendedStore.java 26 Oct 2004 20:43:14 -0000 1.22
+++ ExtendedStore.java 26 Oct 2004 21:09:29 -0000 1.23
@@ -24,15 +24,12 @@
package org.apache.slide.store;
import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Map;
import java.util.Vector;
-import org.apache.commons.transaction.locking.GenericLock;
-import org.apache.commons.transaction.locking.GenericLockManager;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.Xid;
+
import org.apache.commons.transaction.util.xa.XidWrapper;
import org.apache.slide.common.ServiceAccessException;
import org.apache.slide.common.ServiceParameterErrorException;
@@ -47,7 +44,6 @@
import org.apache.slide.content.RevisionNotFoundException;
import org.apache.slide.lock.LockTokenNotFoundException;
import org.apache.slide.lock.NodeLock;
-import org.apache.slide.macro.ConflictException;
import org.apache.slide.security.NodePermission;
import org.apache.slide.structure.LinkNode;
import org.apache.slide.structure.ObjectAlreadyExistsException;
@@ -56,12 +52,7 @@
import org.apache.slide.util.ByteSizeLimitedObjectCache;
import org.apache.slide.util.ObjectCache;
import org.apache.slide.util.TxLRUObjectCache;
-
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.Xid;
-
import org.apache.slide.util.logger.Logger;
-import org.apache.slide.util.logger.TxLogger;
/**
* Store that allows for transactional caching of data. Takes over much modified code from StandardStore.
@@ -129,11 +120,8 @@
protected TxCacheWrapper descriptorsCache;
protected TxCacheWrapper descriptorCache;
- protected GenericLockManager lockManager;
- protected ThreadLocal locks = new ThreadLocal();
protected long timeout;
protected long cacheTimeout;
-
protected boolean globalCacheOff;
@@ -150,12 +138,6 @@
long maxByteSizePerEntry;
boolean noGlobalCacheInTx;
- private Map suspendedLocks = new HashMap();
-
- public ExtendedStore() {
- lockManager = new GenericLockManager(1, new TxLogger(getLogger(), LOG_CHANNEL));
- }
-
public void setParameters(Hashtable parameters)
throws ServiceParameterErrorException, ServiceParameterMissingException {
super.setParameters(parameters);
@@ -471,40 +453,6 @@
}
}
- public void exclusiveTransientLock(String uri)
- throws ServiceAccessException {
- Xid txId = (Xid) activeTransactionBranch.get();
- if (txId != null) {
- try {
- GenericLock lock = (GenericLock) lockManager
- .atomicGetOrCreateLock(uri);
- if (lock.getLockLevel(txId) != 1) {
- Object owner = lock.getOwner();
- getLogger()
- .log(
- "Try lock: "
- + txId
- + " tries "
- + uri
- + (owner != null ? " ---> "
- + owner.toString()
- + " has it" : ""),
- LOG_CHANNEL, Logger.DEBUG);
- if (!lock.acquire(txId, 1, true, true, timeout)) {
- throw new ServiceAccessException(this,
- new ConflictException(uri));
- }
- ((HashSet) locks.get()).add(lock);
- getLogger().log("Has lock: " + txId + " locks " + uri,
- LOG_CHANNEL, Logger.DEBUG);
- }
- } catch (InterruptedException e) {
- throw new ServiceAccessException(this, new ConflictException(
- uri));
- }
- }
- }
-
//
// overloaded content methods with caching
//
@@ -1155,8 +1103,6 @@
//
public void forget(Xid xid) throws XAException {
- releaseTransientLocks();
-
Xid txId = (Xid) XidWrapper.wrap(xid);
activeTransactionBranch.set(null);
@@ -1170,8 +1116,6 @@
}
public void rollback(Xid xid) throws XAException {
- releaseTransientLocks();
-
Xid txId = (Xid) XidWrapper.wrap(xid);
activeTransactionBranch.set(null);
@@ -1185,8 +1129,6 @@
}
public void commit(Xid xid, boolean onePhase) throws XAException {
- releaseTransientLocks();
-
Xid txId = (Xid) XidWrapper.wrap(xid);
activeTransactionBranch.set(null);
@@ -1217,9 +1159,6 @@
Xid txId = (Xid) XidWrapper.wrap(xid);
activeTransactionBranch.set(txId);
if (flags == TMNOFLAGS || flags == TMJOIN) {
-
- locks.set(new HashSet());
-
objectsCache.getTxCache().start(txId);
permissionsCache.getTxCache().start(txId);
locksCache.getTxCache().start(txId);
@@ -1227,8 +1166,6 @@
descriptorCache.getTxCache().start(txId);
if (contentCache != null)
contentCache.getTxCache().start(txId);
- } else {
- locks.set(suspendedLocks.remove(txId));
}
}
@@ -1241,11 +1178,6 @@
+ " work on behalf of transaction branch " + xid,
LOG_CHANNEL, Logger.DEBUG);
- if (flags == TMSUSPEND) {
- Xid txId = (Xid) XidWrapper.wrap(xid);
- suspendedLocks.put(txId, locks.get());
- }
- locks.set(null);
activeTransactionBranch.set(null);
}
@@ -1253,22 +1185,6 @@
public String toString() {
return getName() + "(" + getClass().getName() + ")";
- }
-
- protected void releaseTransientLocks() {
- // XXX can be the case when an external transaction took up work in another thread
- // no need to implement suspend and resume here as tlocks will not be used with external transactions
- if (locks.get() == null) return;
-
- Xid txId = (Xid) activeTransactionBranch.get();
- for (Iterator it = ((HashSet)locks.get()).iterator(); it.hasNext();) {
- GenericLock lock = (GenericLock) it.next();
- lock.release(txId);
- getLogger().log(
- "Release lock: " + txId + " released " + lock.getResourceId().toString(),
- LOG_CHANNEL,
- Logger.DEBUG);
- }
}
protected Vector fillPermissionsCache(Uri uri) throws ServiceAccessException {
1.52 +4 -19 jakarta-slide/src/share/org/apache/slide/structure/StructureImpl.java
Index: StructureImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/structure/StructureImpl.java,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- StructureImpl.java 22 Sep 2004 15:20:23 -0000 1.51
+++ StructureImpl.java 26 Oct 2004 21:09:29 -0000 1.52
@@ -337,14 +337,6 @@
}
if (parentObject != null) {
- // lock exclusively before anyone can get a read lock
- // do not lock in external transaction because this might lead to distributed deadlocks
- // between Slide and store
- if (!token.isExternalTransaction()) {
- namespace.getUri(token, parentObject.getUri()).getStore().exclusiveTransientLock(
- parentObject.getUri().toString());
- }
-
securityHelper
.checkCredentials(token, courObject, namespaceConfig
.getBindMemberAction());
@@ -535,13 +527,6 @@
if (!object.getUri().equals("/")) {
Uri curUri = namespace.getUri(token, nodeToDelete.getUri());
Uri parentUri = curUri.getParentUri();
-
- // lock exclusively before anyone can get a read lock
- // do not lock in external transaction because this might lead to distributed deadlocks
- // between Slide and store
- if (!token.isExternalTransaction()) {
- parentUri.getStore().exclusiveTransientLock(parentUri.toString());
- }
ObjectNode parentNode = parentUri.getStore().retrieveObject(parentUri);
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org