/** * Returns true if the given deltas apply to the current version of this * wavelet and they are contiguous. * * @param deltas the list of deltas to check. */ public boolean areContiguousToCurrentVersion(DeltaSequence deltas) { return deltas.getStartVersion() == getVersionAfterDeltas().getVersion(); } }
public void testGetVersionAfterDeltas() throws Exception { assertEquals(V1, wavelet.getVersionAfterDeltas()); }
public void testGetVersionAfterDeltas() throws Exception { assertEquals(V1, wavelet.getVersionAfterDeltas()); }
/** * Appends the given deltas to the deltas already stored. Updates the latest * snapshot and latest version as well. This method will make a copy of the * snapshot. * * @param updatedSnapshot the snapshot after deltas have been applied * @param newDeltas the deltas that have been applied since the last call to * appendDeltas. */ public void appendDeltas(ReadableWaveletData updatedSnapshot, DeltaSequence newDeltas) { HashedVersion newEndVersion = newDeltas.getEndVersion(); Preconditions.checkArgument( !newDeltas.isEmpty(), "There were no new deltas passed to appendDeltas"); Preconditions.checkArgument(updatedSnapshot.getVersion() == newEndVersion.getVersion(), String.format("Version of snapshot %s doesn't match the HashedVersion %s", updatedSnapshot.getVersion(), newEndVersion)); Preconditions.checkArgument(areContiguousToCurrentVersion(newDeltas), String.format( "Deltas are not contiguous to the current version(%s) %s", getVersionAfterDeltas(), deltas)); WaveletName updatedWaveletName = WaveletDataUtil.waveletNameOf(updatedSnapshot); Preconditions.checkArgument(updatedWaveletName.equals(waveletName), String.format( "Updated wavelet doesn't have the same name as with which this class has been " + "instantiated. %s != %s", updatedWaveletName, waveletName)); // TODO(ljvderijk): This should actually be applying the deltas, however // they do not contain a timestamp at this time. snapshotAfterDeltas = WaveletDataUtil.copyWavelet(updatedSnapshot); deltas = DeltaSequence.join(deltas, newDeltas); }
public void testAppendDeltas() throws Exception { addCarolOp.apply(waveletData); HashedVersion hashedVersionTwo = HashedVersion.unsigned(2); TransformedWaveletDelta delta = new TransformedWaveletDelta(ALEX, hashedVersionTwo, 0L, Arrays.asList(addCarolOp)); wavelet.appendDeltas(waveletData, DeltaSequence.of(delta)); ReadableWaveletData firstSnapshot = wavelet.getSnapshotBeforeDeltas(); assertFalse("Bob should not be a participant", firstSnapshot.getParticipants().contains(BOB)); assertEquals(hashedVersionTwo, wavelet.getVersionAfterDeltas()); ReadableWaveletData latestSnapshot = wavelet.getSnapshotAfterDeltas(); assertNotSame("A copy of the waveletdata must be made", waveletData, latestSnapshot); Collection<ParticipantId> participants = Collections.unmodifiableCollection(Arrays.asList(BOB, CAROL)); assertTrue("Bob and Carol should be participating", latestSnapshot.getParticipants().containsAll(participants)); }
"Couldn't initialize the capabilities of robot(" + robotName + "), dropping its wavelet(" + WaveletDataUtil.waveletNameOf(snapshot) + ") at version " + wavelet.getVersionAfterDeltas(), e); return; } catch (PersistenceException e) { "Couldn't initialize the capabilities of robot(" + robotName + "), dropping its wavelet(" + WaveletDataUtil.waveletNameOf(snapshot) + ") at version " + wavelet.getVersionAfterDeltas(), e); return; response, wavelet.getSnapshotAfterDeltas(), wavelet.getVersionAfterDeltas(), account);
public void testAppendDeltas() throws Exception { addCarolOp.apply(waveletData); HashedVersion hashedVersionTwo = HashedVersion.unsigned(2); TransformedWaveletDelta delta = new TransformedWaveletDelta(ALEX, hashedVersionTwo, 0L, Arrays.asList(addCarolOp)); wavelet.appendDeltas(waveletData, DeltaSequence.of(delta)); ReadableWaveletData firstSnapshot = wavelet.getSnapshotBeforeDeltas(); assertFalse("Bob should not be a participant", firstSnapshot.getParticipants().contains(BOB)); assertEquals(hashedVersionTwo, wavelet.getVersionAfterDeltas()); ReadableWaveletData latestSnapshot = wavelet.getSnapshotAfterDeltas(); assertNotSame("A copy of the waveletdata must be made", waveletData, latestSnapshot); Collection<ParticipantId> participants = Collections.unmodifiableCollection(Arrays.asList(BOB, CAROL)); assertTrue("Bob and Carol should be participating", latestSnapshot.getParticipants().containsAll(participants)); }
public void testUpdateWaveletWithGap() throws Exception { HashedVersion hashedVersionZero = HASH_FACTORY.createVersionZero(WAVELET_NAME); WaveletData waveletData = WaveletDataUtil.createEmptyWavelet(WAVELET_NAME, ALEX, hashedVersionZero, 0L); robot.waveletUpdate(waveletData, DeltaSequence.empty()); // We are making an delta which applies to version 1, however the robot only // knows about version 0. ParticipantId bob = ParticipantId.of("bob@exmaple.com"); HashedVersion v2 = HashedVersion.unsigned(2); WaveletOperation addBob = new AddParticipant(new WaveletOperationContext(ALEX, 0L, 1, v2), bob); addBob.apply(waveletData); waveletData.setHashedVersion(v2); waveletData.setVersion(2); TransformedWaveletDelta delta = new TransformedWaveletDelta(ALEX, v2, 0L, Collections.singletonList(addBob)); // Send the delta for version 1 to the robot, it should now enqueue a new // wavelet since it is missing deltas. robot.waveletUpdate(waveletData, DeltaSequence.of(delta)); WaveletAndDeltas firstWavelet = robot.dequeueWavelet(); assertNotNull("Expected a wavelet to be dequeued", firstWavelet); assertEquals("The wavelet with version zero should be first", hashedVersionZero, firstWavelet.getVersionAfterDeltas()); WaveletAndDeltas secondWavelet = robot.dequeueWavelet(); assertNotNull("Expected a wavelet to be dequeued", secondWavelet); assertEquals("The wavelet with version two should be second", v2, secondWavelet.getVersionAfterDeltas()); assertNull("Only expected two wavelets to be dequeued", robot.dequeueWavelet()); }
public void testUpdateWaveletWithGap() throws Exception { HashedVersion hashedVersionZero = HASH_FACTORY.createVersionZero(WAVELET_NAME); WaveletData waveletData = WaveletDataUtil.createEmptyWavelet(WAVELET_NAME, ALEX, hashedVersionZero, 0L); robot.waveletUpdate(waveletData, DeltaSequence.empty()); // We are making an delta which applies to version 1, however the robot only // knows about version 0. ParticipantId bob = ParticipantId.of("bob@exmaple.com"); HashedVersion v2 = HashedVersion.unsigned(2); WaveletOperation addBob = new AddParticipant(new WaveletOperationContext(ALEX, 0L, 1, v2), bob); addBob.apply(waveletData); waveletData.setHashedVersion(v2); waveletData.setVersion(2); TransformedWaveletDelta delta = new TransformedWaveletDelta(ALEX, v2, 0L, Collections.singletonList(addBob)); // Send the delta for version 1 to the robot, it should now enqueue a new // wavelet since it is missing deltas. robot.waveletUpdate(waveletData, DeltaSequence.of(delta)); WaveletAndDeltas firstWavelet = robot.dequeueWavelet(); assertNotNull("Expected a wavelet to be dequeued", firstWavelet); assertEquals("The wavelet with version zero should be first", hashedVersionZero, firstWavelet.getVersionAfterDeltas()); WaveletAndDeltas secondWavelet = robot.dequeueWavelet(); assertNotNull("Expected a wavelet to be dequeued", secondWavelet); assertEquals("The wavelet with version two should be second", v2, secondWavelet.getVersionAfterDeltas()); assertNull("Only expected two wavelets to be dequeued", robot.dequeueWavelet()); }