This is an automated email from the ASF dual-hosted git repository. rxl pushed a commit to branch branch-2.6 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 45d2c8f6802e9fbc7f3790e20a889bf2fec0cedc Author: feynmanlin <[email protected]> AuthorDate: Mon Jul 27 12:26:51 2020 +0800 fix validation never return false (#7593) Fixes #7543 (cherry picked from commit 27820358a92704c2cd24a08e295369dfbcb145cc) --- .../pulsar/client/impl/TopicsConsumerImplTest.java | 22 ++++++++++++++++++++++ .../client/impl/MultiTopicsConsumerImpl.java | 8 +++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TopicsConsumerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TopicsConsumerImplTest.java index debc250..7b5309f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TopicsConsumerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TopicsConsumerImplTest.java @@ -456,6 +456,28 @@ public class TopicsConsumerImplTest extends ProducerConsumerBase { } @Test + public void testTopicNameValid() throws Exception{ + final String topicName = "persistent://prop/use/ns-abc/testTopicNameValid"; + TenantInfo tenantInfo = createDefaultTenantInfo(); + admin.tenants().createTenant("prop", tenantInfo); + admin.topics().createPartitionedTopic(topicName, 3); + Consumer<byte[]> consumer = pulsarClient.newConsumer() + .topic(topicName) + .subscriptionName("subscriptionName") + .subscribe(); + ((MultiTopicsConsumerImpl) consumer).subscribeAsync("ns-abc/testTopicNameValid", 5).handle((res, exception) -> { + assertTrue(exception instanceof PulsarClientException.AlreadyClosedException); + assertEquals(((PulsarClientException.AlreadyClosedException) exception).getMessage(), "Topic name not valid"); + return null; + }).get(); + ((MultiTopicsConsumerImpl) consumer).subscribeAsync(topicName, 3).handle((res, exception) -> { + assertTrue(exception instanceof PulsarClientException.AlreadyClosedException); + assertEquals(((PulsarClientException.AlreadyClosedException) exception).getMessage(), "Topic name not valid"); + return null; + }).get(); + } + + @Test public void testSubscribeUnsubscribeSingleTopic() throws Exception { String key = "TopicsConsumerSubscribeUnsubscribeSingleTopicTest"; final String subscriptionName = "my-ex-subscription-" + key; diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImpl.java index 4e2a6be..7f44836 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImpl.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImpl.java @@ -728,10 +728,7 @@ public class MultiTopicsConsumerImpl<T> extends ConsumerBase<T> { } private boolean topicNameValid(String topicName) { - checkArgument(TopicName.isValid(topicName), "Invalid topic name:" + topicName); - checkArgument(!topics.containsKey(topicName), "Topics already contains topic:" + topicName); - - return true; + return TopicName.isValid(topicName) && !topics.containsKey(topicName); } // subscribe one more given topic @@ -792,7 +789,8 @@ public class MultiTopicsConsumerImpl<T> extends ConsumerBase<T> { } // subscribe one more given topic, but already know the numberPartitions - private CompletableFuture<Void> subscribeAsync(String topicName, int numberPartitions) { + @VisibleForTesting + CompletableFuture<Void> subscribeAsync(String topicName, int numberPartitions) { if (!topicNameValid(topicName)) { return FutureUtil.failedFuture( new PulsarClientException.AlreadyClosedException("Topic name not valid"));
