[ https://issues.apache.org/jira/browse/KAFKA-9156?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16969794#comment-16969794 ]
shilin Lu commented on KAFKA-9156: ---------------------------------- [~guozhang] as you suggest use val AtomicReference in this case ,i think it can work.but i want to fix this bug use double check lock.this is the code, if you think it has some problem ,i will modify it. {code:java} // code placeholder {code} def get: TimeIndex = \{ if (timeIndex.isEmpty) { this synchronized { if (timeIndex.isEmpty) { timeIndex = Some(new TimeIndex(_file, baseOffset, maxIndexSize, writable)) } } } timeIndex.get } > LazyTimeIndex & LazyOffsetIndex may cause niobufferoverflow in concurrent > state > ------------------------------------------------------------------------------- > > Key: KAFKA-9156 > URL: https://issues.apache.org/jira/browse/KAFKA-9156 > Project: Kafka > Issue Type: Bug > Components: core > Affects Versions: 2.3.0 > Reporter: shilin Lu > Priority: Critical > Attachments: image-2019-11-07-17-42-13-852.png, > image-2019-11-07-17-44-05-357.png, image-2019-11-07-17-46-53-650.png > > > !image-2019-11-07-17-42-13-852.png! > this timeindex get function is not thread safe ,may cause create some > timeindex. > !image-2019-11-07-17-44-05-357.png! > When create timeindex not exactly one ,may cause mappedbytebuffer position to > end. Then write index entry to this mmap file will cause > java.nio.BufferOverflowException. > > !image-2019-11-07-17-46-53-650.png! > > > -- This message was sent by Atlassian Jira (v8.3.4#803005)