[
https://issues.apache.org/jira/browse/ROCKETMQ-332?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16293677#comment-16293677
]
yukon commented on ROCKETMQ-332:
--------------------------------
Hi, could you please provide the related broker.log and store.log to help us
locate this concurrent issue?
> MappedFileQueue is not thread safe, which will cause message loss.
> ------------------------------------------------------------------
>
> Key: ROCKETMQ-332
> URL: https://issues.apache.org/jira/browse/ROCKETMQ-332
> Project: Apache RocketMQ
> Issue Type: Bug
> Components: rocketmq-store
> Affects Versions: 4.0.0-incubating, 4.1.0-incubating
> Reporter: Jas0n918
> Assignee: yukon
>
> In RocketMQ V3.5.8, there is a readWriteLock in
> com.alibaba.rocketmq.store.MapedFileQueue, which guarantee thread safety. But
> in the new org.apache.rocketmq.store.MappedFileQueue, there is not any
> concurrent control mechanism.
> when consumer is fetching message(no large lag), broker calls
> org.apache.rocketmq.broker.processor.PullMessageProcessor#processRequest ==>
> org.apache.rocketmq.store.DefaultMessageStore#getMessage ==>
> org.apache.rocketmq.store.ConsumeQueue#getIndexBuffer ==>
> org.apache.rocketmq.store.MappedFileQueue#findMappedFileByOffset
> but findMappedFileByOffset is not thread safe, as
> org.apache.rocketmq.store.MappedFileQueue#deleteExpiredFile maybe running
> concurrently( the size of mappedFiles maybe change) , which will results in
> ConsumeQueue#getIndexBuffer returns null, causing
> _nextBeginOffset = nextOffsetCorrection(offset,
> consumeQueue.rollNextFile(offset));_+
> which will skip the whole consumeQueue file, any messages left in this
> ConsumeQueue will not be consumed by client.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)