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