@Override public boolean put(WaveletDeltaRecord delta) { return receiver.put(delta.getAppliedDelta()); } });
@Override public ByteStringMessage<ProtocolAppliedWaveletDelta> getAppliedDelta(long version) { WaveletDeltaRecord delta = getDelta(version); return (delta != null) ? delta.getAppliedDelta() : null; }
/** Picks out the byte strings of the applied deltas from a list of delta records. */ private static ImmutableList<ByteString> serializedAppliedDeltasOf( Iterable<WaveletDeltaRecord> deltaRecords) { ImmutableList.Builder<ByteString> serializedAppliedDeltas = ImmutableList.builder(); for (WaveletDeltaRecord deltaRecord : deltaRecords) { serializedAppliedDeltas.add(deltaRecord.getAppliedDelta().getByteString()); } return serializedAppliedDeltas.build(); }
@Override public ByteStringMessage<ProtocolAppliedWaveletDelta> getAppliedDelta(long version) throws IOException { WaveletDeltaRecord delta = getDelta(version); return (delta != null) ? delta.getAppliedDelta() : null; }
@Override public ByteStringMessage<ProtocolAppliedWaveletDelta> getAppliedDeltaByEndVersion( final HashedVersion endVersion) { Preconditions.checkArgument(endVersion.getVersion() > 0, "end version %s is not positive", endVersion); Entry<HashedVersion, WaveletDeltaRecord> appliedEntry = cachedDeltas.lowerEntry(endVersion); final ByteStringMessage<ProtocolAppliedWaveletDelta> cachedDelta = appliedEntry != null ? appliedEntry.getValue().getAppliedDelta() : null; WaveletDeltaRecord deltaRecord = getDeltaRecordByEndVersion(endVersion); ByteStringMessage<ProtocolAppliedWaveletDelta> appliedDelta; if (deltaRecord == null && isDeltaBoundary(endVersion)) { appliedDelta = cachedDelta; } else { appliedDelta = deltaRecord != null ? deltaRecord.getAppliedDelta() : null; } return appliedDelta; }
@Override public ByteStringMessage<ProtocolAppliedWaveletDelta> getAppliedDelta( HashedVersion beginVersion) { WaveletDeltaRecord delta = cachedDeltas.get(beginVersion); if (delta != null) { return delta.getAppliedDelta(); } else { WaveletDeltaRecord record = null; try { record = lookup(beginVersion.getVersion()); } catch (IOException e) { throw new RuntimeIOException(new IOException(format("Begin version : %s", beginVersion.toString()), e)); } return record != null ? record.getAppliedDelta() : null; } }
/** * Read a delta to the file. Does not move the file pointer before writing. Returns number of * bytes written. */ private long writeDelta(WaveletDeltaRecord delta) throws IOException { // We'll write zeros in place of the header and come back & write it at the end. long headerPointer = file.getFilePointer(); file.write(new byte[DeltaHeader.HEADER_LENGTH]); int appliedLength = writeAppliedDelta(delta.getAppliedDelta()); int transformedLength = writeTransformedWaveletDelta(delta.getTransformedDelta()); long endPointer = file.getFilePointer(); file.seek(headerPointer); writeDeltaHeader(new DeltaHeader(DELTA_PROTOCOL_VERSION, appliedLength, transformedLength)); file.seek(endPointer); return endPointer - headerPointer; }
public static DBObject serialize(WaveletDeltaRecord waveletDelta, String waveId, String waveletId) { BasicDBObject mongoWaveletDelta = new BasicDBObject(); mongoWaveletDelta.append(FIELD_WAVE_ID, waveId); mongoWaveletDelta.append(FIELD_WAVELET_ID, waveletId); mongoWaveletDelta.append(FIELD_APPLIEDATVERSION, serialize(waveletDelta.getAppliedAtVersion())); mongoWaveletDelta.append(FIELD_APPLIED, waveletDelta.getAppliedDelta().getByteArray()); mongoWaveletDelta.append(FIELD_TRANSFORMED, serialize(waveletDelta.getTransformedDelta())); return mongoWaveletDelta; }
Lists.newArrayListWithExpectedSize(interruptIndex+1); for (int i=0; i <= interruptIndex; i++) { expected.add(deltas[i].getAppliedDelta());
Lists.newArrayListWithExpectedSize(interruptIndex+1); for (int i=0; i <= interruptIndex; i++) { expected.add(deltas[i].getAppliedDelta());
/** * Checks that a request for the deltas spanning a contiguous sequence of * delta facets produces correct results. */ private void checkHistoryForDeltas(WaveletDeltaRecord... deltas) { HashedVersion beginVersion = deltas[0].getAppliedAtVersion(); HashedVersion endVersion = deltas[deltas.length - 1].getTransformedDelta().getResultingVersion(); { List<TransformedWaveletDelta> expected = Lists.newArrayListWithExpectedSize(deltas.length); for (WaveletDeltaRecord d : deltas) { expected.add(d.getTransformedDelta()); } ListReceiver<TransformedWaveletDelta> transformedDeltasReceiver = new ListReceiver<TransformedWaveletDelta>(); target.getTransformedDeltaHistory(beginVersion, endVersion, transformedDeltasReceiver); assertTrue(Iterables.elementsEqual(expected, transformedDeltasReceiver)); } { List<ByteStringMessage<ProtocolAppliedWaveletDelta>> expected = Lists.newArrayListWithExpectedSize(deltas.length); for (WaveletDeltaRecord d : deltas) { expected.add(d.getAppliedDelta()); } ListReceiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>> appliedDeltasReceiver = new ListReceiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>>(); target.getAppliedDeltaHistory(beginVersion, endVersion, appliedDeltasReceiver); assertTrue(Iterables.elementsEqual(expected, appliedDeltasReceiver)); } }
/** * Checks that a request for the deltas spanning a contiguous sequence of * delta facets produces correct results. */ private void checkHistoryForDeltas(WaveletDeltaRecord... deltas) { HashedVersion beginVersion = deltas[0].getAppliedAtVersion(); HashedVersion endVersion = deltas[deltas.length - 1].getTransformedDelta().getResultingVersion(); { List<TransformedWaveletDelta> expected = Lists.newArrayListWithExpectedSize(deltas.length); for (WaveletDeltaRecord d : deltas) { expected.add(d.getTransformedDelta()); } ListReceiver<TransformedWaveletDelta> transformedDeltasReceiver = new ListReceiver<TransformedWaveletDelta>(); target.getTransformedDeltaHistory(beginVersion, endVersion, transformedDeltasReceiver); assertTrue(Iterables.elementsEqual(expected, transformedDeltasReceiver)); } { List<ByteStringMessage<ProtocolAppliedWaveletDelta>> expected = Lists.newArrayListWithExpectedSize(deltas.length); for (WaveletDeltaRecord d : deltas) { expected.add(d.getAppliedDelta()); } ListReceiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>> appliedDeltasReceiver = new ListReceiver<ByteStringMessage<Proto.ProtocolAppliedWaveletDelta>>(); target.getAppliedDeltaHistory(beginVersion, endVersion, appliedDeltasReceiver); assertTrue(Iterables.elementsEqual(expected, appliedDeltasReceiver)); } }
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))); }
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))); }
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 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()))); }
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()))); }
public void testWriteToNewWavelet() throws Exception { Pair<DeltaStore,WaveletDeltaRecord> pair = newDeltaStoreWithRecord(WAVE1_WAVELET1); DeltaStore store = pair.first; WaveletDeltaRecord record = pair.second; DeltasAccess wavelet = store.open(WAVE1_WAVELET1); assertFalse(wavelet.isEmpty()); assertEquals(WAVE1_WAVELET1, wavelet.getWaveletName()); assertEquals(record.getResultingVersion(), wavelet.getEndVersion()); assertEquals(record, wavelet.getDelta(0)); assertEquals(record, wavelet.getDeltaByEndVersion(record.getResultingVersion().getVersion())); assertEquals(record.getAppliedAtVersion(), wavelet.getAppliedAtVersion(0)); assertEquals(record.getAppliedDelta(), wavelet.getAppliedDelta(0)); assertEquals(record.getTransformedDelta(), wavelet.getTransformedDelta(0)); wavelet.close(); }
public void testWriteToNewWavelet() throws Exception { Pair<DeltaStore,WaveletDeltaRecord> pair = newDeltaStoreWithRecord(WAVE1_WAVELET1); DeltaStore store = pair.first; WaveletDeltaRecord record = pair.second; DeltasAccess wavelet = store.open(WAVE1_WAVELET1); assertFalse(wavelet.isEmpty()); assertEquals(WAVE1_WAVELET1, wavelet.getWaveletName()); assertEquals(record.getResultingVersion(), wavelet.getEndVersion()); assertEquals(record, wavelet.getDelta(0)); assertEquals(record, wavelet.getDeltaByEndVersion(record.getResultingVersion().getVersion())); assertEquals(record.getAppliedAtVersion(), wavelet.getAppliedAtVersion(0)); assertEquals(record.getAppliedDelta(), wavelet.getAppliedDelta(0)); assertEquals(record.getTransformedDelta(), wavelet.getTransformedDelta(0)); wavelet.close(); }