Added pessimistic locking in several places to shut down deadlocks.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3252 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Britt Park
2006-06-26 16:43:35 +00:00
parent 64288d531d
commit c6dfeb1c9d
10 changed files with 72 additions and 31 deletions

View File

@@ -298,7 +298,7 @@ class SuperRepository
Lookup sPath = srcRepo.lookupDirectory(-1, pathParts[1], true);
// sPath.acquireLocks();
DirectoryNode srcDir = (DirectoryNode)sPath.getCurrentNode();
AVMNode srcNode = srcDir.lookupChild(sPath, srcName, -1);
AVMNode srcNode = srcDir.lookupChild(sPath, srcName, -1, true);
if (srcNode == null)
{
throw new AVMNotFoundException("Not found: " + srcName);
@@ -310,7 +310,7 @@ class SuperRepository
Lookup dPath = dstRepo.lookupDirectory(-1, pathParts[1], true);
// dPath.acquireLocks();
DirectoryNode dstDir = (DirectoryNode)dPath.getCurrentNode();
AVMNode dstNode = dstDir.lookupChild(dPath, dstName, -1);
AVMNode dstNode = dstDir.lookupChild(dPath, dstName, -1, true);
if (dstNode != null)
{
throw new AVMExistsException("Node exists: " + dstName);
@@ -422,6 +422,7 @@ class SuperRepository
for (String repName : repositories)
{
Repository repo = getRepositoryByName(repName, true);
fSession.get().lock(repo, LockMode.UPGRADE);
// fSession.get().lock(repo, LockMode.UPGRADE);
repo.createSnapshot();
}
@@ -434,6 +435,7 @@ class SuperRepository
public void createSnapshot(String repository)
{
Repository repo = getRepositoryByName(repository, true);
fSession.get().lock(repo, LockMode.UPGRADE);
// fSession.get().lock(repo, LockMode.UPGRADE);
repo.createSnapshot();
}
@@ -694,12 +696,16 @@ class SuperRepository
private Repository getRepositoryByName(String name, boolean write)
{
Repository rep = (Repository)fSession.get().get(RepositoryImpl.class,
name /* ,
write ? LockMode.UPGRADE : LockMode.READ */);
name, LockMode.READ /*,
write ? LockMode.UPGRADE : LockMode.READ*/);
if (rep == null)
{
throw new AVMNotFoundException("Repository not found: " + name);
}
if (write && !rep.getRoot().getIsNew())
{
fSession.get().lock(rep, LockMode.UPGRADE);
}
return rep;
}