Esempio n. 1
0
  @Test
  public void delayedUpdate() throws Exception {
    View ix = openIndex("foo");

    byte[] key = "hello".getBytes();
    byte[] value1 = "world".getBytes();

    ix.store(null, key, value1);

    int i = 0;
    Updater u = start(ix, key, ("world-" + (i++)).getBytes());

    fastAssertArrayEquals(u.mValue, ix.load(null, key));

    u = start(ix, key, ("world-" + (i++)).getBytes());
    Transaction txn2 = mDb.newTransaction();
    fastAssertArrayEquals(u.mValue, ix.load(txn2, key));
    txn2.reset();

    u = start(ix, key, ("world-" + (i++)).getBytes());
    txn2.lockMode(LockMode.UPGRADABLE_READ);
    fastAssertArrayEquals(u.mValue, ix.load(txn2, key));
    txn2.reset();

    u = start(ix, key, ("world-" + (i++)).getBytes());
    txn2.lockMode(LockMode.REPEATABLE_READ);
    fastAssertArrayEquals(u.mValue, ix.load(txn2, key));
    txn2.reset();

    u = start(ix, key, ("world-" + (i++)).getBytes());
    txn2.lockMode(LockMode.READ_COMMITTED);
    fastAssertArrayEquals(u.mValue, ix.load(txn2, key));
    txn2.reset();
  }
Esempio n. 2
0
  @Override
  public final void store(byte[] value) throws IOException {
    byte[] key = mKey;
    if (key == null) {
      throw new IllegalStateException("Cursor position is undefined");
    }

    try {
      Transaction txn = mTxn;
      if (txn == null) {
        txn = mTree.mDatabase.newAlwaysRedoTransaction();
        try {
          if (txn.lockMode() != LockMode.UNSAFE) {
            txn.lockExclusive(mTree.mId, key, keyHash());
          }
          store(txn, leafExclusive(), value, false);
          txn.commit();
        } catch (Throwable e) {
          txn.reset();
          throw e;
        }
      } else {
        if (txn.lockMode() != LockMode.UNSAFE) {
          txn.lockExclusive(mTree.mId, key, keyHash());
        }
        store(txn, leafExclusive(), value, false);
      }
    } catch (Throwable e) {
      throw handleException(e, false);
    }
  }
Esempio n. 3
0
  @Test
  public void timedOutUpdate() throws Exception {
    View ix = openIndex("foo");

    byte[] key = "hello".getBytes();
    byte[] value1 = "world".getBytes();
    byte[] value2 = "world!!!".getBytes();

    ix.store(null, key, value1);

    Transaction txn = mDb.newTransaction();
    ix.store(txn, key, value2);

    fastAssertArrayEquals(value2, ix.load(Transaction.BOGUS, key));

    try {
      ix.load(null, key);
      fail();
    } catch (LockTimeoutException e) {
    }

    Transaction txn2 = mDb.newTransaction();
    try {
      ix.load(txn2, key);
      fail();
    } catch (LockTimeoutException e) {
    }

    txn2.lockMode(LockMode.UPGRADABLE_READ);
    try {
      ix.load(txn2, key);
      fail();
    } catch (LockTimeoutException e) {
    }

    txn2.lockMode(LockMode.REPEATABLE_READ);
    try {
      ix.load(txn2, key);
      fail();
    } catch (LockTimeoutException e) {
    }

    txn2.lockMode(LockMode.READ_COMMITTED);
    try {
      ix.load(txn2, key);
      fail();
    } catch (LockTimeoutException e) {
    }

    txn2.lockMode(LockMode.READ_UNCOMMITTED);
    fastAssertArrayEquals(value2, ix.load(txn2, key));

    txn2.lockMode(LockMode.UNSAFE);
    fastAssertArrayEquals(value2, ix.load(txn2, key));

    txn.commit();

    fastAssertArrayEquals(value2, ix.load(null, key));
  }
Esempio n. 4
0
 private void doCommit(Transaction txn, byte[] key, byte[] value) throws IOException {
   if (txn.lockMode() == LockMode.UNSAFE) {
     store(txn, leafExclusive(), value, false);
     txn.commit();
   } else {
     txn.lockExclusive(mTree.mId, key, keyHash());
     txn.storeCommit(this, value);
   }
 }
Esempio n. 5
0
  private void delayedDelete(boolean noGhost) throws Exception {
    View ix = openIndex("foo");

    byte[] key = "hello".getBytes();
    byte[] value1 = "world".getBytes();

    ix.store(null, key, value1);

    Updater u = start(ix, key, null, noGhost);

    assertEquals(null, ix.load(null, key));

    ix.store(null, key, value1);
    u = start(ix, key, null, noGhost);
    Transaction txn2 = mDb.newTransaction();
    assertEquals(null, ix.load(txn2, key));
    txn2.reset();

    ix.store(null, key, value1);
    u = start(ix, key, null, noGhost);
    txn2.lockMode(LockMode.UPGRADABLE_READ);
    assertEquals(null, ix.load(txn2, key));
    txn2.reset();

    ix.store(null, key, value1);
    u = start(ix, key, null, noGhost);
    txn2.lockMode(LockMode.REPEATABLE_READ);
    assertEquals(null, ix.load(txn2, key));
    txn2.reset();

    ix.store(null, key, value1);
    u = start(ix, key, null, noGhost);
    txn2.lockMode(LockMode.READ_COMMITTED);
    assertEquals(null, ix.load(txn2, key));
    txn2.reset();
  }