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)

Reply via email to