@Override public void delete(SegmentHandle handle) throws StreamSegmentNotExistsException { ensurePreconditions(); // If we are given a read-only handle, we must ensure the segment is sealed. If the segment can accept modifications // (it is not sealed), then we require a read-write handle. boolean canDelete = !handle.isReadOnly(); if (!canDelete) { synchronized (this.lock) { if (this.streamSegments.containsKey(handle.getSegmentName())) { canDelete = this.streamSegments.get(handle.getSegmentName()).isSealed(); } } } Preconditions.checkArgument(canDelete, "Cannot delete using a read-only handle, unless the segment is sealed."); deleteInternal(handle); }
@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()); }