[ https://issues.apache.org/jira/browse/KAFKA-9156?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
shilin Lu updated KAFKA-9156: ----------------------------- Comment: was deleted (was: [~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 because in this case i think it is same as new a singleton instance.if you think it has some problem ,i will modify it. {code:java} // code placeholder def get: TimeIndex = { if (timeIndex.isEmpty) { this synchronized { if (timeIndex.isEmpty) { timeIndex = Some(new TimeIndex(_file, baseOffset, maxIndexSize, writable)) } } } timeIndex.get }{code}) > 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)