Changed the way we acquire pessimistic locks. Modestly faster.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3138 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Britt Park
2006-06-18 23:19:27 +00:00
parent d3f6048fbc
commit 8800461d79

View File

@@ -114,8 +114,8 @@ class SuperRepository
{
fLookupCount.set(1);
String[] pathParts = SplitPath(path);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.UPGRADE);
Repository rep = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(rep, LockMode.UPGRADE);
return rep.createFile(pathParts[1], name);
}
@@ -128,8 +128,8 @@ class SuperRepository
{
fLookupCount.set(1);
String[] pathParts = SplitPath(path);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.UPGRADE);
Repository rep = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(rep, LockMode.UPGRADE);
rep.createDirectory(pathParts[1], name);
}
@@ -148,8 +148,8 @@ class SuperRepository
}
fLookupCount.set(1);
String[] pathParts = SplitPath(dstPath);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.UPGRADE);
Repository rep = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(rep, LockMode.UPGRADE);
rep.createLayeredDirectory(srcPath, pathParts[1], name);
}
@@ -163,8 +163,8 @@ class SuperRepository
{
fLookupCount.set(1);
String[] pathParts = SplitPath(dstPath);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.UPGRADE);
Repository rep = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(rep, LockMode.UPGRADE);
rep.createLayeredFile(srcPath, pathParts[1], name);
}
@@ -199,14 +199,14 @@ class SuperRepository
// Lookup the src node.
fLookupCount.set(1);
String [] pathParts = SplitPath(srcPath);
Repository srcRepo = getRepositoryByName(pathParts[0]);
fSession.get().lock(srcRepo, LockMode.READ);
Repository srcRepo = getRepositoryByName(pathParts[0], false);
// fSession.get().lock(srcRepo, LockMode.READ);
Lookup sPath = srcRepo.lookup(version, pathParts[1]);
// Lookup the destination directory.
fLookupCount.set(1);
pathParts = SplitPath(dstPath);
Repository dstRepo = getRepositoryByName(pathParts[0]);
fSession.get().lock(dstRepo, LockMode.UPGRADE);
Repository dstRepo = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(dstRepo, LockMode.UPGRADE);
Lookup dPath = dstRepo.lookupDirectory(-1, pathParts[1]);
// dPath.acquireLocks();
DirectoryNode dirNode = (DirectoryNode)dPath.getCurrentNode();
@@ -247,8 +247,8 @@ class SuperRepository
{
fLookupCount.set(1);
String [] pathParts = SplitPath(path);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.UPGRADE);
Repository rep = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(rep, LockMode.UPGRADE);
return rep.getOutputStream(pathParts[1]);
}
@@ -263,8 +263,8 @@ class SuperRepository
{
fLookupCount.set(1);
String[] pathParts = SplitPath(path);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.UPGRADE);
Repository rep = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(rep, LockMode.UPGRADE);
return rep.getRandomAccess(version, pathParts[1], access);
}
@@ -285,8 +285,8 @@ class SuperRepository
}
fLookupCount.set(1);
String [] pathParts = SplitPath(srcPath);
Repository srcRepo = getRepositoryByName(pathParts[0]);
fSession.get().lock(srcRepo, LockMode.UPGRADE);
Repository srcRepo = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(srcRepo, LockMode.UPGRADE);
Lookup sPath = srcRepo.lookupDirectory(-1, pathParts[1]);
// sPath.acquireLocks();
DirectoryNode srcDir = (DirectoryNode)sPath.getCurrentNode();
@@ -297,8 +297,8 @@ class SuperRepository
}
fLookupCount.set(1);
pathParts = SplitPath(dstPath);
Repository dstRepo = getRepositoryByName(pathParts[0]);
fSession.get().lock(dstRepo, LockMode.UPGRADE);
Repository dstRepo = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(dstRepo, LockMode.UPGRADE);
Lookup dPath = dstRepo.lookupDirectory(-1, pathParts[1]);
// dPath.acquireLocks();
DirectoryNode dstDir = (DirectoryNode)dPath.getCurrentNode();
@@ -405,8 +405,8 @@ class SuperRepository
{
fLookupCount.set(1);
String [] pathParts = SplitPath(dirPath);
Repository repo = getRepositoryByName(pathParts[0]);
fSession.get().lock(repo, LockMode.UPGRADE);
Repository repo = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(repo, LockMode.UPGRADE);
repo.uncover(pathParts[1], name);
}
@@ -418,8 +418,8 @@ class SuperRepository
{
for (String repName : repositories)
{
Repository repo = getRepositoryByName(repName);
fSession.get().lock(repo, LockMode.UPGRADE);
Repository repo = getRepositoryByName(repName, true);
// fSession.get().lock(repo, LockMode.UPGRADE);
repo.createSnapshot();
}
}
@@ -430,8 +430,8 @@ class SuperRepository
*/
public void createSnapshot(String repository)
{
Repository repo = getRepositoryByName(repository);
fSession.get().lock(repo, LockMode.UPGRADE);
Repository repo = getRepositoryByName(repository, true);
// fSession.get().lock(repo, LockMode.UPGRADE);
repo.createSnapshot();
}
@@ -444,8 +444,8 @@ class SuperRepository
{
fLookupCount.set(1);
String [] pathParts = SplitPath(path);
Repository repo = getRepositoryByName(pathParts[0]);
fSession.get().lock(repo, LockMode.UPGRADE);
Repository repo = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(repo, LockMode.UPGRADE);
repo.removeNode(pathParts[1], name);
}
@@ -457,8 +457,8 @@ class SuperRepository
@SuppressWarnings("unchecked")
public void purgeRepository(String name)
{
Repository rep = getRepositoryByName(name);
fSession.get().lock(rep, LockMode.UPGRADE);
Repository rep = getRepositoryByName(name, true);
// fSession.get().lock(rep, LockMode.UPGRADE);
AVMNode root = rep.getRoot();
root.setIsRoot(false);
Query query = fSession.get().createQuery("from VersionRootImpl vr where vr.repository = :rep");
@@ -489,8 +489,8 @@ class SuperRepository
*/
public void purgeVersion(String name, int version)
{
Repository rep = getRepositoryByName(name);
fSession.get().lock(rep, LockMode.UPGRADE);
Repository rep = getRepositoryByName(name, true);
// fSession.get().lock(rep, LockMode.UPGRADE);
rep.purgeVersion(version);
}
@@ -504,8 +504,8 @@ class SuperRepository
{
fLookupCount.set(1);
String [] pathParts = SplitPath(path);
Repository repo = getRepositoryByName(pathParts[0]);
fSession.get().lock(repo, LockMode.READ);
Repository repo = getRepositoryByName(pathParts[0], false);
// fSession.get().lock(repo, LockMode.READ);
return repo.getInputStream(version, pathParts[1]);
}
@@ -541,8 +541,8 @@ class SuperRepository
{
fLookupCount.set(1);
String [] pathParts = SplitPath(path);
Repository repo = getRepositoryByName(pathParts[0]);
fSession.get().lock(repo, LockMode.READ);
Repository repo = getRepositoryByName(pathParts[0], false);
// fSession.get().lock(repo, LockMode.READ);
return repo.getListing(version, pathParts[1]);
}
@@ -582,8 +582,8 @@ class SuperRepository
*/
public List<VersionDescriptor> getRepositoryVersions(String name)
{
Repository rep = getRepositoryByName(name);
fSession.get().lock(rep, LockMode.READ);
Repository rep = getRepositoryByName(name, false);
// fSession.get().lock(rep, LockMode.READ);
return rep.getVersions();
}
@@ -597,8 +597,8 @@ class SuperRepository
*/
public List<VersionDescriptor> getRepositoryVersions(String name, Date from, Date to)
{
Repository rep = getRepositoryByName(name);
fSession.get().lock(rep, LockMode.READ);
Repository rep = getRepositoryByName(name, false);
// fSession.get().lock(rep, LockMode.READ);
return rep.getVersions(from, to);
}
@@ -648,8 +648,8 @@ class SuperRepository
{
fLookupCount.set(1);
String [] pathParts = SplitPath(path);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.READ);
Repository rep = getRepositoryByName(pathParts[0], false);
// fSession.get().lock(rep, LockMode.READ);
return rep.getIndirectionPath(version, pathParts[1]);
}
@@ -660,18 +660,22 @@ class SuperRepository
*/
public int getLatestVersionID(String name)
{
Repository rep = getRepositoryByName(name);
Repository rep = getRepositoryByName(name, false);
// fSession.get().lock(rep, LockMode.READ);
return rep.getNextVersionID();
}
/**
* Get a repository by name.
* @param name The name of the repository.
* @param write Whether this is called for a write operation.
* @return The Repository.
*/
private Repository getRepositoryByName(String name)
private Repository getRepositoryByName(String name, boolean write)
{
return (Repository)fSession.get().get(RepositoryImpl.class, name);
return (Repository)fSession.get().get(RepositoryImpl.class,
name,
write ? LockMode.UPGRADE : LockMode.READ);
}
/**
@@ -682,12 +686,12 @@ class SuperRepository
*/
public AVMNodeDescriptor getRepositoryRoot(int version, String name)
{
Repository rep = getRepositoryByName(name);
Repository rep = getRepositoryByName(name, false);
if (rep == null)
{
throw new AVMNotFoundException("Not found: " + name);
}
fSession.get().lock(rep, LockMode.READ);
// fSession.get().lock(rep, LockMode.READ);
return rep.getRoot(version);
}
@@ -705,8 +709,8 @@ class SuperRepository
throw new AVMCycleException("Cycle in lookup.");
}
String [] pathParts = SplitPath(path);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.READ);
Repository rep = getRepositoryByName(pathParts[0], false);
// fSession.get().lock(rep, LockMode.READ);
return rep.lookup(version, pathParts[1]);
}
@@ -747,8 +751,8 @@ class SuperRepository
throw new AVMCycleException("Cycle in lookup.");
}
String [] pathParts = SplitPath(path);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.READ);
Repository rep = getRepositoryByName(pathParts[0], false);
// fSession.get().lock(rep, LockMode.READ);
return rep.lookupDirectory(version, pathParts[1]);
}
@@ -784,8 +788,8 @@ class SuperRepository
{
fLookupCount.set(1);
String[] pathParts = SplitPath(path);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.UPGRADE);
Repository rep = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(rep, LockMode.UPGRADE);
rep.makePrimary(pathParts[1]);
}
@@ -798,8 +802,8 @@ class SuperRepository
{
fLookupCount.set(1);
String[] pathParts = SplitPath(path);
Repository rep = getRepositoryByName(pathParts[0]);
fSession.get().lock(rep, LockMode.UPGRADE);
Repository rep = getRepositoryByName(pathParts[0], true);
// fSession.get().lock(rep, LockMode.UPGRADE);
rep.retargetLayeredDirectory(pathParts[1], target);
}