You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/04/26 11:19:22 UTC
svn commit: r937976 - in /camel/trunk/components/camel-hawtdb/src:
main/java/org/apache/camel/component/hawtdb/
test/java/org/apache/camel/component/hawtdb/
Author: davsclaus
Date: Mon Apr 26 09:19:19 2010
New Revision: 937976
URL: http://svn.apache.org/viewvc?rev=937976&view=rev
Log:
Added retry when optimistic error in hawtdb.
Modified:
camel/trunk/components/camel-hawtdb/src/main/java/org/apache/camel/component/hawtdb/HawtDBFile.java
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadAndRecoverTest.java
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadConcurrentTest.java
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadTest.java
Modified: camel/trunk/components/camel-hawtdb/src/main/java/org/apache/camel/component/hawtdb/HawtDBFile.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-hawtdb/src/main/java/org/apache/camel/component/hawtdb/HawtDBFile.java?rev=937976&r1=937975&r2=937976&view=diff
==============================================================================
--- camel/trunk/components/camel-hawtdb/src/main/java/org/apache/camel/component/hawtdb/HawtDBFile.java (original)
+++ camel/trunk/components/camel-hawtdb/src/main/java/org/apache/camel/component/hawtdb/HawtDBFile.java Mon Apr 26 09:19:19 2010
@@ -21,6 +21,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.fusesource.hawtdb.api.BTreeIndexFactory;
import org.fusesource.hawtdb.api.Index;
+import org.fusesource.hawtdb.api.OptimisticUpdateException;
import org.fusesource.hawtdb.api.Transaction;
import org.fusesource.hawtdb.api.TxPageFile;
import org.fusesource.hawtdb.api.TxPageFileFactory;
@@ -104,17 +105,8 @@ public class HawtDBFile extends TxPageFi
LOG.trace("Executing work +++ start +++ " + work);
}
- T answer;
Transaction tx = pageFile.tx();
- try {
- answer = work.execute(tx);
- tx.commit();
- pageFile.flush();
- } catch (RuntimeException e) {
- LOG.warn("Error executing work " + work + " will do rollback.", e);
- tx.rollback();
- throw e;
- }
+ T answer = doExecute(work, tx, pageFile);
if (LOG.isTraceEnabled()) {
LOG.trace("Executing work +++ done +++ " + work);
@@ -154,4 +146,39 @@ public class HawtDBFile extends TxPageFi
return answer;
}
+ private static <T> T doExecute(Work<T> work, Transaction tx, TxPageFile page) {
+ T answer = null;
+
+ boolean done = false;
+ int attempt = 0;
+ while (!done) {
+ try {
+ // only log at DEBUG level if we are retrying
+ if (attempt > 0 && LOG.isDebugEnabled()) {
+ LOG.debug("Attempt " + attempt + " to execute work " + work);
+ }
+ attempt++;
+
+ answer = work.execute(tx);
+ // commit work
+ tx.commit();
+ // and flush so we ensure data is spooled to disk
+ page.flush();
+ // and we are done
+ done = true;
+ } catch (OptimisticUpdateException e) {
+ // retry as we hit an optimistic update error
+ LOG.warn("OptimisticUpdateException occurred at attempt " + attempt + " executing work " + work + " will do rollback and retry.");
+ // no harm doing rollback before retry and no wait is needed
+ tx.rollback();
+ } catch (RuntimeException e) {
+ LOG.warn("Error executing work " + work + " will do rollback.", e);
+ tx.rollback();
+ throw e;
+ }
+ }
+
+ return answer;
+ }
+
}
Modified: camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadAndRecoverTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadAndRecoverTest.java?rev=937976&r1=937975&r2=937976&view=diff
==============================================================================
--- camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadAndRecoverTest.java (original)
+++ camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadAndRecoverTest.java Mon Apr 26 09:19:19 2010
@@ -32,7 +32,6 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
-@Ignore("Test manually as its aggressive on the file system with sync each write")
public class HawtDBAggregateLoadAndRecoverTest extends CamelTestSupport {
private static final Log LOG = LogFactory.getLog(HawtDBAggregateLoadAndRecoverTest.class);
Modified: camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadConcurrentTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadConcurrentTest.java?rev=937976&r1=937975&r2=937976&view=diff
==============================================================================
--- camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadConcurrentTest.java (original)
+++ camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadConcurrentTest.java Mon Apr 26 09:19:19 2010
@@ -31,7 +31,6 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
-@Ignore("Test manually as its aggressive on the file system with sync each write")
public class HawtDBAggregateLoadConcurrentTest extends CamelTestSupport {
private static final Log LOG = LogFactory.getLog(HawtDBAggregateLoadConcurrentTest.class);
Modified: camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadTest.java?rev=937976&r1=937975&r2=937976&view=diff
==============================================================================
--- camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadTest.java (original)
+++ camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateLoadTest.java Mon Apr 26 09:19:19 2010
@@ -27,7 +27,6 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
-@Ignore("Test manually as its aggressive on the file system with sync each write")
public class HawtDBAggregateLoadTest extends CamelTestSupport {
private static final Log LOG = LogFactory.getLog(HawtDBAggregateLoadTest.class);