private void recoverSequence() { LogSegment logSegment = logManager.latestSegment(); if (null == logSegment) { LOGGER.warn("recover sequence happened null segment"); return; } validateSequence(logSegment); }
private long nextSegmentBaseOffset() { final LogSegment segment = latestSegment(); if (segment == null) { return 0; } else { return segment.getBaseOffset() + fileSize; } }
public long getMaxOffset() { final LogSegment segment = latestSegment(); if (segment == null) { return 0; } return segment.getBaseOffset() + segment.getWrotePosition(); }
public LogSegment allocOrResetSegments(final long expectedOffset) { final long baseOffset = computeBaseOffset(expectedOffset); if (segments.isEmpty()) { return allocSegment(baseOffset); } if (nextSegmentBaseOffset() == baseOffset && latestSegment().isFull()) { return allocSegment(baseOffset); } LOG.warn("All segments are too old, need to delete all segment now. Current base offset: {}, expect base offset: {}", latestSegment().getBaseOffset(), baseOffset); deleteAllSegments(); return allocSegment(baseOffset); }
final long maxOffset = latestSegment().getBaseOffset() + latestSegment().getFileSize(); final int relativeOffset = (int) (offset % fileSize); final LogSegment segment = locateSegment(offset);
public PutMessageResult putMessage(final RawMessage message) { final AppendMessageResult<MessageSequence> result; LogSegment segment = logManager.latestSegment(); if (segment == null) { segment = logManager.allocNextSegment(); } if (segment == null) { return new PutMessageResult(PutMessageStatus.CREATE_MAPPED_FILE_FAILED, null); } result = segment.append(message, messageAppender); switch (result.getStatus()) { case SUCCESS: break; case END_OF_FILE: LogSegment logSegment = logManager.allocNextSegment(); if (logSegment == null) { return new PutMessageResult(PutMessageStatus.CREATE_MAPPED_FILE_FAILED, null); } return putMessage(message); case MESSAGE_SIZE_EXCEEDED: return new PutMessageResult(PutMessageStatus.MESSAGE_ILLEGAL, result); default: return new PutMessageResult(PutMessageStatus.UNKNOWN_ERROR, result); } return new PutMessageResult(PutMessageStatus.SUCCESS, result); }
public synchronized PutMessageResult addAction(final Action action) { final AppendMessageResult<MessageSequence> result; LogSegment segment = logManager.latestSegment(); if (segment == null) { segment = logManager.allocNextSegment(); } if (segment == null) { return new PutMessageResult(PutMessageStatus.CREATE_MAPPED_FILE_FAILED, null); } result = segment.append(action, actionAppender); switch (result.getStatus()) { case SUCCESS: break; case END_OF_FILE: if (logManager.allocNextSegment() == null) { return new PutMessageResult(PutMessageStatus.CREATE_MAPPED_FILE_FAILED, null); } return addAction(action); case MESSAGE_SIZE_EXCEEDED: return new PutMessageResult(PutMessageStatus.MESSAGE_ILLEGAL, result); default: return new PutMessageResult(PutMessageStatus.UNKNOWN_ERROR, result); } return new PutMessageResult(PutMessageStatus.SUCCESS, result); }
@Override public AppendMessageRecordResult append(RawMessageExtend record) { AppendMessageResult<Long> result; LogSegment segment = logManager.latestSegment(); if (null == segment) { segment = logManager.allocNextSegment(); } if (null == segment) { return new AppendMessageRecordResult(PutMessageStatus.CREATE_MAPPED_FILE_FAILED, null); } result = segment.append(record, messageAppender); switch (result.getStatus()) { case MESSAGE_SIZE_EXCEEDED: return new AppendMessageRecordResult(PutMessageStatus.MESSAGE_ILLEGAL, null); case END_OF_FILE: if (null == logManager.allocNextSegment()) { return new AppendMessageRecordResult(PutMessageStatus.CREATE_MAPPED_FILE_FAILED, null); } return append(record); case SUCCESS: return new AppendMessageRecordResult(PutMessageStatus.SUCCESS, result); default: return new AppendMessageRecordResult(PutMessageStatus.UNKNOWN_ERROR, result); } }