From 8800461d795e055c0cfbf47e0fcf7f148293727b Mon Sep 17 00:00:00 2001 From: Britt Park Date: Sun, 18 Jun 2006 23:19:27 +0000 Subject: [PATCH] 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 --- .../alfresco/repo/avm/SuperRepository.java | 114 +++++++++--------- 1 file changed, 59 insertions(+), 55 deletions(-) diff --git a/source/java/org/alfresco/repo/avm/SuperRepository.java b/source/java/org/alfresco/repo/avm/SuperRepository.java index c4d458d310..b1c6bda5f3 100644 --- a/source/java/org/alfresco/repo/avm/SuperRepository.java +++ b/source/java/org/alfresco/repo/avm/SuperRepository.java @@ -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 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 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); }