From 4ab5a046c201c75c64e44ca56f8f29ee743a37a4 Mon Sep 17 00:00:00 2001 From: Britt Park Date: Thu, 27 Jul 2006 00:47:56 +0000 Subject: [PATCH] Cleaned up a handful of uglinesses in moving AVM configuration into Alfresco app configuration, mostly related to getting testing to work smoothly. Also reworked OrphanReaper to be better behaved and nominally more efficient. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3419 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .externalToolBuilders/JibX.launch | 67 ++++++++++-------- config/alfresco/avm-base-context.xml | 4 +- config/alfresco/avm-services-context.xml | 5 +- config/alfresco/avm-test.properties | 2 +- .../org/alfresco/repo/avm/AVMCrawlTest.java | 1 - .../alfresco/repo/avm/AVMServiceTestBase.java | 11 +-- .../org/alfresco/repo/avm/AVMStressTest.java | 1 - .../org/alfresco/repo/avm/OrphanReaper.java | 68 +++++++++++++++---- .../alfresco/repo/avm/PlainFileNodeImpl.java | 1 + .../alfresco/repo/avm/hibernate/AVM.hbm.xml | 12 ++-- 10 files changed, 113 insertions(+), 59 deletions(-) diff --git a/.externalToolBuilders/JibX.launch b/.externalToolBuilders/JibX.launch index 86f6480230..10e2d8f564 100644 --- a/.externalToolBuilders/JibX.launch +++ b/.externalToolBuilders/JibX.launch @@ -1,30 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/alfresco/avm-base-context.xml b/config/alfresco/avm-base-context.xml index 3ec1d31b7d..30a504ba80 100644 --- a/config/alfresco/avm-base-context.xml +++ b/config/alfresco/avm-base-context.xml @@ -253,7 +253,7 @@ + init-method="init" destroy-method="shutDown" depends-on="AVMService"> 4000 @@ -268,7 +268,7 @@ - ${avm.storage} diff --git a/config/alfresco/avm-services-context.xml b/config/alfresco/avm-services-context.xml index 0a99e7594f..fe3e5ecbad 100644 --- a/config/alfresco/avm-services-context.xml +++ b/config/alfresco/avm-services-context.xml @@ -193,7 +193,7 @@ - 4000 + 60000 1000 @@ -201,6 +201,9 @@ 50 + + 1000 + diff --git a/config/alfresco/avm-test.properties b/config/alfresco/avm-test.properties index b7eafd73db..b709ab1e37 100644 --- a/config/alfresco/avm-test.properties +++ b/config/alfresco/avm-test.properties @@ -12,7 +12,7 @@ hibernate.connection.isolation=4 hibernate.default_batch_fetch_size=16 hibernate.jdbc.batch_versioned_data=true hibernate.cache.use_second_level_cache=true -hibernate.hbm2ddl.auto=create +hibernate.hbm2ddl.auto=update # AVM specific properties. avm.storage=build/test-results/storage avm.initialize=true diff --git a/source/java/org/alfresco/repo/avm/AVMCrawlTest.java b/source/java/org/alfresco/repo/avm/AVMCrawlTest.java index 5349aa1893..fc4093aa40 100644 --- a/source/java/org/alfresco/repo/avm/AVMCrawlTest.java +++ b/source/java/org/alfresco/repo/avm/AVMCrawlTest.java @@ -39,7 +39,6 @@ public class AVMCrawlTest extends AVMServiceTestBase int m = 4; // How many multiples of content to start with. long runTime = 1200000; // Ten minutes fService.purgeAVMStore("main"); - fReaper.setInactiveBaseSleep(60000); BulkLoader loader = new BulkLoader(); loader.setAvmService(fService); for (int i = 0; i < m; i++) diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTestBase.java b/source/java/org/alfresco/repo/avm/AVMServiceTestBase.java index 491bedab79..ce1e0132c0 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceTestBase.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceTestBase.java @@ -55,8 +55,10 @@ public class AVMServiceTestBase extends TestCase */ private long fStartTime; - /* (non-Javadoc) - * @see junit.framework.TestCase#setUp() + /** + * Setup for AVM tests. Note that we set the polling + * interval for the reaper to 4 seconds so that tests will + * finish reasonably quickly. */ @Override protected void setUp() throws Exception @@ -67,8 +69,9 @@ public class AVMServiceTestBase extends TestCase fStartTime = System.currentTimeMillis(); } - /* (non-Javadoc) - * @see junit.framework.TestCase#tearDown() + /** + * Cleanup after a test. Purge all stores. Move alf_data + * directory aside. */ @Override protected void tearDown() throws Exception diff --git a/source/java/org/alfresco/repo/avm/AVMStressTest.java b/source/java/org/alfresco/repo/avm/AVMStressTest.java index 77212f6ffd..6a4c8a925d 100644 --- a/source/java/org/alfresco/repo/avm/AVMStressTest.java +++ b/source/java/org/alfresco/repo/avm/AVMStressTest.java @@ -35,7 +35,6 @@ public class AVMStressTest extends AVMServiceTestBase { try { - fReaper.setInactiveBaseSleep(30000); int nCopies = 4; int nThreads = 8; BulkLoader loader = new BulkLoader(); diff --git a/source/java/org/alfresco/repo/avm/OrphanReaper.java b/source/java/org/alfresco/repo/avm/OrphanReaper.java index c3c858ebd4..92649bc4da 100644 --- a/source/java/org/alfresco/repo/avm/OrphanReaper.java +++ b/source/java/org/alfresco/repo/avm/OrphanReaper.java @@ -17,6 +17,7 @@ package org.alfresco.repo.avm; +import java.util.LinkedList; import java.util.List; import org.apache.commons.logging.Log; @@ -66,6 +67,16 @@ class OrphanReaper implements Runnable */ private Thread fThread; + /** + * The maximum length of the queue. + */ + private int fQueueLength; + + /** + * The linked list containing ids of nodes that are purgable. + */ + private LinkedList fPurgeQueue; + /** * Create one with default parameters. */ @@ -74,6 +85,7 @@ class OrphanReaper implements Runnable fInactiveBaseSleep = 30000; fActiveBaseSleep = 1000; fBatchSize = 50; + fQueueLength = 1000; fActive = false; fDone = false; } @@ -116,6 +128,15 @@ class OrphanReaper implements Runnable fTransaction = transaction; } + /** + * Set the maximum size of the queue of purgeable nodes. + * @param queueLength The max length. + */ + public void setMaxQueueLength(int queueLength) + { + fQueueLength = queueLength; + } + /** * Start things up after configuration is complete. */ @@ -131,7 +152,11 @@ class OrphanReaper implements Runnable */ void shutDown() { - fDone = true; + synchronized (this) + { + fDone = true; + notify(); + } try { fThread.join(); @@ -150,15 +175,18 @@ class OrphanReaper implements Runnable { while (!fDone) { - try + synchronized (this) { - Thread.sleep(fActive ? fActiveBaseSleep : fInactiveBaseSleep); + try + { + wait(fActive? fActiveBaseSleep : fInactiveBaseSleep); + } + catch (InterruptedException ie) + { + // Do nothing. + } + doBatch(); } - catch (InterruptedException ie) - { - // Do nothing. - } - doBatch(); } } @@ -189,15 +217,29 @@ class OrphanReaper implements Runnable { public void perform() { - List nodes = AVMContext.fgInstance.fAVMNodeDAO.getOrphans(fBatchSize); - if (nodes.size() == 0) + if (fPurgeQueue == null) { - fActive = false; - return; + List nodes = AVMContext.fgInstance.fAVMNodeDAO.getOrphans(fQueueLength); + if (nodes.size() == 0) + { + fActive = false; + return; + } + fPurgeQueue = new LinkedList(); + for (AVMNode node : nodes) + { + fPurgeQueue.add(node.getId()); + } } fActive = true; - for (AVMNode node : nodes) + for (int i = 0; i < fBatchSize; i++) { + if (fPurgeQueue.size() == 0) + { + fPurgeQueue = null; + return; + } + AVMNode node = AVMContext.fgInstance.fAVMNodeDAO.getByID(fPurgeQueue.removeFirst()); // Save away the ancestor and merged from fields from this node. HistoryLink hlink = AVMContext.fgInstance.fHistoryLinkDAO.getByDescendent(node); AVMNode ancestor = null; diff --git a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java index 5979e1a7e7..742fb4bba6 100644 --- a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java @@ -49,6 +49,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode { super(store.getAVMRepository().issueID(), store); fContent = new FileContentImpl(AVMRepository.GetInstance().issueContentID()); + // AVMContext.fgInstance.fAVMNodeDAO.flush(); AVMContext.fgInstance.fAVMNodeDAO.save(this); AVMContext.fgInstance.fAVMNodeDAO.flush(); AVMContext.fgInstance.fNewInAVMStoreDAO.save(new NewInAVMStoreImpl(store, this)); diff --git a/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml b/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml index 938dd7ba1b..b7597cb21a 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml +++ b/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml @@ -91,7 +91,7 @@ - @@ -119,7 +119,7 @@ column="current_root_id" unique="true" cascade="save-update"> - + @@ -139,7 +139,7 @@ column="root_id" not-null="true"> - + @@ -152,7 +152,7 @@ not-null="true"> - + @@ -160,13 +160,13 @@ column="parent_id"/> - + - +