Skip to content

Commit f613368

Browse files
authored
fix: warnings on topic unsubscribe (#2463)
Signed-off-by: emiliyank <e.kadiyski@gmail.com>
1 parent 3888781 commit f613368

2 files changed

Lines changed: 54 additions & 1 deletion

File tree

sdk/src/main/java/com/hedera/hashgraph/sdk/TopicMessageQuery.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,11 @@ public void onNext(ConsensusTopicResponse consensusTopicResponse) {
320320

321321
@Override
322322
public void onError(Throwable t) {
323-
if (attempt >= maxAttempts || !retryHandler.test(t) || cancelledByClient.get()) {
323+
if (cancelledByClient.get()) {
324+
return;
325+
}
326+
327+
if (attempt >= maxAttempts || !retryHandler.test(t)) {
324328
errorHandler.accept(t, null);
325329
return;
326330
}

sdk/src/testIntegration/java/com/hedera/hashgraph/sdk/test/integration/TopicMessageIntegrationTest.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.time.Duration;
99
import java.time.Instant;
1010
import java.util.Objects;
11+
import java.util.concurrent.atomic.AtomicBoolean;
1112
import org.junit.jupiter.api.DisplayName;
1213
import org.junit.jupiter.api.Test;
1314

@@ -123,4 +124,52 @@ void canReceiveALargeTopicMessage() throws Exception {
123124
.getReceipt(testEnv.client);
124125
}
125126
}
127+
128+
@Test
129+
@DisplayName("Unsubscribing does not log retry warnings")
130+
void unsubscribingDoesNotLogRetryWarnings() throws Exception {
131+
try (var testEnv = new IntegrationTestEnv(1)) {
132+
133+
var response = new TopicCreateTransaction()
134+
.setAdminKey(testEnv.operatorKey)
135+
.setTopicMemo("[e2e::TopicCreateTransaction]")
136+
.execute(testEnv.client);
137+
138+
var topicId = Objects.requireNonNull(response.getReceipt(testEnv.client).topicId);
139+
140+
var receivedMessage = new AtomicBoolean(false);
141+
var retryWarningLogged = new AtomicBoolean(false);
142+
var errorHandlerInvoked = new AtomicBoolean(false);
143+
144+
var retryHandler = new java.util.function.Predicate<Throwable>() {
145+
@Override
146+
public boolean test(Throwable throwable) {
147+
retryWarningLogged.set(true);
148+
return false; // Don't actually retry
149+
}
150+
};
151+
152+
var handle = new TopicMessageQuery()
153+
.setTopicId(topicId)
154+
.setStartTime(Instant.EPOCH)
155+
.setRetryHandler(retryHandler)
156+
.setErrorHandler((throwable, topicMessage) -> errorHandlerInvoked.set(true))
157+
.subscribe(testEnv.client, (message) -> {
158+
receivedMessage.set(true);
159+
});
160+
161+
handle.unsubscribe();
162+
163+
Thread.sleep(3000);
164+
165+
assertThat(retryWarningLogged.get()).isFalse();
166+
assertThat(receivedMessage.get()).isFalse();
167+
assertThat(errorHandlerInvoked.get()).isFalse();
168+
169+
new TopicDeleteTransaction()
170+
.setTopicId(topicId)
171+
.execute(testEnv.client)
172+
.getReceipt(testEnv.client);
173+
}
174+
}
126175
}

0 commit comments

Comments
 (0)