Jeff Kim created KAFKA-14407:
--------------------------------
Summary: Able to access offset index memory map even after memory
map flag is turned off
Key: KAFKA-14407
URL: https://issues.apache.org/jira/browse/KAFKA-14407
Project: Kafka
Issue Type: Bug
Reporter: Jeff Kim
Original investigation:
[https://github.com/apache/kafka/pull/12783#issuecomment-1315804689]
we have mechanisms in place to check before accessing a memory map. an example:
private def fetchHighWatermarkMetadata: LogOffsetMetadata = {
localLog.checkIfMemoryMappedBufferClosed()
...
}
which makes it seem okay to read from the offset index. however, we should not
allow any disk io if an offset index is unmapped. moreover, if a local log is
closed, we should set `isMemoryMappedBufferClosed` to true in
`LocalLog.close()`:
private[log] def close(): Unit = {
maybeHandleIOException(s"Error while renaming dir for $topicPartition in
dir ${dir.getParent}") {
checkIfMemoryMappedBufferClosed()
segments.close()
// isMemoryMappedBufferClosed = true?
}
}
note that besides altering replica log dir, UnifiedLog.close() is only called
during shutdown.
i'm not sure if this is a bug but accessing the high watermark (by reading from
the actual segment via offset index) will result in a NPE because
isMemoryMappedBufferClosed is false.
java.lang.NullPointerException
at kafka.log.OffsetIndex.$anonfun$lookup$1(OffsetIndex.scala:90)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)