protected void persist(final HashedVersion version, final ImmutableSet<String> domainsToNotify) { Preconditions.checkState(writeLock.isHeldByCurrentThread(), "must hold write lock"); final ListenableFuture<Void> result = waveletState.persist(version); result.addListener( new Runnable() { @Override public void run() { try { result.get(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (ExecutionException e) { LOG.severe("Version " + version, e); } acquireWriteLock(); try { waveletState.flush(version); notifyOfCommit(version, domainsToNotify); } finally { releaseWriteLock(); } } }, storageContinuationExecutor); }
public void checkManyDeltasPersistFutureDone() throws Exception { appendDeltas(d1, d2, d3); Future<Void> future = target.persist(d3.getResultingVersion()); awaitPersistence(); assertTrue(future.isDone()); assertEquals(null, future.get()); assertEquals(d3.getResultingVersion(), target.getLastPersistedVersion()); }
public void checkManyDeltasPersistFutureDone() throws Exception { appendDeltas(d1, d2, d3); Future<Void> future = target.persist(d3.getResultingVersion()); awaitPersistence(); assertTrue(future.isDone()); assertEquals(null, future.get()); assertEquals(d3.getResultingVersion(), target.getLastPersistedVersion()); }
public void checkSingleDeltaPersistFutureDone() throws Exception { appendDeltas(d1); Future<Void> future = target.persist(d1.getResultingVersion()); awaitPersistence(); assertTrue(future.isDone()); assertEquals(null, future.get()); assertEquals(d1.getResultingVersion(), target.getLastPersistedVersion()); }
public void testCanPersistOnlySomeDeltas() throws Exception { appendDeltas(d1, d2, d3); Future<Void> future = target.persist(d2.getResultingVersion()); awaitPersistence(); assertTrue(future.isDone()); assertEquals(null, future.get()); assertEquals(d2.getResultingVersion(), target.getLastPersistedVersion()); future = target.persist(d3.getResultingVersion()); awaitPersistence(); assertTrue(future.isDone()); assertEquals(null, future.get()); assertEquals(d3.getResultingVersion(), target.getLastPersistedVersion()); }
public void testCanPersistOnlySomeDeltas() throws Exception { appendDeltas(d1, d2, d3); Future<Void> future = target.persist(d2.getResultingVersion()); awaitPersistence(); assertTrue(future.isDone()); assertEquals(null, future.get()); assertEquals(d2.getResultingVersion(), target.getLastPersistedVersion()); future = target.persist(d3.getResultingVersion()); awaitPersistence(); assertTrue(future.isDone()); assertEquals(null, future.get()); assertEquals(d3.getResultingVersion(), target.getLastPersistedVersion()); }
public void checkSingleDeltaPersistFutureDone() throws Exception { appendDeltas(d1); Future<Void> future = target.persist(d1.getResultingVersion()); awaitPersistence(); assertTrue(future.isDone()); assertEquals(null, future.get()); assertEquals(d1.getResultingVersion(), target.getLastPersistedVersion()); }
public void testDeltaHistoryInterruptQueriesCorrectHistory() throws Exception { appendDeltas(d1, d2, d3); target.persist(d3.getResultingVersion()); checkHistoryForDeltasWithInterrupt(0, d1); checkHistoryForDeltasWithInterrupt(1, d1, d2); checkHistoryForDeltasWithInterrupt(2, d1, d2, d3); }
public void testDeltaHistoryInterruptQueriesCorrectHistory() throws Exception { appendDeltas(d1, d2, d3); target.persist(d3.getResultingVersion()); checkHistoryForDeltasWithInterrupt(0, d1); checkHistoryForDeltasWithInterrupt(1, d1, d2); checkHistoryForDeltasWithInterrupt(2, d1, d2, d3); }
public void testDeltaHistoryQueriesCorrectHistory() throws Exception { appendDeltas(d1, d2, d3); target.persist(d3.getResultingVersion()); checkHistoryForDeltas(d1); checkHistoryForDeltas(d1, d2); checkHistoryForDeltas(d2, d3); checkHistoryForDeltas(d1, d2, d3); }
public void testDeltaHistoryQueriesCorrectHistory() throws Exception { appendDeltas(d1, d2, d3); target.persist(d3.getResultingVersion()); checkHistoryForDeltas(d1); checkHistoryForDeltas(d1, d2); checkHistoryForDeltas(d2, d3); checkHistoryForDeltas(d1, d2, d3); }
public void testSingleDeltaHistoryAccessible() throws Exception { appendDeltas(d1); target.persist(d1.getResultingVersion()); ListReceiver<TransformedWaveletDelta> transformedDeltasReceiver = new ListReceiver<TransformedWaveletDelta>(); target.getTransformedDeltaHistory(V0, d1.getResultingVersion(), transformedDeltasReceiver); assertEquals(1, transformedDeltasReceiver.size()); assertEquals(d1.getTransformedDelta(), transformedDeltasReceiver.get(0)); ListReceiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>> appliedDeltasReceiver = new ListReceiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>>(); target.getAppliedDeltaHistory(V0, d1.getResultingVersion(), appliedDeltasReceiver); assertEquals(1, appliedDeltasReceiver.size()); assertEquals(d1.getAppliedDelta(), Iterables.getOnlyElement(appliedDeltasReceiver)); }
public void testSingleDeltaHistoryAccessible() throws Exception { appendDeltas(d1); target.persist(d1.getResultingVersion()); ListReceiver<TransformedWaveletDelta> transformedDeltasReceiver = new ListReceiver<TransformedWaveletDelta>(); target.getTransformedDeltaHistory(V0, d1.getResultingVersion(), transformedDeltasReceiver); assertEquals(1, transformedDeltasReceiver.size()); assertEquals(d1.getTransformedDelta(), transformedDeltasReceiver.get(0)); ListReceiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>> appliedDeltasReceiver = new ListReceiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>>(); target.getAppliedDeltaHistory(V0, d1.getResultingVersion(), appliedDeltasReceiver); assertEquals(1, appliedDeltasReceiver.size()); assertEquals(d1.getAppliedDelta(), Iterables.getOnlyElement(appliedDeltasReceiver)); }
public void testDeltaHistoryRequiresCorrectHash() throws Exception { appendDeltas(d1); target.persist(d1.getResultingVersion()); Receiver<TransformedWaveletDelta> transformedDeltasReceiver = new ListReceiver<TransformedWaveletDelta>(); Receiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>> appliedDeltasReceiver = new ListReceiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>>(); // Wrong start hash. checkGetTransformedDeltasThrowsException(HashedVersion.unsigned(0), d1.getResultingVersion(), transformedDeltasReceiver, IllegalArgumentException.class); checkGetAppliedDeltasThrowsException(HashedVersion.unsigned(0), d1.getResultingVersion(), appliedDeltasReceiver, IllegalArgumentException.class); // Wrong end hash. checkGetTransformedDeltasThrowsException(V0, HashedVersion.unsigned(d1.getResultingVersion().getVersion()), transformedDeltasReceiver, IllegalArgumentException.class); checkGetAppliedDeltasThrowsException(V0, HashedVersion.unsigned(d1.getResultingVersion().getVersion()), appliedDeltasReceiver, IllegalArgumentException.class); }
public void testDeltaHistoryRequiresCorrectHash() throws Exception { appendDeltas(d1); target.persist(d1.getResultingVersion()); Receiver<TransformedWaveletDelta> transformedDeltasReceiver = new ListReceiver<TransformedWaveletDelta>(); Receiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>> appliedDeltasReceiver = new ListReceiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>>(); // Wrong start hash. checkGetTransformedDeltasThrowsException(HashedVersion.unsigned(0), d1.getResultingVersion(), transformedDeltasReceiver, IllegalArgumentException.class); checkGetAppliedDeltasThrowsException(HashedVersion.unsigned(0), d1.getResultingVersion(), appliedDeltasReceiver, IllegalArgumentException.class); // Wrong end hash. checkGetTransformedDeltasThrowsException(V0, HashedVersion.unsigned(d1.getResultingVersion().getVersion()), transformedDeltasReceiver, IllegalArgumentException.class); checkGetAppliedDeltasThrowsException(V0, HashedVersion.unsigned(d1.getResultingVersion().getVersion()), appliedDeltasReceiver, IllegalArgumentException.class); }