wqyenjoy opened a new pull request, #9523:
URL: https://github.com/apache/rocketmq/pull/9523
Background
Transactional message checks in TransactionalMessageServiceImpl.check()
occasionally threw uncaught exceptions.
When that happened, the broker did not advance the consume offsets of the
half (RMQ_SYS_TRANS_HALF_TOPIC) and op (RMQ_SYS_TRANS_OP_HALF_TOPIC) queues.
As a result, the same half message was pulled and re-checked indefinitely,
causing:
High broker CPU usage
Repeated WARN logs for the identical message
Potential message-check backlog growth (visible in monitoring)
The behaviour was reported in Issue #9500 as an “infinite loop while
checking transactional messages”.
- Add try-catch-finally structure in check() method to ensure offset
advancement even when exceptions occur
- Move offset update logic to finally block to prevent infinite loop
- Add comprehensive unit tests for exception, normal, and empty queue
scenarios
- Fix Issue #9500: transaction message check service offset not advancing on
exception
This prevents the infinite loop where the same half message gets checked
repeatedly due to offset not advancing when exceptions occur during transaction
check.
Checklist
Fixes Issue #9500
Unit tests added/updated
No breaking API changes
Logged enough context for future debugging
Please review, thanks!
<!-- Please make sure the target branch is right. In most case, the target
branch should be `develop`. -->
### Which Issue(s) This PR Fixes
<!-- Please ensure that the related issue has already been created, and
[link this pull request to that issue using
keywords](<https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword>)
to ensure automatic closure. -->
Fixes #issue_id
### Brief Description
<!-- Write a brief description for your pull request to help the maintainer
understand the reasons behind your changes. -->
### How Did You Test This Change?
<!-- In order to ensure the code quality of Apache RocketMQ, we expect every
pull request to have undergone thorough testing. -->
--
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]