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);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user