镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

[Bug] AdminSendMessage keeps only the first system property key, dropping the rest #11468

Open

Description

@Felix-Gong

Search before asking

I checked open and closed issues and PRs for AdminSendMessage, system_properties.keys, buildAdminMessage and setKeys. The open work on this class (#11356 / PR #11357 on message-group queue selection, #11406 on retry-topic ACL) does not touch the message-key path, and no existing report covers the repeated keys field.

What happened?

AdminSendMessageRequest.system_properties.keys is a repeated field, and the data plane keeps every entry: SendMessageActivity validates each key and calls Message.setKeys(Collection), which joins the list. The admin surface does not. ProxyAdminGrpcService.buildAdminMessage reads the same field but keeps only the first non-empty entry:

for (String key : systemProperties.getKeysList()) {
    if (!key.isEmpty()) {
        message.setKeys(key);
        break;
    }
}

Send a message through AdminSendMessage with system_properties.keys = ["k1", "k2", "k3"] and the stored message carries only k1. The RPC answers OK with a message id, so nothing tells the caller that two index keys vanished. Messages keyed this way are then only findable by k1 in key-based queries, which is the whole point of sending keys.

The singular key field still works (covered by the existing adminSendMessageCarriesTagsKeysAndPropertiesTest); only the repeated system_properties.keys path is lossy.

Runtime

develop at 57c2dc0, Temurin 11 (the pinned surefire/ByteBuddy stack does not run on JDK 21). Reproduced with the existing ProxyAdminGrpcServiceTest mocks — no broker needed. On the unpatched service, the new test fails with:

expected:<key1[ key2 key3]> but was:<key1[]>

Expected behavior

Every non-empty entry of system_properties.keys ends up on the message, space-joined like the data plane does. Empty entries are skipped. Precedence stays as it is today: a non-empty system_properties.keys overrides the singular key; an all-empty list leaves the singular key in place.

Activity

  1. Felix-Gong commented on Oct 20, 2026

    @Felix-Gong
    ContributorAuthor

    PR: #11469

  2. RockteMQ-AI commented on Oct 20, 2026

    @RockteMQ-AI
    Contributor

    Issue Evaluation

    Category: type/bug | Status: Confirmed

    The reported issue has been verified against the current codebase.

    Root Cause: ProxyAdminGrpcService.buildAdminMessage iterates systemProperties.getKeysList() but breaks after the first non-empty key, dropping all subsequent keys. The data plane (SendMessageActivity) correctly joins all keys, but the admin path does not.

    Impact: Messages sent via AdminSendMessage with multiple system_properties.keys only retain the first key. Key-based queries cannot find messages by the dropped keys. The RPC returns success, so callers are unaware of data loss.

    Severity: medium — Data loss in the admin message path. The singular key field still works, and the data plane is unaffected.

    Scope: ProxyAdminGrpcService.buildAdminMessage in the Proxy module.

    An automated fix proposal will be generated. Reply /approve to proceed with PR generation.


    Automated evaluation by RockteMQ-AI

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions