diff options
| author | Brian S. O'Neill <bronee@gmail.com> | 2009-03-24 19:15:57 +0000 | 
|---|---|---|
| committer | Brian S. O'Neill <bronee@gmail.com> | 2009-03-24 19:15:57 +0000 | 
| commit | ce6091edd184fb10b8cd020b5b95797e0340d529 (patch) | |
| tree | c10f35f263f280043780777abd710de17b2426be /src/test/java/com/amazon | |
| parent | 855ca3029ab4afc2a5766fd9198c3b3a93f7b594 (diff) | |
Derived index update must tolerate inconsistencies.
Diffstat (limited to 'src/test/java/com/amazon')
3 files changed, 46 insertions, 33 deletions
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<WithJoinIndex> storage1 = repo.storageFor(WithJoinIndex.class); -        Storage<WithJoinIndex.Basic> 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<WithJoinIndex> storage = repo.storageFor(WithJoinIndex.class);
 +        Storage<WithJoinIndex.Basic> 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")
  | 
