You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by rx...@apache.org on 2021/01/04 11:12:52 UTC

[pulsar-client-go] branch master updated: deduplicate user topics before using them (#426)

This is an automated email from the ASF dual-hosted git repository.

rxl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-client-go.git


The following commit(s) were added to refs/heads/master by this push:
     new fb10d4f  deduplicate user topics before using them (#426)
fb10d4f is described below

commit fb10d4f557639df342a649be367c44e5ae62e4eb
Author: wuYin <wu...@gmail.com>
AuthorDate: Mon Jan 4 19:12:44 2021 +0800

    deduplicate user topics before using them (#426)
    
    ### Motivation
    
    - Deduplicate user topics before using them, just like client-java's `TreeSet` topics implementation, see [ConsumerConfigurationData.java#L56](https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/conf/ConsumerConfigurationData.java#L56)
    
    
    ### Modifications
    
    - add `distinct` utility function to deduplicate user provided topics
---
 pulsar/consumer_impl.go | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/pulsar/consumer_impl.go b/pulsar/consumer_impl.go
index 370ea12..6379993 100644
--- a/pulsar/consumer_impl.go
+++ b/pulsar/consumer_impl.go
@@ -164,6 +164,7 @@ func newConsumer(client *client, options ConsumerOptions) (Consumer, error) {
 		for i := range options.Topics {
 			options.Topics[i] = tns[i].Name
 		}
+		options.Topics = distinct(options.Topics)
 
 		return newMultiTopicConsumer(client, options, options.Topics, messageCh, dlq, rlq)
 	}
@@ -555,6 +556,18 @@ func generateRandomName() string {
 	return string(bytes)
 }
 
+func distinct(fqdnTopics []string) []string {
+	set := make(map[string]struct{})
+	uniques := make([]string, 0, len(fqdnTopics))
+	for _, topic := range fqdnTopics {
+		if _, ok := set[topic]; !ok {
+			set[topic] = struct{}{}
+			uniques = append(uniques, topic)
+		}
+	}
+	return uniques
+}
+
 func toProtoSubType(st SubscriptionType) pb.CommandSubscribe_SubType {
 	switch st {
 	case Exclusive: