message
public Message(byte[] content, byte[] key, CompressionCodec codec, int payloadOffset, int payloadSize);
public Long computeChecksum();
public boolean isValid();
public int size() {return buffer.limit();}
messageSet
int MessageSizeLength = 4;
int OffsetLength = 8;
int LogOverhead = MessageSizeLength + OffsetLength;
public static Integer entrySize(Message message) {
return LogOverhead + message.size();
}
ByteBufferMessageSet
ByteBuffer create(AtomicLong offsetCounter, CompressionCodec compressionCodec, Message... messages);
public static void writeMessage(ByteBuffer buffer, Message message, Long offset) {
buffer.putLong(offset);
buffer.putInt(message.size());
buffer.put(message.buffer);
message.buffer.rewind();
}
ByteBufferMessageSet decompress(Message message);
Integer writeTo(GatheringByteChannel channel, Long offset, Integer maxSize);
Iterator<MessageAndOffset> iterator() {return internalIterator(false);}
Iterator<MessageAndOffset> shallowIterator() {return internalIterator(true);}
ByteBufferMessageSet assignOffsets(AtomicLong offsetCounter, CompressionCodec codec)
FileMessageSet
FileMessageSet(File file, FileChannel channel, Integer start, Integer end, Boolean isSlice);
FileMessageSet read(Integer position, Integer size);
OffsetPosition searchFor(Long targetOffset, Integer startingPosition);
Integer writeTo(GatheringByteChannel destChannel, Long writePosition, Integer size);
Iterator<MessageAndOffset> iterator(final Integer maxMessageSize);
void append(ByteBufferMessageSet messages);
void flush();
Integer truncateTo(Integer targetSize);
ByteBuffer readInto(ByteBuffer buffer, Integer relativePosition)
LogSegment
LogSegment(FileMessageSet log, OffsetIndex index, Long baseOffset, Integer indexIntervalBytes, Long rollJitterMs, Time time);
Long size() { return log.sizeInBytes().longValue();}
void append(Long offset, ByteBufferMessageSet messages);
OffsetPosition translateOffset(Long offset, Integer startingFilePosition) {
OffsetPosition mapping = index.lookup(offset);
return log.searchFor(offset, Math.max(mapping.position, startingFilePosition));
}
FetchDataInfo read(Long startOffset, Optional<Long> maxOffset, Integer maxSize);
Integer recover(Integer maxMessageSize);
Integer truncateTo(Long offset);
Long nextOffset();
@threadsafe
void flush();
void delete();
void setLastModified(Long ms);
OffsetIndex
OffsetIndex(File file, Long baseOffset, Integer maxIndexSize){
MappedByteBuffer idx = randomAccessFile.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, len);
...
}
OffsetPosition readLastEntry();
OffsetPosition lookup(Long targetOffset);
Integer relativeOffset(ByteBuffer buffer, Integer n);
Integer physical(ByteBuffer buffer, Integer n);
OffsetPosition entry(Integer n);
void append(Long offset, Integer position);
boolean isFull();
void truncateTo(Long offset);
void truncateToEntries(Integer entries);
void resize(Integer newSize);
void forceUnmap(MappedByteBuffer m){
((DirectBuffer) m).cleaner().clean();
}
void flush() { Utils.inLock(lock, () -> mmap.force());}
Log
Log(File dir, LogConfig config, Long recoveryPoint, Scheduler scheduler, Time time);
LogSegment activeSegment() {
return segments.lastEntry().getValue();
}
Collection<LogSegment> logSegments() {
return segments.values();
}
Collection<LogSegment> logSegments(Long from, Long to);