use of org.apache.beam.runners.dataflow.util.RandomAccessData in project beam by apache.
the class IsmReaderTest method testReadKeyThatEncodesToEmptyByteArray.
@Test
public void testReadKeyThatEncodesToEmptyByteArray() throws Exception {
File tmpFile = tmpFolder.newFile();
IsmRecordCoder<Void> coder = IsmRecordCoder.of(1, 0, ImmutableList.<Coder<?>>of(VoidCoder.of()), VoidCoder.of());
IsmSink<Void> sink = new IsmSink<>(FileSystems.matchNewResource(tmpFile.getPath(), false), coder, BLOOM_FILTER_SIZE_LIMIT);
IsmRecord<Void> element = IsmRecord.of(Arrays.asList((Void) null), (Void) null);
try (SinkWriter<WindowedValue<IsmRecord<Void>>> writer = sink.writer()) {
writer.add(new ValueInEmptyWindows<>(element));
}
Cache<IsmShardKey, WeightedValue<NavigableMap<RandomAccessData, WindowedValue<IsmRecord<Void>>>>> cache = CacheBuilder.newBuilder().weigher(Weighers.fixedWeightKeys(1)).maximumWeight(10_000).build();
IsmReader<Void> reader = new IsmReaderImpl<>(FileSystems.matchSingleFileSpec(tmpFile.getAbsolutePath()).resourceId(), coder, cache);
IsmReader<Void>.IsmPrefixReaderIterator iterator = reader.iterator();
assertTrue(iterator.start());
assertEquals(coder.structuralValue(element), coder.structuralValue(iterator.getCurrent().getValue()));
}
use of org.apache.beam.runners.dataflow.util.RandomAccessData in project beam by apache.
the class IsmReaderTest method testReadMissingKeysBypassingBloomFilter.
@Test
public void testReadMissingKeysBypassingBloomFilter() throws Exception {
File tmpFile = tmpFolder.newFile();
List<IsmRecord<byte[]>> data = new ArrayList<>();
data.add(IsmRecord.<byte[]>of(ImmutableList.of(EMPTY, new byte[] { 0x04 }), EMPTY));
data.add(IsmRecord.<byte[]>of(ImmutableList.of(EMPTY, new byte[] { 0x08 }), EMPTY));
writeElementsToFile(data, tmpFile);
IsmReader<byte[]> reader = new IsmReaderImpl<byte[]>(FileSystems.matchSingleFileSpec(tmpFile.getAbsolutePath()).resourceId(), CODER, cache) {
// We use this override to get around the Bloom filter saying that the key doesn't exist.
@Override
boolean bloomFilterMightContain(RandomAccessData keyBytes) {
return true;
}
};
// Check that we got false with a key before all keys contained in the file.
assertFalse(reader.overKeyComponents(ImmutableList.of(EMPTY, new byte[] { 0x02 })).start());
// Check that we got false with a key between two other keys contained in the file.
assertFalse(reader.overKeyComponents(ImmutableList.of(EMPTY, new byte[] { 0x06 })).start());
// Check that we got false with a key that is after all keys contained in the file.
assertFalse(reader.overKeyComponents(ImmutableList.of(EMPTY, new byte[] { 0x10 })).start());
}
Aggregations