From 731228ac3e0a833e0aa3c4469913be5584913c6c Mon Sep 17 00:00:00 2001 From: liuhy Date: Fri, 31 Jul 2026 01:08:23 -0700 Subject: [PATCH] [ISSUE #10718] Summarize removed client settings logs --- .../v2/common/GrpcClientSettingsManager.java | 13 +++++++- .../common/GrpcClientSettingsManagerTest.java | 33 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManager.java b/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManager.java index ac87da8c244..65a676179fa 100644 --- a/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManager.java +++ b/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManager.java @@ -282,7 +282,8 @@ protected void onWaitEnd() { consumerGroup ); if (consumerGroupInfo == null || consumerGroupInfo.findChannel(clientId) == null) { - log.info("remove unused grpc client settings. group:{}, settings:{}", consumerGroupInfo, settings); + log.info("remove unused grpc client settings. group:{}, clientId:{}, settingsSummary:{}", + consumerGroup, clientId, summarizeClientSettings(settings)); return null; } return settings; @@ -292,4 +293,14 @@ protected void onWaitEnd() { } } } + + static String summarizeClientSettings(Settings settings) { + if (settings == null) { + return "null"; + } + int publishingTopicCount = settings.hasPublishing() ? settings.getPublishing().getTopicsCount() : 0; + int subscriptionCount = settings.hasSubscription() ? settings.getSubscription().getSubscriptionsCount() : 0; + return String.format("clientType=%s, publishingTopicCount=%d, subscriptionCount=%d", + settings.getClientType(), publishingTopicCount, subscriptionCount); + } } diff --git a/proxy/src/test/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManagerTest.java b/proxy/src/test/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManagerTest.java index 4d0037a272a..ad318f24240 100644 --- a/proxy/src/test/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManagerTest.java +++ b/proxy/src/test/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManagerTest.java @@ -40,8 +40,10 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; @@ -156,6 +158,37 @@ public void testOfflineClientLiteSubscription_SettingsNotNull_NotLiteConsumer() verify(messagingProcessor, never()).syncLiteSubscription(any(), any(), anyLong()); } + @Test + public void testSummarizeClientSettingsDoesNotExposeResourceNames() { + Settings producerSettings = Settings.newBuilder() + .setClientType(ClientType.PRODUCER) + .setPublishing(Publishing.newBuilder() + .addTopics(Resource.newBuilder().setName("sensitive-publish-topic").build()) + .build()) + .build(); + Settings consumerSettings = Settings.newBuilder() + .setClientType(ClientType.PUSH_CONSUMER) + .setSubscription(Subscription.newBuilder() + .setGroup(Resource.newBuilder().setName("sensitive-group").build()) + .addSubscriptions(SubscriptionEntry.newBuilder() + .setTopic(Resource.newBuilder().setName("sensitive-subscription-topic").build()) + .build()) + .build()) + .build(); + + String producerSummary = GrpcClientSettingsManager.summarizeClientSettings(producerSettings); + String consumerSummary = GrpcClientSettingsManager.summarizeClientSettings(consumerSettings); + + assertTrue(producerSummary.contains("clientType=PRODUCER")); + assertTrue(producerSummary.contains("publishingTopicCount=1")); + assertFalse(producerSummary.contains("sensitive-publish-topic")); + + assertTrue(consumerSummary.contains("clientType=PUSH_CONSUMER")); + assertTrue(consumerSummary.contains("subscriptionCount=1")); + assertFalse(consumerSummary.contains("sensitive-subscription-topic")); + assertFalse(consumerSummary.contains("sensitive-group")); + } + @Test public void testOfflineClientLiteSubscription_ValidLiteConsumer_Success() { Subscription subscription = Subscription.newBuilder()