[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