public SegmentBuffer selectSegmentBuffer(final int pos) { final int wrotePosition = getWrotePosition(); if (pos < wrotePosition && pos >= 0) { final ByteBuffer buffer = mappedByteBuffer.slice(); buffer.position(pos); final ByteBuffer bufferNew = buffer.slice(); final int size = wrotePosition - pos; bufferNew.limit(size); return new SegmentBuffer(getBaseOffset() + pos, bufferNew, size, this); } return null; }
public SegmentBuffer selectSegmentBuffer(final int pos, final int size) { final int wrotePosition = getWrotePosition(); if ((pos + size) > wrotePosition) { return null; } final ByteBuffer buffer = mappedByteBuffer.slice(); buffer.position(pos); final ByteBuffer bufferNew = buffer.slice(); bufferNew.limit(size); return new SegmentBuffer(getBaseOffset() + pos, bufferNew, size, this); }
public long getMaxOffset() { final LogSegment segment = latestSegment(); if (segment == null) { return 0; } return segment.getBaseOffset() + segment.getWrotePosition(); }
private void fillPreBlank(final LogSegment segment, final long untilWhere) { final ConsumerLogMessage blankMessage = new ConsumerLogMessage(0, 0, Integer.MAX_VALUE, (short) 0); final long startOffset = segment.getBaseOffset() + segment.getWrotePosition(); for (long i = startOffset; i < untilWhere; i += CONSUMER_LOG_UNIT_BYTES) { segment.append(blankMessage, consumerLogAppender); } }
private void fillPreBlank(final LogSegment segment, final long untilWhere) { final PullLogMessage blankMessage = new PullLogMessage(0, -1); final long startOffset = segment.getBaseOffset() + segment.getWrotePosition(); for (long i = startOffset; i < untilWhere; i += PULL_LOG_UNIT_BYTES) { segment.append(blankMessage, messageAppender); } }
if (segment != null && maxOffset != offset) { segment.setWrotePosition(relativeOffset); LOG.info("recover wrote offset to {}:{}", segment, segment.getWrotePosition());