@Override public SegmentHandle openRead(String streamSegmentName) throws StreamSegmentNotExistsException { ensurePreconditions(); return getStreamSegmentData(streamSegmentName).openRead(); }
@Override public SegmentHandle openWrite(String streamSegmentName) throws StreamSegmentNotExistsException { ensurePreconditions(); return getStreamSegmentData(streamSegmentName).openWrite(); }
@Override public SegmentProperties getStreamSegmentInfo(String streamSegmentName) throws StreamSegmentNotExistsException { ensurePreconditions(); return getStreamSegmentData(streamSegmentName).getInfo(); }
@Override public void concat(SegmentHandle targetHandle, long offset, String sourceSegment) throws StreamSegmentException { ensurePreconditions(); Preconditions.checkArgument(!targetHandle.isReadOnly(), "Cannot concat using a read-only handle."); AtomicLong newLength = new AtomicLong(); StreamSegmentData sourceData = getStreamSegmentData(sourceSegment); StreamSegmentData targetData = getStreamSegmentData(targetHandle.getSegmentName()); targetData.concat(sourceData, offset); deleteInternal(new InMemorySegmentHandle(sourceSegment, false)); newLength.set(targetData.getInfo().getLength()); }
/** * Appends the given data to the end of the StreamSegment. * Note: since this is a custom operation exposed only on InMemoryStorage, there is no need to make it return a Future. * * @param handle A read-write handle for the segment to append to. * @param data An InputStream representing the data to append. * @param length The length of the data to append. */ @SneakyThrows(StreamSegmentException.class) public void append(SegmentHandle handle, InputStream data, int length) { ensurePreconditions(); Preconditions.checkArgument(!handle.isReadOnly(), "Cannot append using a read-only handle."); getStreamSegmentData(handle.getSegmentName()).append(data, length); }
@Override public void unseal(SegmentHandle handle) throws StreamSegmentException { ensurePreconditions(); getStreamSegmentData(handle.getSegmentName()).markUnsealed(); }
@Override public void write(SegmentHandle handle, long offset, InputStream data, int length) throws BadOffsetException, StreamSegmentNotExistsException, StreamSegmentSealedException { ensurePreconditions(); Preconditions.checkArgument(!handle.isReadOnly(), "Cannot write using a read-only handle."); getStreamSegmentData(handle.getSegmentName()).write(offset, data, length); }
@Override public void seal(SegmentHandle handle) throws StreamSegmentNotExistsException { ensurePreconditions(); Preconditions.checkArgument(!handle.isReadOnly(), "Cannot seal using a read-only handle."); getStreamSegmentData(handle.getSegmentName()).markSealed(); }
@Override public int read(SegmentHandle handle, long offset, byte[] buffer, int bufferOffset, int length) throws StreamSegmentNotExistsException { ensurePreconditions(); return getStreamSegmentData(handle.getSegmentName()).read(offset, buffer, bufferOffset, length); }