From 7f3dda5c98a60609e872cec83ecf0576a9f1bdf6 Mon Sep 17 00:00:00 2001 From: Erik Winlof Date: Thu, 4 Sep 2014 06:30:16 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud) 82289: Merged V4.2-BUG-FIX (4.2.4) to HEAD-BUG-FIX (5.0/Cloud) 81646: Merged V4.1-BUG-FIX (4.1.10) to V4.2-BUG-FIX (4.2.4) 81441: Merged DEV to V4.1-BUG-FIX 81113 : MNT-12145 : BM-0013 Soak test: Exception during generation of feeds org.springframework.dao.DataIntegrityViolationException. Added RetryingTransactionHelper (before the job lock is created), which would deal with the exception neatly, and disabled force writable flag. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@83202 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../default/activities-feed-context.xml | 16 ++- .../feed/AbstractFeedGenerator.java | 99 ++++++++++--------- 2 files changed, 65 insertions(+), 50 deletions(-) diff --git a/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml b/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml index 391a463c2d..5e47d6b773 100644 --- a/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml +++ b/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml @@ -85,7 +85,7 @@ - + @@ -113,6 +113,20 @@ + + + true + + + + + + + + + + + diff --git a/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java b/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java index 0bf05a1a11..d157bac9b3 100644 --- a/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java +++ b/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java @@ -164,62 +164,63 @@ public abstract class AbstractFeedGenerator implements FeedGenerator return; } - LockCallback lockCallback = new LockCallback(); - String lockToken = null; - try + //MNT-12145 : BM-0013 Soak test: Exception during generation of feeds org.springframework.dao.DataIntegrityViolationException. + // run one job cycle + RetryingTransactionHelper helper = transactionService.getRetryingTransactionHelper(); + + helper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() { - lockToken = acquireLock(lockCallback); - - // lock held here - - if (logger.isTraceEnabled()) + public Void execute() throws Throwable { - logger.trace("Activities feed generator started"); - } - // run one job cycle - RetryingTransactionHelper helper = transactionService.getRetryingTransactionHelper(); - // respect read-only server - helper.setForceWritable(true); - helper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable + LockCallback lockCallback = new LockCallback(); + + String lockToken = null; + try { - generate(); - return null; - } - }); + lockToken = acquireLock(lockCallback); - if (logger.isTraceEnabled()) - { - logger.trace("Activities feed generator completed"); - } - } - catch (LockAcquisitionException e) - { - // Job being done by another process - if (logger.isDebugEnabled()) - { + // lock held here + + if (logger.isTraceEnabled()) + { + logger.trace("Activities feed generator started"); + } + + generate(); + + if (logger.isTraceEnabled()) + { + logger.trace("Activities feed generator completed"); + } + } + catch (LockAcquisitionException e) + { + // Job being done by another process + if (logger.isDebugEnabled()) + { logger.debug("Activities feed generator already underway: " + LOCK_QNAME); + } + } + catch (Throwable e) + { + // If the VM is shutting down, then ignore + if (vmShutdownListener.isVmShuttingDown()) + { + // Ignore + } + else + { + logger.error("Exception during generation of feeds", e); + } + } + finally + { + releaseLock(lockCallback, lockToken); + } + return null; } - } - catch (Throwable e) - { - // If the VM is shutting down, then ignore - if (vmShutdownListener.isVmShuttingDown()) - { - // Ignore - } - else - { - logger.error("Exception during generation of feeds", e); - } - } - finally - { - releaseLock(lockCallback, lockToken); - } + }, false, false); } protected abstract boolean generate() throws Exception;