Skip to content

Commit f6da346

Browse files
author
Carter Kozak
authored
Include dueTo and retryHint in QosException SafeLoggable.getArgs (#1248)
Include dueTo and retryHint in QosException SafeLoggable args
1 parent 6827e9d commit f6da346

File tree

3 files changed

+62
-9
lines changed

3 files changed

+62
-9
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type: improvement
2+
improvement:
3+
description: Include dueTo and retryHint in QosException SafeLoggable args
4+
links:
5+
- https://github.com/palantir/conjure-java-runtime-api/pull/1248

errors/src/main/java/com/palantir/conjure/java/api/errors/QosException.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.palantir.logsafe.UnsafeArg;
2525
import java.net.URL;
2626
import java.time.Duration;
27-
import java.util.Collections;
2827
import java.util.List;
2928
import java.util.Optional;
3029

@@ -224,7 +223,11 @@ public String getLogMessage() {
224223

225224
@Override
226225
public List<Arg<?>> getArgs() {
227-
return List.of(SafeArg.of("retryAfter", retryAfter.orElse(null)), SafeArg.of("reason", getReason()));
226+
return List.of(
227+
SafeArg.of("retryAfter", retryAfter.orElse(null)),
228+
SafeArg.of("reason", getReason().reason()),
229+
SafeArg.of("dueTo", getReason().dueTo().orElse(null)),
230+
SafeArg.of("retryHint", getReason().retryHint().orElse(null)));
228231
}
229232
}
230233

@@ -272,7 +275,11 @@ public String getLogMessage() {
272275
@Unsafe
273276
@Override
274277
public List<Arg<?>> getArgs() {
275-
return List.of(UnsafeArg.of("redirectTo", redirectTo), SafeArg.of("reason", getReason()));
278+
return List.of(
279+
UnsafeArg.of("redirectTo", redirectTo),
280+
SafeArg.of("reason", getReason().reason()),
281+
SafeArg.of("dueTo", getReason().dueTo().orElse(null)),
282+
SafeArg.of("retryHint", getReason().retryHint().orElse(null)));
276283
}
277284
}
278285

@@ -310,7 +317,10 @@ public String getLogMessage() {
310317

311318
@Override
312319
public List<Arg<?>> getArgs() {
313-
return Collections.singletonList(SafeArg.of("reason", getReason()));
320+
return List.of(
321+
SafeArg.of("reason", getReason().reason()),
322+
SafeArg.of("dueTo", getReason().dueTo().orElse(null)),
323+
SafeArg.of("retryHint", getReason().retryHint().orElse(null)));
314324
}
315325
}
316326
}

errors/src/test/java/com/palantir/conjure/java/api/errors/QosExceptionTest.java

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@
2020
import static org.assertj.core.api.Assertions.assertThat;
2121

2222
import com.google.errorprone.annotations.CompileTimeConstant;
23+
import com.palantir.conjure.java.api.errors.QosReason.DueTo;
24+
import com.palantir.conjure.java.api.errors.QosReason.RetryHint;
2325
import com.palantir.logsafe.SafeArg;
2426
import com.palantir.logsafe.exceptions.SafeIllegalArgumentException;
2527
import java.net.MalformedURLException;
2628
import java.net.URL;
2729
import org.junit.jupiter.api.Test;
2830
import org.junit.jupiter.params.ParameterizedTest;
31+
import org.junit.jupiter.params.provider.EnumSource;
2932
import org.junit.jupiter.params.provider.ValueSource;
3033

3134
public final class QosExceptionTest {
@@ -55,14 +58,49 @@ public Class<?> visit(QosException.Unavailable exception) {
5558
assertThat(QosException.unavailable().accept(visitor)).isEqualTo(QosException.Unavailable.class);
5659
}
5760

58-
@Test
59-
public void testReason() {
60-
QosReason reason = QosReason.of("custom-reason");
61+
private enum QosExceptionFactory {
62+
THROTTLE() {
63+
@Override
64+
QosException create(QosReason reason) {
65+
return QosException.throttle(reason);
66+
}
67+
},
68+
UNAVAILABLE {
69+
@Override
70+
QosException create(QosReason reason) {
71+
return QosException.unavailable(reason);
72+
}
73+
},
74+
RETRY_OTHER {
75+
@Override
76+
QosException create(QosReason reason) {
77+
try {
78+
return QosException.retryOther(reason, new URL("http://foo"));
79+
} catch (MalformedURLException e) {
80+
throw new RuntimeException(e);
81+
}
82+
}
83+
};
84+
85+
abstract QosException create(QosReason reason);
86+
}
87+
88+
@ParameterizedTest
89+
@EnumSource(QosExceptionFactory.class)
90+
void testReason(QosExceptionFactory qosException) {
91+
QosReason reason = QosReason.builder()
92+
.reason("custom-reason")
93+
.dueTo(DueTo.CUSTOM)
94+
.retryHint(RetryHint.DO_NOT_RETRY)
95+
.build();
6196
assertThat(QosException.throttle(reason).getReason()).isEqualTo(reason);
6297
assertThatLoggableExceptionThrownBy(() -> {
63-
throw QosException.throttle(reason);
98+
throw qosException.create(reason);
6499
})
65-
.containsArgs(SafeArg.of("reason", reason));
100+
.containsArgs(
101+
SafeArg.of("reason", "custom-reason"),
102+
SafeArg.of("retryHint", RetryHint.DO_NOT_RETRY),
103+
SafeArg.of("dueTo", DueTo.CUSTOM));
66104
}
67105

68106
@ParameterizedTest

0 commit comments

Comments
 (0)