zmuxuny opened a new issue, #6188: URL: https://github.com/apache/rocketmq-dashboard/issues/6188
### Before Creating the Bug Report - [x] I have searched the [open issues](https://github.com/apache/rocketmq-dashboard/issues) of this repository and believe that this is not a duplicate. - [x] This is a defect in RocketMQ Studio, not a usage question and not a defect in another Apache RocketMQ repository. - [x] I can reproduce this on the current `master` branch, or I have stated the exact version I am running below. ### Studio Version rocketmq-studio@5e4c39b0, verified 2026-10-10. ### Runtime Environment Deterministic integration-style unit tests using real Apache cluster/business collectors, processor/evaluation and suppression services. External provider and persistence boundaries are controlled. No real broker, notification recipient or account changed. ### Connected RocketMQ Cluster Synthetic registered Apache instance exposing physical clusters A and B through one NameServer. This is correlation within one instance, not cross-account exposure or ACL isolation. ### Build Toolchain _No response_ ### Describe the Bug Native collectors retain physical cluster identity in MetricSample.clusterId, but NativeAlertEvaluationService builds system alerts from sample.labels() without carrying that identity into event correlation labels. AlertCorrelationScope rejects conflicting clusters only when both events actually carry them. As a result, an active cluster-A broker incident can suppress an unrelated cluster-B consumer backlog notification. Compatibility matters when adding cluster labels: a stored legacy FIRING event without cluster labels and a newer RESOLVED event with known cluster may share one fingerprint. Selecting by scope before selecting the latest state can discard the resolution and leave the old incident incorrectly active. ### Steps to Reproduce Drive real Apache cluster and business collectors, then production processor/evaluation and notification suppression. Events are produced by the real projection, not hand-built incomplete event fixtures. 1. Registered instance exposes clusters A and B. 2. A broker in A is unavailable; a consumer group in B exceeds backlog threshold. 3. The A incident incorrectly suppresses B notification. 4. Check authoritative sample.clusterId survives event projection without changing fingerprint. 5. Exercise legacy unlabeled FIRING followed by labeled RESOLVED with the same fingerprint; newest state must be selected before scope filtering. ### What Did You Expect to See? Known physical-cluster identity survives event projection; A incidents cannot suppress B notifications. Same-cluster correlation and existing unknown-cluster fallback remain. Preserve existing fingerprints and incident identity. Resolve the latest state for a fingerprint before applying scope so adding labels does not resurrect an older active incident. ### What Did You See Instead? Final unchanged-production regression run: 16 tests, exactly 3 failures, 13 passing controls, 0 errors, 0 skipped. Failures cover real collector-A broker suppressing collector-B backlog, authoritative sample.clusterId absent from event labels, and scope filtering hiding a newer labeled RESOLVED event while retaining the legacy unlabeled FIRING event. These are controlled fixtures, not an observed production incident. ### Additional Context ### Duplicate check - #5833 / #3245 / #3414 cover AlertCorrelationScope with already-populated labels. - #4710 concerns padded instance IDs. - #4873 concerns reminder-only related events; #2827 candidate pagination. - #2961 concerns legacy events without fingerprints rather than latest-state-before-scope selection. No matching active or historical implementation was found for this collector/evaluation projection and compatibility path. ### Acceptance criteria - Preserve authoritative metric cluster identity in event correlation labels. - Keep fingerprints stable. - Prevent cross-cluster suppression within a multi-cluster instance. - Preserve same-cluster and unknown-cluster fallback behavior. - Newer resolved state supersedes legacy active state before scope filtering. - Regression coverage uses real collector-to-evaluation-to-suppression path. AI assistance was used for source tracing and deterministic regression authoring. ### Are You Willing to Submit a Pull Request? - [x] Yes, I am willing to submit a pull request. -- 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]
