From ce6091edd184fb10b8cd020b5b95797e0340d529 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Tue, 24 Mar 2009 19:15:57 +0000 Subject: Derived index update must tolerate inconsistencies. --- .../java/com/amazon/carbonado/TestStorables.java | 30 --------------- .../carbonado/repo/indexed/TestIndexRepair.java | 45 +++++++++++++++++++++- .../com/amazon/carbonado/stored/WithJoinIndex.java | 4 +- 3 files changed, 46 insertions(+), 33 deletions(-) (limited to 'src/test') diff --git a/src/test/java/com/amazon/carbonado/TestStorables.java b/src/test/java/com/amazon/carbonado/TestStorables.java index 3e18fa7..c5b081b 100644 --- a/src/test/java/com/amazon/carbonado/TestStorables.java +++ b/src/test/java/com/amazon/carbonado/TestStorables.java @@ -1601,36 +1601,6 @@ public class TestStorables extends TestCase { assertEquals(0, query.with(0.2).count()); } - /* FIXME: Deleting of derived index entries needs more thought. - public void test_basicDerivedJoinIndex() throws Exception { - test_basicDerivedJoinIndex(getRepository()); - } - - protected void test_basicDerivedJoinIndex(Repository repo) throws Exception { - Storage storage1 = repo.storageFor(WithJoinIndex.class); - Storage storage2 = repo.storageFor(WithJoinIndex.Basic.class); - - WithJoinIndex.Basic basic = storage2.prepare(); - basic.setId(128120938); - basic.setIntProp(999); - basic.insert(); - - WithJoinIndex join = storage1.prepare(); - join.setId(1); - join.setBasic(basic); - join.insert(); - - join = storage1.query("intProp = ?").with(999).loadOne(); - - // Make sure delete does cause dependent properties to try load a - // missing joined object. - basic.delete(); - - join = storage1.query("intProp = ?").with(999).tryLoadOne(); - assertNull(join); - } - */ - public void test_derivedJoinIndex() throws Exception { test_derivedJoinIndex(getRepository()); } diff --git a/src/test/java/com/amazon/carbonado/repo/indexed/TestIndexRepair.java b/src/test/java/com/amazon/carbonado/repo/indexed/TestIndexRepair.java index 852c064..2f6578b 100644 --- a/src/test/java/com/amazon/carbonado/repo/indexed/TestIndexRepair.java +++ b/src/test/java/com/amazon/carbonado/repo/indexed/TestIndexRepair.java @@ -27,6 +27,7 @@ import com.amazon.carbonado.*; import com.amazon.carbonado.repo.map.MapRepositoryBuilder; import com.amazon.carbonado.stored.StorableTestBasicCompoundIndexed; +import com.amazon.carbonado.stored.WithJoinIndex; /** * @@ -42,8 +43,6 @@ public class TestIndexRepair extends TestCase { return new TestSuite(TestIndexRepair.class); } - private Repository mRepository; - public TestIndexRepair(String name) { super(name); } @@ -52,6 +51,48 @@ public class TestIndexRepair extends TestCase { return TestUtilities.buildTempRepository("indexrepair", 1000000, true); } + public void test_derivedIndex() throws Exception { + Repository repo = buildTempRepository(); + + Storage storage = repo.storageFor(WithJoinIndex.class); + Storage storage2 = repo.storageFor(WithJoinIndex.Basic.class); + + WithJoinIndex obj; + WithJoinIndex.Basic obj2; + + obj2 = storage2.prepare(); + obj2.setId(1); + obj2.setIntProp(100); + obj2.insert(); + + obj = storage.prepare(); + obj.setId(2); + obj.setBasicId(1); + obj.insert(); + + assertEquals(100, obj.getIntProp()); + + WithJoinIndex.adjust = 5; + try { + // Index is inconsistent now. + obj = storage.query("intProp = ?").with(100).loadOne(); + assertEquals(100 + WithJoinIndex.adjust, obj.getIntProp()); + + // Inconsistency should not break update. + obj2 = obj.getBasic(); + obj2.setIntProp(123); + obj2.update(); + + obj = storage.query("intProp = ?").with(123 + WithJoinIndex.adjust).loadOne(); + assertEquals(123 + WithJoinIndex.adjust, obj.getIntProp()); + } finally { + WithJoinIndex.adjust = 0; + } + + repo.close(); + repo = null; + } + public void test_shouldInsert() throws Exception { Repository repo = buildTempRepository(); test_shouldInsert(repo); diff --git a/src/test/java/com/amazon/carbonado/stored/WithJoinIndex.java b/src/test/java/com/amazon/carbonado/stored/WithJoinIndex.java index 17e6eff..57742a9 100644 --- a/src/test/java/com/amazon/carbonado/stored/WithJoinIndex.java +++ b/src/test/java/com/amazon/carbonado/stored/WithJoinIndex.java @@ -28,6 +28,8 @@ import com.amazon.carbonado.*; @PrimaryKey("id") @Indexes({@Index("intProp")}) public abstract class WithJoinIndex implements Storable { + public static volatile int adjust; + public abstract int getId(); public abstract void setId(int id); @@ -40,7 +42,7 @@ public abstract class WithJoinIndex implements Storable { @Derived(from="basic.intProp") public int getIntProp() throws FetchException { - return getBasic().getIntProp(); + return getBasic().getIntProp() + adjust; } @Alias("WITH_BASIC") -- cgit v1.2.3