[exo-jcr-commits] exo-jcr SVN: r1427 - jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Jan 16 05:34:39 EST 2010


Author: sergiykarpenko
Date: 2010-01-16 05:34:39 -0500 (Sat, 16 Jan 2010)
New Revision: 1427

Modified:
   jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheLockImpl.java
   jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java
   jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/LockData.java
Log:
EXOJCR-332: lock token in Lock Data replaced by lock token hash


Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheLockImpl.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheLockImpl.java	2010-01-16 10:13:10 UTC (rev 1426)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheLockImpl.java	2010-01-16 10:34:39 UTC (rev 1427)
@@ -69,7 +69,7 @@
     */
    public String getLockToken()
    {
-      return lockManager.getLockToken(session.getId(), lockData);
+      return lockManager.getLockToken(session.getId(), lockData.getTokenHash());
    }
 
    /**
@@ -95,8 +95,8 @@
          throw new LockException("Lock is not live");
 
       LockData newLockData =
-         new LockData(lockData.getNodeIdentifier(), lockData.getToken(), lockData.isDeep(), lockData.isSessionScoped(),
-            lockData.getOwner(), lockData.getTimeOut());
+         new LockData(lockData.getNodeIdentifier(), lockData.getTokenHash(), lockData.isDeep(), lockData
+            .isSessionScoped(), lockData.getOwner(), lockData.getTimeOut());
 
       lockManager.refresh(newLockData);
       lockData = newLockData;

Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java	2010-01-16 10:13:10 UTC (rev 1426)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java	2010-01-16 10:34:39 UTC (rev 1427)
@@ -147,9 +147,9 @@
    private final Map<String, LockData> pendingLocks;
 
    /**
-    * [session id , [lock tokens id..]]
+    * [session id , [lock token hash, lock tokens id]]
     */
-   private final Map<String, Set<String>> lockTokenHolders;
+   private final Map<String, Map<String, String>> lockTokenHolders;
 
    /**
     * Run time lock time out.
@@ -201,7 +201,7 @@
       else
          lockTimeOut = DEFAULT_LOCK_TIMEOUT;
 
-      lockTokenHolders = new HashMap<String, Set<String>>();
+      lockTokenHolders = new HashMap<String, Map<String, String>>();
       pendingLocks = new HashMap<String, LockData>();
 
       dataManager.addItemPersistenceListener(this);
@@ -231,7 +231,7 @@
     */
    public synchronized void addLockToken(String sessionId, String lt)
    {
-      holdLockToken(sessionId, lt);
+      holdLockToken(sessionId, getHash(lt), lt);
    }
 
    /*
@@ -262,11 +262,13 @@
       }
 
       String lockToken = IdGenerator.generate();
+      String lockTokenHash = getHash(lockToken);
+
       lData =
-               new LockData(node.getInternalIdentifier(), lockToken, isDeep, isSessionScoped, node.getSession()
-                        .getUserID(), timeOut > 0 ? timeOut : lockTimeOut);
+         new LockData(node.getInternalIdentifier(), lockTokenHash, isDeep, isSessionScoped, node.getSession()
+            .getUserID(), timeOut > 0 ? timeOut : lockTimeOut);
 
-      holdLockToken(node.getSession().getId(), lockToken);
+      holdLockToken(node.getSession().getId(), lockTokenHash, lockToken);
       pendingLocks.put(node.getInternalIdentifier(), lData);
 
       LockImpl lock = new CacheLockImpl(node.getSession(), lData, this);
@@ -304,12 +306,12 @@
     */
    public synchronized String[] getLockTokens(String sessionID)
    {
-      Set<String> lockTokens = lockTokenHolders.get(sessionID);
+      Map<String, String> lockTokens = lockTokenHolders.get(sessionID);
 
       if (lockTokens != null)
       {
          String[] arr = new String[lockTokens.size()];
-         lockTokens.toArray(arr);
+         lockTokens.values().toArray(arr);
          return arr;
       }
       else
@@ -318,17 +320,6 @@
       }
    }
 
-   /**
-    * Returns real token, if session has it
-    * 
-    * @param lockData
-    * @return
-    */
-   //   public String getLockToken(LockData lockData)
-   //   {
-   //      return tokenHash.get(lockData.getTokenHash());
-   //   }
-
    @Managed
    @ManagedDescription("The number of active locks")
    public int getNumLocks()
