apache / apache/rocketmq-dashboard

DLQ group list waits for serial topic-stats RPCs and fires a request per keystroke

Open
#3,167 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
1.4k
Forks
683
Avg merge
2d 14h
Merged PRs (30d)
58

Description

## Problem

The DLQ page fetches topic statistics for every group on the current page serially.

`RocketMQDLQProvider.listDLQGroups(...)` slices the current page, then for each `%DLQ%` topic calls:

```java
adminExt.examineTopicStats(dlqTopic)
```

one after another. With the default page size of 20, a page can therefore wait for 20 serial admin RPCs before returning. If brokers are slow, the page latency is roughly the sum of all stats calls.

The frontend also updates the DLQ search input state on every keystroke. That state is in the effect dependency list, so every character starts a new full group-list request and immediately increments the request generation. On a large cluster, typing a short group name can trigger several expensive backend scans in quick succession.

The request-generation guard prevents stale responses from overwriting newer results, but it does not prevent the redundant requests from being sent.

## Expected behavior

- Topic-stats calls for one DLQ page should run with bounded parallelism, rather than one-by-one.
- Page order should remain deterministic and unchanged.
- A single topic-stats failure should only mark that row `UNAVAILABLE`; other rows should still be returned.
- The DLQ search input should debounce requests while the user is typing.
- Debouncing must not delay the initial page load or a direct search submission.

## Why this matters

Operators open the DLQ page during incident triage. Waiting for serial stats RPCs or firing a scan per keystroke makes the page unnecessarily slow and increases load on brokers at exactly the time they may already be unhealthy.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start at RocketMQDLQProvider.listDLQGroups(...) and trace the DLQ page effect that depends on the search input. Read how the current page slice, topic-stats results, request-generation guard, and search submission are handled. Done means bounded stats concurrency with stable ordering and per-row UNAVAILABLE failures, plus debounced typing without delaying initial load or direct submission.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, frontend
Issue type
Refactor
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.