From a58a3c4f53b33852ff43dc95bc4889283cef1ab6 Mon Sep 17 00:00:00 2001 From: Britt Park Date: Sat, 8 Jul 2006 11:37:28 +0000 Subject: [PATCH] Minor tweaks to the crawler test. Added a flush needed under still obscure high stress situations to prevent a duplicate key violation, in PlainDirectoryNodeImpl. This only makes sense if somehow the second level cache is getting out of whack. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3292 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/avm/AVMCrawlTest.java | 4 ++-- .../org/alfresco/repo/avm/AVMCrawler.java | 22 ++++++++++--------- .../repo/avm/PlainDirectoryNodeImpl.java | 1 + .../alfresco/repo/avm/SuperRepository.java | 8 +++---- .../repo/avm/hibernate/HibernateTxn.java | 2 +- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/source/java/org/alfresco/repo/avm/AVMCrawlTest.java b/source/java/org/alfresco/repo/avm/AVMCrawlTest.java index 1d3916b56e..9a7ef0525b 100644 --- a/source/java/org/alfresco/repo/avm/AVMCrawlTest.java +++ b/source/java/org/alfresco/repo/avm/AVMCrawlTest.java @@ -35,8 +35,8 @@ public class AVMCrawlTest extends AVMServiceTestBase */ public void testCrawl() { - int n = 2; // Number of Threads. - int m = 4; // How many multiples of content to start with. + int n = 8; // Number of Threads. + int m = 16; // How many multiples of content to start with. long runTime = 1200000; // Ten minutes fService.purgeRepository("main"); fReaper.setInactiveBaseSleep(60000); diff --git a/source/java/org/alfresco/repo/avm/AVMCrawler.java b/source/java/org/alfresco/repo/avm/AVMCrawler.java index 2785a53a1f..12dfe2b4ce 100644 --- a/source/java/org/alfresco/repo/avm/AVMCrawler.java +++ b/source/java/org/alfresco/repo/avm/AVMCrawler.java @@ -127,6 +127,7 @@ class AVMCrawler implements Runnable } } AVMNodeDescriptor dir = dirs.get(fRandom.nextInt(dirs.size())); + int depth = 1; while (dir != null) { Map listing = fService.getDirectoryListing(-1, dir.getPath()); @@ -168,17 +169,16 @@ class AVMCrawler implements Runnable fOpCount++; } } - // Create some files. - for (int i = 0; i < 1; i++) + if (fRandom.nextInt(depth) < depth - 1) { - String name = randomName(); - fService.createFile(dir.getPath(), name, + // Create some files. + for (int i = 0; i < 1; i++) + { + String name = randomName(); + fService.createFile(dir.getPath(), name, new ByteArrayInputStream(("I am " + name).getBytes())); - fOpCount++; -// PrintStream out = new PrintStream(fService.createFile(dir.getPath(), name)); -// fOpCount++; -// out.println("I am " + name); -// out.close(); + fOpCount++; + } } // 1 in 100 times create a directory. if (fRandom.nextInt(100) == 0) @@ -206,6 +206,7 @@ class AVMCrawler implements Runnable { dir = null; } + depth++; } if (fRandom.nextInt(16) == 0) { @@ -221,7 +222,8 @@ class AVMCrawler implements Runnable return; } e.printStackTrace(System.err); - throw new AVMException("Failure", e); + return; +// throw new AVMException("Failure", e); } } diff --git a/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java index 1186f392d1..48bad4e5d2 100644 --- a/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java @@ -190,6 +190,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory if (existing != null) { existing.setChild(node); + sess.flush(); // TODO Should we or shouldn't we? } else { diff --git a/source/java/org/alfresco/repo/avm/SuperRepository.java b/source/java/org/alfresco/repo/avm/SuperRepository.java index c23326c77c..aee0193c31 100644 --- a/source/java/org/alfresco/repo/avm/SuperRepository.java +++ b/source/java/org/alfresco/repo/avm/SuperRepository.java @@ -721,10 +721,10 @@ class SuperRepository { throw new AVMNotFoundException("Repository not found: " + name); } - if (write && !rep.getRoot().getIsNew()) - { - fSession.get().lock(rep, LockMode.UPGRADE); - } +// if (write && !rep.getRoot().getIsNew()) +// { +// fSession.get().lock(rep, LockMode.UPGRADE); +// } return rep; } diff --git a/source/java/org/alfresco/repo/avm/hibernate/HibernateTxn.java b/source/java/org/alfresco/repo/avm/hibernate/HibernateTxn.java index c9537a46be..fd1d74f762 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/HibernateTxn.java +++ b/source/java/org/alfresco/repo/avm/hibernate/HibernateTxn.java @@ -66,7 +66,7 @@ public class HibernateTxn extends HibernateTemplate } /** - * Perform a set of operations under a single Hibernate transaction. + * Perform a set of operations under a single transaction. * Keep trying if the operation fails because of a concurrency issue. * @param callback The worker. * @param write Whether this is a write operation.