Skip to content

Commit a8389e0

Browse files
authored
Support QosException with cause (#591)
* Support QosException with cause * Add generated changelog entries
1 parent 0ea670c commit a8389e0

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type: feature
2+
feature:
3+
description: '`QosException` can now be created with a cause.'
4+
links:
5+
- https://github.com/palantir/conjure-java-runtime-api/pull/591

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

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ private QosException(String message) {
3838
super(message);
3939
}
4040

41+
private QosException(String message, Throwable cause) {
42+
super(message, cause);
43+
}
44+
4145
public abstract <T> T accept(Visitor<T> visitor);
4246

4347
public interface Visitor<T> {
@@ -56,6 +60,13 @@ public static Throttle throttle() {
5660
return new Throttle(Optional.empty());
5761
}
5862

63+
/**
64+
* Like {@link #throttle()}, but includes a cause.
65+
*/
66+
public static Throttle throttle(Throwable cause) {
67+
return new Throttle(Optional.empty(), cause);
68+
}
69+
5970
/**
6071
* Like {@link #throttle()}, but additionally requests that the client wait for at least the given duration before
6172
* retrying the request.
@@ -64,6 +75,13 @@ public static Throttle throttle(Duration duration) {
6475
return new Throttle(Optional.of(duration));
6576
}
6677

78+
/**
79+
* Like {@link #throttle(Duration)}, but includes a cause.
80+
*/
81+
public static Throttle throttle(Duration duration, Throwable cause) {
82+
return new Throttle(Optional.of(duration), cause);
83+
}
84+
6785
/**
6886
* Returns a {@link RetryOther} exception indicating that the calling client should retry against the given node of
6987
* this service.
@@ -72,6 +90,13 @@ public static RetryOther retryOther(URL redirectTo) {
7290
return new RetryOther(redirectTo);
7391
}
7492

93+
/**
94+
* Like {@link #retryOther(URL)}, but includes a cause.
95+
*/
96+
public static RetryOther retryOther(URL redirectTo, Throwable cause) {
97+
return new RetryOther(redirectTo, cause);
98+
}
99+
75100
/**
76101
* An exception indicating that (this node of) this service is currently unavailable and the client may try again at
77102
* a later time, possibly against a different node of this service.
@@ -80,6 +105,13 @@ public static Unavailable unavailable() {
80105
return new Unavailable();
81106
}
82107

108+
/**
109+
* Like {@link #unavailable()}, but includes a cause.
110+
*/
111+
public static Unavailable unavailable(Throwable cause) {
112+
return new Unavailable(cause);
113+
}
114+
83115
/** See {@link #throttle}. */
84116
public static final class Throttle extends QosException {
85117
private final Optional<Duration> retryAfter;
@@ -89,6 +121,11 @@ private Throttle(Optional<Duration> retryAfter) {
89121
this.retryAfter = retryAfter;
90122
}
91123

124+
private Throttle(Optional<Duration> retryAfter, Throwable cause) {
125+
super("Suggesting request throttling with optional retryAfter duration: " + retryAfter, cause);
126+
this.retryAfter = retryAfter;
127+
}
128+
92129
public Optional<Duration> getRetryAfter() {
93130
return retryAfter;
94131
}
@@ -108,6 +145,11 @@ private RetryOther(URL redirectTo) {
108145
this.redirectTo = redirectTo;
109146
}
110147

148+
private RetryOther(URL redirectTo, Throwable cause) {
149+
super("Suggesting request retry against: " + redirectTo.toString(), cause);
150+
this.redirectTo = redirectTo;
151+
}
152+
111153
/** Indicates an alternative URL of this service against which the request may be retried. */
112154
public URL getRedirectTo() {
113155
return redirectTo;
@@ -137,6 +179,10 @@ private Unavailable() {
137179
super("Server unavailable");
138180
}
139181

182+
private Unavailable(Throwable cause) {
183+
super("Server unavailable", cause);
184+
}
185+
140186
@Override
141187
public <T> T accept(Visitor<T> visitor) {
142188
return visitor.visit(this);

0 commit comments

Comments
 (0)