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
This commit is contained in:
Erik Winlof
2014-09-04 06:30:16 +00:00
parent d9324747d0
commit 7f3dda5c98
2 changed files with 65 additions and 50 deletions

View File

@@ -85,7 +85,7 @@
<!-- Local (non-grid-based) Feed Generator --> <!-- Local (non-grid-based) Feed Generator -->
<bean id="feedGenerator" class="org.alfresco.repo.activities.feed.local.LocalFeedGenerator" parent="baseFeedGenerator"> <bean id="feedGenerator" class="org.alfresco.repo.activities.feed.local.LocalFeedGenerator" parent="baseFeedGenerator">
<property name="feedTaskProcessor" ref="feedTaskProcessor"/> <property name="feedTaskProcessor" ref="FeedTaskProcessor"/>
</bean> </bean>
<bean id="feedTaskProcessor" class="org.alfresco.repo.activities.feed.local.LocalFeedTaskProcessor"> <bean id="feedTaskProcessor" class="org.alfresco.repo.activities.feed.local.LocalFeedTaskProcessor">
@@ -113,6 +113,20 @@
</bean> </bean>
<bean id="FeedTaskProcessor" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="target">
<ref bean="feedTaskProcessor"/>
</property>
<property name="interceptorNames">
<list>
<idref bean="checkTxnAdvisor" />
</list>
</property>
</bean>
<bean id="feedNotifier" class="org.alfresco.repo.activities.feed.FeedNotifierImpl"> <bean id="feedNotifier" class="org.alfresco.repo.activities.feed.FeedNotifierImpl">
<property name="personService" ref="PersonService"/> <property name="personService" ref="PersonService"/>
<property name="nodeService" ref="NodeService"/> <property name="nodeService" ref="NodeService"/>

View File

@@ -164,62 +164,63 @@ public abstract class AbstractFeedGenerator implements FeedGenerator
return; return;
} }
LockCallback lockCallback = new LockCallback(); //MNT-12145 : BM-0013 Soak test: Exception during generation of feeds org.springframework.dao.DataIntegrityViolationException.
String lockToken = null; // run one job cycle
try RetryingTransactionHelper helper = transactionService.getRetryingTransactionHelper();
helper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{ {
lockToken = acquireLock(lockCallback); public Void execute() throws Throwable
// lock held here
if (logger.isTraceEnabled())
{ {
logger.trace("Activities feed generator started");
}
// run one job cycle LockCallback lockCallback = new LockCallback();
RetryingTransactionHelper helper = transactionService.getRetryingTransactionHelper();
// respect read-only server String lockToken = null;
helper.setForceWritable(true); try
helper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{
@Override
public Void execute() throws Throwable
{ {
generate(); lockToken = acquireLock(lockCallback);
return null;
}
});
if (logger.isTraceEnabled()) // lock held here
{
logger.trace("Activities feed generator completed"); if (logger.isTraceEnabled())
} {
} logger.trace("Activities feed generator started");
catch (LockAcquisitionException e) }
{
// Job being done by another process generate();
if (logger.isDebugEnabled())
{ 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); 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;
} }
} }, false, false);
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);
}
} }
protected abstract boolean generate() throws Exception; protected abstract boolean generate() throws Exception;