apache / apache/rocketmq

[Bug] Unexpected decrement of lmq counter

Open Beginner friendly
#10,453 2 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.