[Bug] Unexpected decrement of lmq counter
- Dominant language
- Java
- Stars
- 22.6k
- Forks
- 12k
- Avg merge
- 2d 20h
- Merged PRs (30d)
- 26
Description
### Before Creating the Bug Report
- [x] I found a bug, not just asking a question, which should be created in [GitHub Discussions](https://github.com/apache/rocketmq/discussions).
- [x] I have searched the [GitHub Issues](https://github.com/apache/rocketmq/issues) and [GitHub Discussions](https://github.com/apache/rocketmq/discussions) of this repository and believe that this is not a duplicate.
- [x] I have confirmed that this bug belongs to the current repository, not other repositories of RocketMQ.
### Runtime platform environment
.
### RocketMQ version
.
### JDK Version
.
### Describe the Bug
We previously implemented an LMQ counting mechanism and have now discovered an unexpected counter underflow issue in RocksDBConsumeQueueOffsetTable.
### Steps to Reproduce
When specific get* operation is called for a non-existent LMQ topic, a sentinel value -1L is placed into topicQueueMaxCqOffset without incrementing lmqCounter. However, if this topic is later deleted, removeHeapMaxCqOffset unconditionally decrements lmqCounter, causing the counter to underflow.
### What Did You Expect to See?
lmqCounter should not be decremented for entries that were never actually counted.
### What Did You See Instead?
.
### Additional Context
.
Contributor guide
Research direction
Search the repository for RocksDBConsumeQueueOffsetTable, lmqCounter, topicQueueMaxCqOffset, and removeHeapMaxCqOffset to trace the non-existent LMQ path. Add or update a regression test covering creation, deletion, and counter behavior for an LMQ represented by -1L; done means deleting it no longer underflows lmqCounter.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- databases, distributed-systems
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 65/100