@@ -373,7 +364,7 @@
    public boolean isLockHolder(NodeImpl node) throws RepositoryException
    {
       LockData lData = getLockData((NodeData) node.getData(), SEARCH_EXECMATCH | SEARCH_CLOSEDPARENT);
-      return lData != null && isLockHolder(node.getSession().getId(), lData.getToken());
+      return lData != null && isLockHolder(node.getSession().getId(), lData.getTokenHash());
    }
 
    /**
@@ -398,7 +389,7 @@
       {
          // check is lock holder
          if (lockTokenHolders.containsKey(session.getId())
-                  && lockTokenHolders.get(session.getId()).contains(lockData.getToken()))
+            && lockTokenHolders.get(session.getId()).containsKey(lockData.getTokenHash()))
          {
             if (lockData.isSessionScoped())
             {
@@ -428,7 +419,7 @@
             }
             else
             {
-               this.removeLockToken(session.getId(), lockData.getToken());
+               removeLockTokenByHash(session.getId(), lockData.getTokenHash());
             }
          }
       }
@@ -591,9 +582,9 @@
     */
    public synchronized void removeLockToken(String sessionId, String lt)
    {
-      if (lockTokenHolders.containsKey(sessionId) && lockTokenHolders.get(sessionId).contains(lt))
+      if (lockTokenHolders.containsKey(sessionId) && lockTokenHolders.get(sessionId).containsValue(lt))
       {
-         lockTokenHolders.get(sessionId).remove(lt);
+         lockTokenHolders.get(sessionId).remove(getHash(lt));
          if (lockTokenHolders.get(sessionId).size() == 0)
          {
             lockTokenHolders.remove(sessionId);
@@ -601,6 +592,18 @@
       }
    }
 
+   public synchronized void removeLockTokenByHash(String sessionId, String ltHash)
+   {
+      if (lockTokenHolders.containsKey(sessionId) && lockTokenHolders.get(sessionId).containsKey(ltHash))
+      {
+         lockTokenHolders.get(sessionId).remove(ltHash);
+         if (lockTokenHolders.get(sessionId).size() == 0)
+         {
+            lockTokenHolders.remove(sessionId);
+         }
+      }
+   }
+
    /*
     * (non-Javadoc)
     * @see org.picocontainer.Startable#start()
@@ -739,13 +742,14 @@
       return retval;
    }
 
-   private void holdLockToken(String sessionId, String lt)
+   private void holdLockToken(String sessionId, String ltHash, String lt)
    {
       if (lockTokenHolders.get(sessionId) == null)
       {
-         lockTokenHolders.put(sessionId, new HashSet<String>());
+         lockTokenHolders.put(sessionId, new HashMap<String, String>());
       }
-      lockTokenHolders.get(sessionId).add(lt);
+      // put token hash and token 
+      lockTokenHolders.get(sessionId).put(ltHash, lt);
    }
 
    /**
@@ -830,7 +834,7 @@
          // remove session holder
          if (lockTokenHolders.containsKey(sessionId))
          {
-            lockTokenHolders.get(sessionId).remove(lData.getToken());
+            lockTokenHolders.get(sessionId).remove(lData.getTokenHash());
             if (lockTokenHolders.get(sessionId).size() == 0)
             {
                lockTokenHolders.remove(sessionId);
@@ -839,12 +843,12 @@
       }
    }
 
-   private boolean isLockHolder(String sessionId, String lockToken)
+   private boolean isLockHolder(String sessionId, String lockTokenHash)
    {
-      Set<String> lockTokens = lockTokenHolders.get(sessionId);
+      Map<String, String> lockTokens = lockTokenHolders.get(sessionId);
       if (lockTokens != null)
       {
-         return lockTokens.contains(lockToken);
+         return lockTokens.containsKey(lockTokenHash);
       }
       return false;
    }
@@ -920,11 +924,11 @@
       }
    }
 
-   public String getLockToken(String sessionId, LockData lockData)
+   public String getLockToken(String sessionId, String tokenHash)
    {
-      if (lockTokenHolders.containsKey(sessionId) && lockTokenHolders.get(sessionId).contains(lockData.getToken()))
+      if (lockTokenHolders.containsKey(sessionId))
       {
-         return lockData.getToken();
+         return lockTokenHolders.get(sessionId).get(tokenHash);
       }
       else
       {

Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/LockData.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/LockData.java	2010-01-16 10:13:10 UTC (rev 1426)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/LockData.java	2010-01-16 10:34:39 UTC (rev 1427)
@@ -32,7 +32,7 @@
  * @version $Id: LockData.java 787 2009-11-20 11:36:15Z nzamosenchuk $
  */
 
-public class LockData implements Externalizable //extends org.exoplatform.services.jcr.impl.core.lock.LockData
+public class LockData implements Externalizable
 {
    /**
     * The time of birth. From this time we start count the time of death. death = birthday+TIME_OUT;
@@ -49,7 +49,7 @@
     * A lock token is a string that uniquely identifies a particular lock and acts as a “key”
     * allowing a user to alter a locked node. LockData stores only token hash.
     */
-   private String token;
+   private String tokenHash;
 
    /**
     * Identifier of locked node.
@@ -91,11 +91,11 @@
     * @param timeOut
     *       is seconds!
     */
-   public LockData(String nodeIdentifier, String lockToken, boolean deep, boolean sessionScoped, String owner,
+   public LockData(String nodeIdentifier, String lockTokenHash, boolean deep, boolean sessionScoped, String owner,
       long timeOut)
    {
       this.nodeIdentifier = nodeIdentifier;
-      this.token = lockToken;
+      this.tokenHash = lockTokenHash;
       this.deep = deep;
       this.sessionScoped = sessionScoped;
       this.owner = owner;
@@ -145,9 +145,9 @@
       return birthday + timeOut - System.currentTimeMillis() / 1000;
    }
 
-   public String getToken()
+   public String getTokenHash()
    {
-      return token;
+      return tokenHash;
    }
 
    /*
@@ -157,7 +157,7 @@
    @Override
    public int hashCode()
    {
-      return token.hashCode();
+      return tokenHash.hashCode();
    }
 
    public boolean isDeep()
@@ -197,7 +197,7 @@
       // read token
       buf = new byte[in.readInt()];
       in.readFully(buf);
-      this.token = new String(buf, Constants.DEFAULT_ENCODING);
+      this.tokenHash = new String(buf, Constants.DEFAULT_ENCODING);
    }
 
    /**
@@ -221,7 +221,7 @@
       out.writeInt(ptbuf.length);
       out.write(ptbuf);
       // node token
-      ptbuf = token.getBytes(Constants.DEFAULT_ENCODING);
+      ptbuf = tokenHash.getBytes(Constants.DEFAULT_ENCODING);
       out.writeInt(ptbuf.length);
       out.write(ptbuf);
 



More information about the exo-jcr-commits mailing list