@Override
public void write(SegmentHandle handle, long offset, InputStream data, int length) throws StreamSegmentException {
val h = asWritableHandle(handle);
ensureNotDeleted(h);
ensureNotSealed(h);
ensureOffset(h, offset);
long traceId = LoggerHelpers.traceEnter(log, "write", handle, offset, length);
int bytesWritten = 0;
while (bytesWritten < length) {
if (h.getActiveChunkHandle() == null || h.lastChunk().getLength() >= h.getRollingPolicy().getMaxLength()) {
rollover(h);
}
SegmentChunk last = h.lastChunk();
int writeLength = (int) Math.min(length - bytesWritten, h.getRollingPolicy().getMaxLength() - last.getLength());
assert writeLength > 0 : "non-positive write length";
long chunkOffset = offset + bytesWritten - last.getStartOffset();
this.baseStorage.write(h.getActiveChunkHandle(), chunkOffset, data, writeLength);
last.increaseLength(writeLength);
bytesWritten += writeLength;
}
LoggerHelpers.traceLeave(log, "write", traceId, handle, offset, bytesWritten);
}