Hi community
I am starting a DISCUSS for "Retry topic should not create for a retry
topic."
If we use regex-topic consumer and enable retry, it is possible to create
such a topic
"persistent://public/default/tp1-sub1-RETRY-sub2-RETRY-sub3-RETRY....". You
can reproduce this by using the test below.
It probably doesn't make sense to create a RETRY/DLQ topic on RETRY/DLQ. We
should avoid this scenario if users use the default configuration (users
can enable it if they need it).
```java
@Test
public void testRetryTopicWillNotCreatedForRetryTopic() throws
Exception {
final String topic = "persistent://my-property/my-ns/tp1";
Producer<byte[]> producer = pulsarClient.newProducer(Schema.BYTES)
.topic(topic)
.create();
for (int i = 0; i < 100; i++) {
producer.send(String.format("Hello Pulsar [%d]", i).getBytes());
}
producer.close();
for (int i =0; i< 10; i++) {
Consumer<byte[]> consumer =
pulsarClient.newConsumer(Schema.BYTES)
.topicsPattern("my-property/my-ns/.*")
.subscriptionName("sub" + i)
.enableRetry(true)
.deadLetterPolicy(DeadLetterPolicy.builder().maxRedeliverCount(2).build())
.subscriptionInitialPosition(SubscriptionInitialPosition.Earliest)
.subscribe();
Message<byte[]> message = consumer.receive();
log.info("consumer received message : {} {}",
message.getMessageId(), new String(message.getData()));
consumer.reconsumeLater(message, 1, TimeUnit.SECONDS);
consumer.close();
}
Set<String> tps =
pulsar.getBrokerService().getTopics().keys().stream().collect(Collectors.toSet());
try {
for (String tp : tps) {
assertTrue(howManyKeyWordRetryInTopicName(tp,
RETRY_GROUP_TOPIC_SUFFIX) <= 1, tp);
assertTrue(howManyKeyWordRetryInTopicName(tp,
DLQ_GROUP_TOPIC_SUFFIX) <= 1, tp);
}
} finally {
// cleanup.
for (String tp : tps){
if (tp.startsWith(topic)) {
admin.topics().delete(tp ,true);
}
}
}
}
private int howManyKeyWordRetryInTopicName(String topicName, String
keyWord) {
int retryCountInTopicName = 0;
String tpCp = topicName;
while (true) {
int index = tpCp.indexOf(keyWord);
if (index < 0) {
break;
}
tpCp = tpCp.substring(index + keyWord.length());
retryCountInTopicName++;
}
return retryCountInTopicName;
}
```
Thanks
Yubiao Feng