BeiKeJieDeLiuLangMao opened a new issue #1434: Question about 
CommitLog::recoverAbnormally
URL: https://github.com/apache/rocketmq/issues/1434
 
 
   As i know, logic of recoverAbnormally is as follow:
   1. Find first valid CommitLog file from last one
   2. Check all message in last valid CommitLog file
   3. For these valid messages in last valid CommitLog file, rebuild 
ConsumeQueue and IndexFile
   4. Fix all kinds of pointers, and clear ConsumeQueue redundant data
   
   Now consider follow situation:
   1. A few messages been written to CommitLog file L2(last 2), and these 
message are last messages of this CommitLog file
   2. Create a new CommitLog file L1(last 1),then write a message to L1
   3. At this time, L2's last few messages and L1's first message are not been 
written to ConsumeQueue and IndexFile yet, then RocketMQ crash
   4. When RocketMQ restart, it will invoke recoverAbnormally, and only rebuild 
L1's message, L2's last few messages are lost.
   
   If my analysis is right, i think follow solution could resolve it:
   1. Find first valid CommitLog file from last one
   2. Check all message in last valid CommitLog file
   3. Fix all kinds of pointers, and clear ConsumeQueue redundant data
   4. In step3, we could get valid ConsumeQueue max physics offset, besides we 
could also get IndexFile's max physics offset from file header
   5. In the light of ConsumeQueue max physics offset and IndexFile max physics 
offset, we could rebuild lost content respectively
   
   This solution not only could resolve data lost issue what i described 
before, but also could reduce duplicate data of ConsumeQueue and IndexFile :).
   
   
   
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to