From 4a5403a42b829189576d07d8042865fcac7da698 Mon Sep 17 00:00:00 2001 From: liuhy Date: Thu, 30 Jul 2026 23:51:35 -0700 Subject: [PATCH] [ISSUE #10710] Sanitize lite offline Settings failure logs --- .../v2/common/GrpcClientSettingsManager.java | 25 +++++++++++++++- .../common/GrpcClientSettingsManagerTest.java | 29 +++++++++++++++++++ 2 files changed, 53 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..bfa936d4c57 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 @@ -25,6 +25,7 @@ import apache.rocketmq.v2.ExponentialBackoff; import apache.rocketmq.v2.Metric; import apache.rocketmq.v2.Settings; +import apache.rocketmq.v2.Subscription; import com.google.protobuf.Duration; import com.google.protobuf.util.Durations; import java.util.Arrays; @@ -253,10 +254,32 @@ public void offlineClientLiteSubscription(ProxyContext ctx, String clientId, Set } }); } catch (Exception e) { - log.error("offlineClientLiteSubscription error, clientId:{}, settings:{}", clientId, settings, e); + log.error("offlineClientLiteSubscription error, clientId:{}, settings:{}", + clientId, summarizeLiteSettings(settings), e); } } + protected static String summarizeLiteSettings(Settings settings) { + if (settings == null) { + return "null"; + } + String group = ""; + String topic = ""; + int subscriptionCount = 0; + if (settings.hasSubscription()) { + Subscription subscription = settings.getSubscription(); + group = subscription.getGroup().getName(); + subscriptionCount = subscription.getSubscriptionsCount(); + if (subscriptionCount > 0) { + topic = subscription.getSubscriptions(0).getTopic().getName(); + } + } + return "clientType:" + settings.getClientType() + + ", group:" + group + + ", topic:" + topic + + ", subscriptionCount:" + subscriptionCount; + } + @Override public void run() { while (!this.isStopped()) { 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..017f9c183f5 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 @@ -20,6 +20,7 @@ import apache.rocketmq.v2.ClientType; import apache.rocketmq.v2.CustomizedBackoff; import apache.rocketmq.v2.ExponentialBackoff; +import apache.rocketmq.v2.FilterExpression; import apache.rocketmq.v2.Publishing; import apache.rocketmq.v2.Resource; import apache.rocketmq.v2.RetryPolicy; @@ -40,8 +41,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; @@ -201,4 +204,30 @@ public void testOfflineClientLiteSubscription_ValidLiteConsumer_SyncThrowsExcept verify(messagingProcessor, times(1)).syncLiteSubscription(any(), any(LiteSubscriptionDTO.class), anyLong()); } + + @Test + public void testSummarizeLiteSettingsDoesNotLeakSubscriptionDetails() { + Settings settings = Settings.newBuilder() + .setClientType(ClientType.LITE_PUSH_CONSUMER) + .setSubscription(Subscription.newBuilder() + .setGroup(Resource.newBuilder().setName("testGroup").build()) + .addSubscriptions(SubscriptionEntry.newBuilder() + .setTopic(Resource.newBuilder().setName("testTopic").build()) + .setExpression(FilterExpression.newBuilder().setExpression("sensitive-filter").build()) + .build()) + .addSubscriptions(SubscriptionEntry.newBuilder() + .setTopic(Resource.newBuilder().setName("otherTopic").build()) + .build()) + .build()) + .build(); + + String summary = GrpcClientSettingsManager.summarizeLiteSettings(settings); + + assertTrue(summary.contains("clientType:LITE_PUSH_CONSUMER")); + assertTrue(summary.contains("group:testGroup")); + assertTrue(summary.contains("topic:testTopic")); + assertTrue(summary.contains("subscriptionCount:2")); + assertFalse(summary.contains("sensitive-filter")); + assertFalse(summary.contains("otherTopic")); + } }