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