public boolean appendData(final long startOffset, final ByteBuffer data) { LogSegment segment = logManager.locateSegment(startOffset); if (segment == null) { segment = logManager.allocOrResetSegments(startOffset); fillPreBlank(segment, startOffset); } return segment.appendData(data); }
public boolean appendData(final long startOffset, final ByteBuffer data) { LogSegment segment = logManager.locateSegment(startOffset); if (segment == null) { segment = logManager.allocOrResetSegments(startOffset); fillPreBlank(segment, startOffset); } return segment.appendData(data); }
boolean appendData(long startOffset, ByteBuffer buffer) { LogSegment segment = logManager.locateSegment(startOffset); if (null == segment) { segment = logManager.allocOrResetSegments(startOffset); fillPreBlank(segment, startOffset); } return segment.appendData(buffer); }
public boolean putMessageLogOffset(final long sequence, final long offset, final int size, final short headerSize) { putMessageLogOffsetLock.lock(); try { if (sequence < nextSequence()) { return true; } final long expectedOffset = sequence * CONSUMER_LOG_UNIT_BYTES; LogSegment segment = logManager.locateSegment(expectedOffset); if (segment == null) { segment = logManager.allocOrResetSegments(expectedOffset); } fillPreBlank(segment, expectedOffset); final AppendMessageResult result = segment.append(new ConsumerLogMessage(sequence, offset, size, headerSize), consumerLogAppender); switch (result.getStatus()) { case SUCCESS: break; case END_OF_FILE: logManager.allocNextSegment(); return putMessageLogOffset(sequence, offset, size, headerSize); default: return false; } } finally { putMessageLogOffsetLock.unlock(); } return true; }
private PutMessageResult directPutMessage(final PullLogMessage message) { final long sequence = message.getSequence(); if (sequence < getMaxOffset()) { return new PutMessageResult(PutMessageStatus.ALREADY_WRITTEN, null); } final long expectPhysicalOffset = sequence * PULL_LOG_UNIT_BYTES; LogSegment segment = logManager.locateSegment(expectPhysicalOffset); if (segment == null) { segment = logManager.allocOrResetSegments(expectPhysicalOffset); } fillPreBlank(segment, expectPhysicalOffset); final AppendMessageResult<MessageSequence> result = segment.append(message, messageAppender); switch (result.getStatus()) { case SUCCESS: break; case END_OF_FILE: logManager.allocNextSegment(); return directPutMessage(message); default: return new PutMessageResult(PutMessageStatus.UNKNOWN_ERROR, result); } return new PutMessageResult(PutMessageStatus.SUCCESS, result); }