RockteMQ-AI commented on issue #10668:
URL: https://github.com/apache/rocketmq/issues/10668#issuecomment-5102760569

   **Issue Evaluation**
   
   Category: `type/bug` | Status: **Confirmed**
   
   The reported issue has been verified against the current codebase (develop 
branch).
   
   **Root Cause:** `DefaultMessageStore.truncateDirtyFiles()` truncates 
CommitLog and consume queues but never cleans up `TimerLog` or `TimerWheel`. 
After truncation, stale TimerLog entries still reference offsets that may be 
overwritten by unrelated messages during re-replication.
   
   **Verified code path:**
   1. `truncateDirtyFiles()` (DefaultMessageStore.java:785-818) only truncates 
consume queues and CommitLog — no Timer cleanup
   2. `StoreUtil.getMessage()` (StoreUtil.java:82-98) blindly decodes whatever 
bytes are at the stale offset
   3. `convertMessage()` (TimerMessageStore.java:1266) calls 
`Integer.parseInt(null)` when `PROPERTY_REAL_QUEUE_ID` is missing → 
`NumberFormatException`
   4. `TimerDequeuePutMessageService.run()` (TimerMessageStore.java:1622-1681) 
catches the exception, and with `timerSkipUnknownError=false` (default), 
retries the same `TimerRequest` indefinitely via `holdMomentForUnknownError()` 
(50ms sleep + loop)
   
   **Impact:** Timer dequeue progress stalls completely. All subsequent 
scheduled messages and POP revive retry delivery remain blocked.
   
   **Severity:** High — single stale reference can permanently block the Timer 
slot.
   
   An automated fix proposal will be generated. Reply `/approve` to proceed 
with PR generation.
   
   ---
   *Automated evaluation by github-manager-bot*
   


-- 
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.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to