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

Reply via email to