mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user