@Override protected void createSegment(String segmentName, Storage storage) { storage.create(segmentName, new SegmentRollingPolicy(getSegmentRollingSize()), null).join(); }
@Test public void testWriteAfterHeaderMerge() throws Exception { final String segmentName = "Segment"; final int writeLength = 21; @Cleanup val s = createStorage(); s.initialize(1); // Create Target Segment with infinite rolling. Do not write anything to it yet. val writeHandle = s.create(segmentName, SegmentRollingPolicy.NO_ROLLING, TIMEOUT) .thenCompose(v -> s.openWrite(segmentName)).join(); final Random rnd = new Random(0); byte[] writeBuffer = new byte[writeLength]; val writeStream = new ByteArrayOutputStream(); // Create a source segment, write a little bit to it, then seal & merge it. String sourceSegment = segmentName + "_Source"; val sourceHandle = s.create(sourceSegment, TIMEOUT).thenCompose(v -> s.openWrite(sourceSegment)).join(); rnd.nextBytes(writeBuffer); s.write(sourceHandle, 0, new ByteArrayInputStream(writeBuffer), writeBuffer.length, TIMEOUT).join(); s.seal(sourceHandle, TIMEOUT).join(); s.concat(writeHandle, writeStream.size(), sourceSegment, TIMEOUT).join(); writeStream.write(writeBuffer); // Write directly to the target segment. rnd.nextBytes(writeBuffer); s.write(writeHandle, writeStream.size(), new ByteArrayInputStream(writeBuffer), writeBuffer.length, TIMEOUT).join(); writeStream.write(writeBuffer); // Get a read handle, which will also fetch the number of chunks for us. val readHandle = (RollingSegmentHandle) s.openRead(segmentName).join(); Assert.assertEquals("Unexpected number of chunks created.", 1, readHandle.chunks().size()); }
protected Storage wrap(SyncStorage storage) { return new AsyncStorageWrapper(new RollingStorage(storage, new SegmentRollingPolicy(DEFAULT_ROLLING_SIZE)), executorService()); }
val s = createStorage(); s.initialize(1);