/** * Applies a delta to the target. */ private void appendDeltas(WaveletDeltaRecord... deltas) throws InvalidProtocolBufferException, OperationException { for (WaveletDeltaRecord delta : deltas) { target.appendDelta(delta); } }
public void testEmptyStateIsEmpty() { assertNull(target.getSnapshot()); assertEquals(V0, target.getCurrentVersion()); assertEquals(V0, target.getHashedVersion(0)); assertNull(target.getTransformedDelta(V0)); assertNull(target.getAppliedDelta(V0)); }
/** * @param endVersion the version to look up * @return the applied delta with the given resulting version */ protected ByteStringMessage<ProtocolAppliedWaveletDelta> lookupAppliedDeltaByEndVersion( HashedVersion endVersion) { return waveletState.getAppliedDeltaByEndVersion(endVersion); }
@Override public CommittedWaveletSnapshot getSnapshot() throws WaveletStateException { awaitLoad(); acquireReadLock(); try { checkStateOk(); return new CommittedWaveletSnapshot(waveletState.getSnapshot(), waveletState.getLastPersistedVersion()); } finally { releaseReadLock(); } }
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 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)); }
target.getTransformedDeltaHistory(beginVersion, endVersion, new Receiver<TransformedWaveletDelta>() { final List<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>> appliedDeltas = new ArrayList<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>>(); target.getAppliedDeltaHistory(beginVersion, endVersion, new Receiver<ByteStringMessage<ProtocolAppliedWaveletDelta>>() {
public void testDeltasAccessibleByBeginVersion() throws Exception { appendDeltas(d1, d2, d3); assertEquals(d1.getTransformedDelta(), target.getTransformedDelta(V0)); assertEquals(d1.getAppliedDelta(), target.getAppliedDelta(V0)); assertEquals(d2.getTransformedDelta(), target.getTransformedDelta(d1.getResultingVersion())); assertEquals(d2.getAppliedDelta(), target.getAppliedDelta(d1.getResultingVersion())); assertEquals(d3.getTransformedDelta(), target.getTransformedDelta(d2.getResultingVersion())); assertEquals(d3.getAppliedDelta(), target.getAppliedDelta(d2.getResultingVersion())); // Wrong hashes return null. assertNull(target.getTransformedDelta(HashedVersion.unsigned(0))); assertNull(target.getAppliedDelta(HashedVersion.unsigned(0))); }
protected ReadableWaveletData accessSnapshot() { return waveletState.getSnapshot(); } }
public void testSnapshotMetadataReflectsDeltas() throws Exception { HashedVersion v2 = d1.getResultingVersion(); appendDeltas(d1); assertEquals(v2, target.getCurrentVersion()); ReadableWaveletData snapshot = target.getSnapshot(); assertEquals(AUTHOR, snapshot.getCreator()); assertEquals(v2, snapshot.getHashedVersion()); assertEquals(TS, snapshot.getCreationTime()); assertEquals(TS, snapshot.getLastModifiedTime()); assertEquals(2, snapshot.getVersion()); HashedVersion v4 = d2.getResultingVersion(); appendDeltas(d2); assertEquals(v4, target.getCurrentVersion()); snapshot = target.getSnapshot(); assertEquals(v4, snapshot.getHashedVersion()); assertEquals(4, snapshot.getVersion()); // Last-modified-time doesn't change due to unworthiness. }
public void testDeltasAccesssibleByEndVersion() throws Exception { appendDeltas(d1, d2, d3); for (WaveletDeltaRecord d : Arrays.asList(d1, d2, d3)) { assertEquals(d.getTransformedDelta(), target.getTransformedDeltaByEndVersion(d.getResultingVersion())); assertEquals(d.getAppliedDelta(), target.getAppliedDeltaByEndVersion(d.getResultingVersion())); } // Wrong hashes return null. assertNull(target.getTransformedDeltaByEndVersion( HashedVersion.unsigned(d1.getResultingVersion().getVersion()))); assertNull(target.getAppliedDeltaByEndVersion( HashedVersion.unsigned(d1.getResultingVersion().getVersion()))); }
@SuppressWarnings("rawtypes") private void checkGetTransformedDeltasThrowsException(HashedVersion startVersion, HashedVersion endVersion, Receiver<TransformedWaveletDelta> receiver, Class exceptionClass) { try { target.getTransformedDeltaHistory(startVersion, endVersion, receiver); fail("Expected exception not thrown."); } catch (Exception ex) { assertEquals(IllegalArgumentException.class, exceptionClass); } }
@SuppressWarnings("rawtypes") private void checkGetAppliedDeltasThrowsException(HashedVersion startVersion, HashedVersion endVersion, Receiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>> receiver, Class exceptionClass) { try { target.getAppliedDeltaHistory(startVersion, endVersion, receiver); fail("Expected exception not thrown."); } catch (Exception ex) { assertEquals(IllegalArgumentException.class, exceptionClass); } }
public void testHashedVersionAccessibleOnDeltaBoundaries() throws Exception { appendDeltas(d1, d2, d3); assertEquals(V0, target.getHashedVersion(0)); assertEquals(d1.getResultingVersion(), target.getHashedVersion(2)); assertEquals(d2.getResultingVersion(), target.getHashedVersion(4)); assertEquals(d3.getResultingVersion(), target.getHashedVersion(5)); assertNull(target.getHashedVersion(1)); assertNull(target.getHashedVersion(3)); assertNull(target.getHashedVersion(6)); }
/** * @param versionActuallyAppliedAt the version to look up * @return the applied delta applied at the specified hashed version */ protected ByteStringMessage<ProtocolAppliedWaveletDelta> lookupAppliedDelta( HashedVersion versionActuallyAppliedAt) { return waveletState.getAppliedDelta(versionActuallyAppliedAt); }
protected TransformedWaveletDelta lookupTransformedDelta(HashedVersion appliedAtVersion) { return waveletState.getTransformedDelta(appliedAtVersion); }
@Nullable protected HashedVersion getCurrentVersion() { if(waveletState == null) return null; return waveletState.getCurrentVersion(); }
@Override public HashedVersion getLastCommittedVersion() throws WaveletStateException { awaitLoad(); acquireReadLock(); try { checkStateOk(); return waveletState.getLastPersistedVersion(); } finally { releaseReadLock(); } }
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 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)); }