/** * Checks the update targets the next expected version. */ private void checkUpdateVersion(WaveletName waveletName, DeltaSequence deltas, WaveletChannelState state) { if (state.lastVersion != null) { long expectedVersion = state.lastVersion.getVersion(); long targetVersion = deltas.getStartVersion(); Preconditions.checkState(targetVersion == expectedVersion, "Subscription expected delta for %s targeting %s, was %s", waveletName, expectedVersion, targetVersion); } }
@Override public String toString() { if (isEmpty()) { return "[DeltaSequence empty]"; } return "[DeltaSequence " + deltas.size() + " deltas, v " + getStartVersion() + " -> " + getEndVersion() + ": " + deltas + "]"; } }
/** * 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(); } }
/** Creates a delta sequence by concatenating contiguous sequences. */ public static DeltaSequence join(DeltaSequence first, DeltaSequence... rest) { ImmutableList.Builder<TransformedWaveletDelta> builder = ImmutableList.builder(); builder.addAll(first); long expectedBeginVersion = first.getEndVersion().getVersion(); for (DeltaSequence s : rest) { Preconditions.checkArgument(s.getStartVersion() == expectedBeginVersion, "Sequences are not contiguous, expected start version %s for sequence %s", expectedBeginVersion, s); builder.addAll(s); expectedBeginVersion = s.getEndVersion().getVersion(); } return new DeltaSequence(builder.build(), false); }
/** * Synchronizes the wavelet version and ensures that the deltas are * contiguous. * * @param waveletName the wavelet name. * @param newDeltas the new deltas. */ public void syncWaveletVersion(WaveletName waveletName, DeltaSequence newDeltas) { HashedVersion expectedVersion; PerWavelet waveletInfo = getWavelet(waveletName); synchronized (waveletInfo) { expectedVersion = waveletInfo.getCurrentVersion(); Preconditions.checkState(expectedVersion.getVersion() == newDeltas.getStartVersion(), "Expected deltas starting at version %s, got %s", expectedVersion, newDeltas.getStartVersion()); waveletInfo.setCurrentVersion(newDeltas.getEndVersion()); } }
@Override public boolean matches(Object sequence) { if (sequence != null) { DeltaSequence s = (DeltaSequence) sequence; return (s.size() > 0) && (s.getStartVersion() == version); } return false; } });
public boolean matches(List<TransformedWaveletDelta> sequence) { if (sequence != null) { DeltaSequence s = (DeltaSequence) sequence; return (s.size() > 0) && (s.getStartVersion() == version); } return false; } });
/** * Tests DeltaSequence.subList() on both empty and nonempty delta sequences. */ public void testSubList() { DeltaSequence empty = DeltaSequence.empty(); assertEquals(empty, empty.subList(0, 0)); DeltaSequence deltaseq = DeltaSequence.of(twoDeltas); assertEquals(twoDeltas, deltaseq.subList(0, twoDeltas.size())); assertEquals(empty, deltaseq.subList(0, 0)); // Construct a sublist with just the first delta. DeltaSequence subDeltas = deltaseq.subList(0, 1); assertEquals(START_VERSION + 5, subDeltas.getEndVersion().getVersion()); assertEquals(deltaseq.getStartVersion(), subDeltas.getStartVersion()); assertEquals(ImmutableList.of(delta1), subDeltas); }
/** * Tests DeltaSequence.subList() on both empty and nonempty delta sequences. */ public void testSubList() { DeltaSequence empty = DeltaSequence.empty(); assertEquals(empty, empty.subList(0, 0)); DeltaSequence deltaseq = DeltaSequence.of(twoDeltas); assertEquals(twoDeltas, deltaseq.subList(0, twoDeltas.size())); assertEquals(empty, deltaseq.subList(0, 0)); // Construct a sublist with just the first delta. DeltaSequence subDeltas = deltaseq.subList(0, 1); assertEquals(START_VERSION + 5, subDeltas.getEndVersion().getVersion()); assertEquals(deltaseq.getStartVersion(), subDeltas.getStartVersion()); assertEquals(ImmutableList.of(delta1), subDeltas); }
public void testJoinValidSequencesAllowed() { DeltaSequence s1 = DeltaSequence.of(delta1); DeltaSequence s2 = DeltaSequence.of(delta2, delta3); DeltaSequence joined = DeltaSequence.join(s1, s2); assertEquals(delta1.getAppliedAtVersion(), joined.getStartVersion()); assertEquals(delta3.getResultingVersion(), joined.getEndVersion()); assertEquals(ImmutableList.of(delta1, delta2, delta3), joined); }
public void testJoinValidSequencesAllowed() { DeltaSequence s1 = DeltaSequence.of(delta1); DeltaSequence s2 = DeltaSequence.of(delta2, delta3); DeltaSequence joined = DeltaSequence.join(s1, s2); assertEquals(delta1.getAppliedAtVersion(), joined.getStartVersion()); assertEquals(delta3.getResultingVersion(), joined.getEndVersion()); assertEquals(ImmutableList.of(delta1, delta2, delta3), joined); }
public void testValidSequenceAllowed() { DeltaSequence deltaseq = DeltaSequence.of(twoDeltas); assertEquals(2, deltaseq.size()); assertEquals(START_VERSION, deltaseq.getStartVersion()); assertEquals(delta2.getResultingVersion(), deltaseq.getEndVersion()); }
public void testValidSequenceAllowed() { DeltaSequence deltaseq = DeltaSequence.of(twoDeltas); assertEquals(2, deltaseq.size()); assertEquals(START_VERSION, deltaseq.getStartVersion()); assertEquals(delta2.getResultingVersion(), deltaseq.getEndVersion()); }
public void testEmptySequence() { DeltaSequence empty = DeltaSequence.empty(); assertEquals(ImmutableList.<ProtocolWaveletDelta>of(), empty); assertTrue(empty.isEmpty()); assertEquals(0, empty.size()); try { empty.getStartVersion(); fail("Expected illegal state exception"); } catch (IllegalStateException expected) { } try { empty.getEndVersion(); fail("Expected illegal state exception"); } catch (IllegalStateException expected) { } }
public void testEmptySequence() { DeltaSequence empty = DeltaSequence.empty(); assertEquals(ImmutableList.<ProtocolWaveletDelta>of(), empty); assertTrue(empty.isEmpty()); assertEquals(0, empty.size()); try { empty.getStartVersion(); fail("Expected illegal state exception"); } catch (IllegalStateException expected) { } try { empty.getEndVersion(); fail("Expected illegal state exception"); } catch (IllegalStateException expected) { } }