Author: davsclaus
Date: Wed Feb 24 08:01:11 2010
New Revision: 915716
URL: http://svn.apache.org/viewvc?rev=915716&view=rev
Log:
CAMEL-217: Fixed CS. Added more tests.
Added:
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryLoadExistingTest.java
- copied, changed from r915673,
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryTest.java
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryMultipleRepoTest.java
- copied, changed from r915673,
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryTest.java
Modified:
camel/trunk/components/camel-hawtdb/src/main/java/org/apache/camel/component/hawtdb/HawtDBFile.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=915716&r1=915715&r2=915716&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
Wed Feb 24 08:01:11 2010
@@ -30,31 +30,34 @@
import org.fusesource.hawtdb.util.marshaller.VariableBufferMarshaller;
/**
- * Manages access to a shared HawtDB file from multiple
HawtDBAggregationRepository objects.
+ * Manages access to a shared HawtDB file.
+ * <p/>
+ * Will by default not sync writes which allows it to be faster.
+ * You can force syncing by setting sync=true.
*/
public class HawtDBFile extends HawtPageFileFactory implements Service {
private static final transient Log LOG =
LogFactory.getLog(HawtDBFile.class);
// the root which contains an index with name -> page for the real indexes
- private final static BTreeIndexFactory<String, Integer> rootIndexesFactory
= new BTreeIndexFactory<String, Integer>();
+ private static final BTreeIndexFactory<String, Integer>
ROOT_INDEXES_FACTORY = new BTreeIndexFactory<String, Integer>();
// the real indexes where we store persisted data in buffers
- private final static BTreeIndexFactory<Buffer, Buffer> indexFactory = new
BTreeIndexFactory<Buffer, Buffer>();
+ private static final BTreeIndexFactory<Buffer, Buffer> INDEX_FACTORY = new
BTreeIndexFactory<Buffer, Buffer>();
- public HawtDBFile() {
- setSync(false);
- }
+ private HawtPageFile pageFile;
static {
- rootIndexesFactory.setKeyMarshaller(StringMarshaller.INSTANCE);
- rootIndexesFactory.setValueMarshaller(IntegerMarshaller.INSTANCE);
- rootIndexesFactory.setDeferredEncoding(true);
- indexFactory.setKeyMarshaller(VariableBufferMarshaller.INSTANCE);
- indexFactory.setValueMarshaller(VariableBufferMarshaller.INSTANCE);
- indexFactory.setDeferredEncoding(true);
+ ROOT_INDEXES_FACTORY.setKeyMarshaller(StringMarshaller.INSTANCE);
+ ROOT_INDEXES_FACTORY.setValueMarshaller(IntegerMarshaller.INSTANCE);
+ ROOT_INDEXES_FACTORY.setDeferredEncoding(true);
+ INDEX_FACTORY.setKeyMarshaller(VariableBufferMarshaller.INSTANCE);
+ INDEX_FACTORY.setValueMarshaller(VariableBufferMarshaller.INSTANCE);
+ INDEX_FACTORY.setDeferredEncoding(true);
}
- private HawtPageFile pageFile;
+ public HawtDBFile() {
+ setSync(false);
+ }
public void start() {
if (LOG.isDebugEnabled()) {
@@ -71,10 +74,10 @@
int page = tx.allocator().alloc(1);
// if we just created the file, first allocated page
should be 0
assert page == 0;
- rootIndexesFactory.create(tx, 0);
+ ROOT_INDEXES_FACTORY.create(tx, 0);
LOG.info("Aggregation repository data store created using
file: " + getFile());
} else {
- Index<String, Integer> indexes =
rootIndexesFactory.open(tx, 0);
+ Index<String, Integer> indexes =
ROOT_INDEXES_FACTORY.open(tx, 0);
LOG.info("Aggregation repository data store loaded using
file: " + getFile()
+ " containing " + indexes.size() + "
repositories.");
}
@@ -112,13 +115,13 @@
}
public Index<Buffer, Buffer> getRepositoryIndex(Transaction tx, String
name) {
- Index<String, Integer> indexes = rootIndexesFactory.open(tx, 0);
+ Index<String, Integer> indexes = ROOT_INDEXES_FACTORY.open(tx, 0);
Integer location = indexes.get(name);
if (location == null) {
// create it..
int page = tx.allocator().alloc(1);
- Index<Buffer, Buffer> created = indexFactory.create(tx, page);
+ Index<Buffer, Buffer> created = INDEX_FACTORY.create(tx, page);
// add it to indexes so we can find it the next time
indexes.put(name, page);
@@ -132,7 +135,7 @@
if (LOG.isTraceEnabled()) {
LOG.trace("Repository index with name " + name + " at location
" + location);
}
- return indexFactory.open(tx, location);
+ return INDEX_FACTORY.open(tx, location);
}
}
Copied:
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryLoadExistingTest.java
(from r915673,
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryLoadExistingTest.java?p2=camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryLoadExistingTest.java&p1=camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryTest.java&r1=915673&r2=915716&rev=915716&view=diff
==============================================================================
---
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryTest.java
(original)
+++
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryLoadExistingTest.java
Wed Feb 24 08:01:11 2010
@@ -23,7 +23,7 @@
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
-public class HawtDBAggregationRepositoryTest extends CamelTestSupport {
+public class HawtDBAggregationRepositoryLoadExistingTest extends
CamelTestSupport {
private HawtDBFile hawtDBFile;
@@ -44,21 +44,25 @@
}
@Test
- public void testOperations() {
+ public void testExisting() throws Exception {
HawtDBAggregationRepository<String> repo = new
HawtDBAggregationRepository<String>();
repo.setFile(hawtDBFile);
repo.setName("repo1");
- // Can't get something we have not put in...
- Exchange actual = repo.get("missing");
- assertEquals(null, actual);
-
// Store it..
Exchange exchange1 = new DefaultExchange(context);
exchange1.getIn().setBody("counter:1");
- actual = repo.add("foo", exchange1);
+ Exchange actual = repo.add("foo", exchange1);
assertEquals(null, actual);
+ // stop the repo
+ hawtDBFile.stop();
+
+ Thread.sleep(1000);
+
+ // load the repo again
+ hawtDBFile.start();
+
// Get it back..
actual = repo.get("foo");
assertEquals("counter:1", actual.getIn().getBody());
@@ -75,4 +79,4 @@
assertEquals("counter:2", actual.getIn().getBody());
}
-}
+}
\ No newline at end of file
Copied:
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryMultipleRepoTest.java
(from r915673,
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryMultipleRepoTest.java?p2=camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryMultipleRepoTest.java&p1=camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryTest.java&r1=915673&r2=915716&rev=915716&view=diff
==============================================================================
---
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryTest.java
(original)
+++
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregationRepositoryMultipleRepoTest.java
Wed Feb 24 08:01:11 2010
@@ -23,7 +23,7 @@
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
-public class HawtDBAggregationRepositoryTest extends CamelTestSupport {
+public class HawtDBAggregationRepositoryMultipleRepoTest extends
CamelTestSupport {
private HawtDBFile hawtDBFile;
@@ -44,35 +44,79 @@
}
@Test
- public void testOperations() {
- HawtDBAggregationRepository<String> repo = new
HawtDBAggregationRepository<String>();
- repo.setFile(hawtDBFile);
- repo.setName("repo1");
+ public void testMultipeRepo() {
+ HawtDBAggregationRepository<String> repo1 = new
HawtDBAggregationRepository<String>();
+ repo1.setFile(hawtDBFile);
+ repo1.setName("repo1");
+
+ HawtDBAggregationRepository<String> repo2 = new
HawtDBAggregationRepository<String>();
+ repo2.setFile(hawtDBFile);
+ repo2.setName("repo2");
// Can't get something we have not put in...
- Exchange actual = repo.get("missing");
+ Exchange actual = repo1.get("missing");
+ assertEquals(null, actual);
+
+ actual = repo2.get("missing");
assertEquals(null, actual);
// Store it..
Exchange exchange1 = new DefaultExchange(context);
exchange1.getIn().setBody("counter:1");
- actual = repo.add("foo", exchange1);
+ actual = repo1.add("foo", exchange1);
assertEquals(null, actual);
// Get it back..
- actual = repo.get("foo");
+ actual = repo1.get("foo");
assertEquals("counter:1", actual.getIn().getBody());
+ assertEquals(null, repo2.get("foo"));
// Change it..
Exchange exchange2 = new DefaultExchange(context);
exchange2.getIn().setBody("counter:2");
- actual = repo.add("foo", exchange2);
+ actual = repo1.add("foo", exchange2);
// the old one
assertEquals("counter:1", actual.getIn().getBody());
+ // add to repo2
+ Exchange exchange3 = new DefaultExchange(context);
+ exchange3.getIn().setBody("Hello World");
+ actual = repo2.add("bar", exchange3);
+ assertEquals(null, actual);
+ assertEquals(null, repo1.get("bar"));
+
// Get it back..
- actual = repo.get("foo");
+ actual = repo1.get("foo");
assertEquals("counter:2", actual.getIn().getBody());
+ assertEquals(null, repo2.get("foo"));
+
+ actual = repo2.get("bar");
+ assertEquals("Hello World", actual.getIn().getBody());
+ assertEquals(null, repo1.get("bar"));
+ }
+
+ @Test
+ public void testMultipeRepoSameKeyDifferentContent() {
+ HawtDBAggregationRepository<String> repo1 = new
HawtDBAggregationRepository<String>();
+ repo1.setFile(hawtDBFile);
+ repo1.setName("repo1");
+
+ HawtDBAggregationRepository<String> repo2 = new
HawtDBAggregationRepository<String>();
+ repo2.setFile(hawtDBFile);
+ repo2.setName("repo2");
+
+ Exchange exchange1 = new DefaultExchange(context);
+ exchange1.getIn().setBody("Hello World");
+ repo1.add("foo", exchange1);
+
+ Exchange exchange2 = new DefaultExchange(context);
+ exchange2.getIn().setBody("Bye World");
+ repo2.add("foo", exchange2);
+
+ Exchange actual = repo1.get("foo");
+ assertEquals("Hello World", actual.getIn().getBody());
+ actual = repo2.get("foo");
+ assertEquals("Bye World", actual.getIn().getBody());
}
-}
+}
\ No newline at end of file