Skip to content

Commit ca70f87

Browse files
committed
Update retry policy to use Status insted of StatusCode
1 parent a80cd88 commit ca70f87

File tree

5 files changed

+59
-59
lines changed

5 files changed

+59
-59
lines changed

common/src/main/java/tech/ydb/common/retry/RetryConfig.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
package tech.ydb.common.retry;
22

3-
import tech.ydb.core.StatusCode;
3+
import tech.ydb.core.Status;
44
import tech.ydb.core.UnexpectedResultException;
55

66
/**
77
* Recipes should use the retry configuration to decide how to retry
8-
* errors like unsuccessful {@link tech.ydb.core.StatusCode}.
8+
* errors like unsuccessful {@link tech.ydb.core.Status}.
99
*
1010
* @author Aleksandr Gorshenin
1111
*/
1212
@FunctionalInterface
1313
public interface RetryConfig {
1414

1515
/**
16-
* Returns retry policy for the given status code and {@code null} if that status code is not retryable
16+
* Returns retry policy for the given {@link Status} and {@code null} if that status is not retryable
1717
*
18-
* @param code status code to check
19-
* @return policy of retries or {@code null} if the status code is not retryable
18+
* @param code status to check
19+
* @return policy of retries or {@code null} if the status is not retryable
2020
*/
21-
RetryPolicy getStatusCodeRetryPolicy(StatusCode code);
21+
RetryPolicy getStatusRetryPolicy(Status code);
2222

2323
/**
2424
* Returns retry policy for the given exception and {@code null} if that exception is not retryable
@@ -29,7 +29,7 @@ public interface RetryConfig {
2929
default RetryPolicy getThrowableRetryPolicy(Throwable th) {
3030
for (Throwable ex = th; ex != null; ex = ex.getCause()) {
3131
if (ex instanceof UnexpectedResultException) {
32-
return getStatusCodeRetryPolicy(((UnexpectedResultException) ex).getStatus().getCode());
32+
return getStatusRetryPolicy(((UnexpectedResultException) ex).getStatus());
3333
}
3434
}
3535
return null;
@@ -79,7 +79,7 @@ static RetryConfig idempotentRetryUntilElapsed(long maxElapsedMs) {
7979
* @return retry configuration object
8080
*/
8181
static RetryConfig noRetries() {
82-
return (StatusCode code) -> null;
82+
return (Status status) -> null;
8383
}
8484

8585
/**

common/src/main/java/tech/ydb/common/retry/RetryPolicy.java

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*
66
* @author Aleksandr Gorshenin
77
*/
8+
@FunctionalInterface
89
public interface RetryPolicy {
910
/**
1011
* Called when an operation is failed for some reason to determine if it should be retried.

common/src/main/java/tech/ydb/common/retry/YdbRetryConfig.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package tech.ydb.common.retry;
22

3-
import tech.ydb.core.StatusCode;
3+
import tech.ydb.core.Status;
44

55
/**
66
*
@@ -22,12 +22,12 @@ class YdbRetryConfig implements RetryConfig {
2222
}
2323

2424
@Override
25-
public RetryPolicy getStatusCodeRetryPolicy(StatusCode code) {
26-
if (code == null) {
25+
public RetryPolicy getStatusRetryPolicy(Status status) {
26+
if (status == null) {
2727
return null;
2828
}
2929

30-
switch (code) {
30+
switch (status.getCode()) {
3131
// Instant retry
3232
case BAD_SESSION:
3333
case SESSION_BUSY:

common/src/test/java/tech/ydb/common/retry/RetryConfigTest.java

+44-44
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void nullStatusesTest() {
2222
RetryConfig config = RetryConfig.retryForever();
2323

2424
Assert.assertNull(config.getThrowableRetryPolicy(null));
25-
Assert.assertNull(config.getStatusCodeRetryPolicy(null));
25+
Assert.assertNull(config.getStatusRetryPolicy(null));
2626
}
2727

2828
@Test
@@ -32,8 +32,8 @@ public void throwableRetriesTest() {
3232
Assert.assertNull(config.getThrowableRetryPolicy(new RuntimeException("test message")));
3333
Assert.assertNull(config.getThrowableRetryPolicy(new Exception("1", new RuntimeException("2"))));
3434

35-
RetryPolicy immediatelly = config.getStatusCodeRetryPolicy(StatusCode.BAD_SESSION);
36-
RetryPolicy fast = config.getStatusCodeRetryPolicy(StatusCode.NOT_FOUND);
35+
RetryPolicy immediatelly = config.getStatusRetryPolicy(Status.of(StatusCode.BAD_SESSION));
36+
RetryPolicy fast = config.getStatusRetryPolicy(Status.of(StatusCode.NOT_FOUND));
3737

3838
Assert.assertEquals(immediatelly, config.getThrowableRetryPolicy(
3939
new UnexpectedResultException("base", Status.of(StatusCode.BAD_SESSION)))
@@ -51,7 +51,7 @@ public void noRetryPolicyTest() {
5151
RetryConfig config = RetryConfig.noRetries();
5252
// unretrayable
5353
for (StatusCode code: StatusCode.values()) {
54-
Assert.assertNull(config.getStatusCodeRetryPolicy(code));
54+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(code)));
5555
}
5656
}
5757

@@ -60,80 +60,80 @@ public void nonIdempotentRetryPolicyTest() {
6060
RetryConfig config = RetryConfig.retryForever();
6161

6262
// unretrayable
63-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.SCHEME_ERROR));
64-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.ALREADY_EXISTS));
65-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.UNAUTHORIZED));
66-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.UNAVAILABLE));
67-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.TRANSPORT_UNAVAILABLE));
68-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.CLIENT_CANCELLED));
69-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.CLIENT_INTERNAL_ERROR));
70-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.NOT_FOUND));
71-
72-
RetryPolicy immediatelly = config.getStatusCodeRetryPolicy(StatusCode.BAD_SESSION);
63+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.SCHEME_ERROR)));
64+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.ALREADY_EXISTS)));
65+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.UNAUTHORIZED)));
66+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.UNAVAILABLE)));
67+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.TRANSPORT_UNAVAILABLE)));
68+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.CLIENT_CANCELLED)));
69+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.CLIENT_INTERNAL_ERROR)));
70+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.NOT_FOUND)));
71+
72+
RetryPolicy immediatelly = config.getStatusRetryPolicy(Status.of(StatusCode.BAD_SESSION));
7373
Assert.assertNotNull(immediatelly);
74-
Assert.assertEquals(immediatelly, config.getStatusCodeRetryPolicy(StatusCode.SESSION_BUSY));
74+
Assert.assertEquals(immediatelly, config.getStatusRetryPolicy(Status.of(StatusCode.SESSION_BUSY)));
7575

76-
RetryPolicy fast = config.getStatusCodeRetryPolicy(StatusCode.ABORTED);
76+
RetryPolicy fast = config.getStatusRetryPolicy(Status.of(StatusCode.ABORTED));
7777
Assert.assertNotNull(fast);
78-
Assert.assertEquals(fast, config.getStatusCodeRetryPolicy(StatusCode.UNDETERMINED));
78+
Assert.assertEquals(fast, config.getStatusRetryPolicy(Status.of(StatusCode.UNDETERMINED)));
7979

80-
RetryPolicy slow = config.getStatusCodeRetryPolicy(StatusCode.OVERLOADED);
80+
RetryPolicy slow = config.getStatusRetryPolicy(Status.of(StatusCode.OVERLOADED));
8181
Assert.assertNotNull(slow);
82-
Assert.assertEquals(slow, config.getStatusCodeRetryPolicy(StatusCode.CLIENT_RESOURCE_EXHAUSTED));
82+
Assert.assertEquals(slow, config.getStatusRetryPolicy(Status.of(StatusCode.CLIENT_RESOURCE_EXHAUSTED)));
8383
}
8484

8585
@Test
8686
public void idempotentRetryPolicyTest() {
8787
RetryConfig config = RetryConfig.idempotentRetryForever();
8888

8989
// unretrayable
90-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.SCHEME_ERROR));
91-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.ALREADY_EXISTS));
92-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.UNAUTHORIZED));
93-
Assert.assertNull(config.getStatusCodeRetryPolicy(StatusCode.NOT_FOUND));
90+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.SCHEME_ERROR)));
91+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.ALREADY_EXISTS)));
92+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.UNAUTHORIZED)));
93+
Assert.assertNull(config.getStatusRetryPolicy(Status.of(StatusCode.NOT_FOUND)));
9494

95-
RetryPolicy immediatelly = config.getStatusCodeRetryPolicy(StatusCode.BAD_SESSION);
95+
RetryPolicy immediatelly = config.getStatusRetryPolicy(Status.of(StatusCode.BAD_SESSION));
9696
Assert.assertNotNull(immediatelly);
97-
Assert.assertEquals(immediatelly, config.getStatusCodeRetryPolicy(StatusCode.SESSION_BUSY));
97+
Assert.assertEquals(immediatelly, config.getStatusRetryPolicy(Status.of(StatusCode.SESSION_BUSY)));
9898

99-
RetryPolicy fast = config.getStatusCodeRetryPolicy(StatusCode.ABORTED);
99+
RetryPolicy fast = config.getStatusRetryPolicy(Status.of(StatusCode.ABORTED));
100100
Assert.assertNotNull(fast);
101-
Assert.assertEquals(fast, config.getStatusCodeRetryPolicy(StatusCode.UNDETERMINED));
102-
Assert.assertEquals(fast, config.getStatusCodeRetryPolicy(StatusCode.UNAVAILABLE));
103-
Assert.assertEquals(fast, config.getStatusCodeRetryPolicy(StatusCode.TRANSPORT_UNAVAILABLE));
104-
Assert.assertEquals(fast, config.getStatusCodeRetryPolicy(StatusCode.CLIENT_CANCELLED));
105-
Assert.assertEquals(fast, config.getStatusCodeRetryPolicy(StatusCode.CLIENT_INTERNAL_ERROR));
101+
Assert.assertEquals(fast, config.getStatusRetryPolicy(Status.of(StatusCode.UNDETERMINED)));
102+
Assert.assertEquals(fast, config.getStatusRetryPolicy(Status.of(StatusCode.UNAVAILABLE)));
103+
Assert.assertEquals(fast, config.getStatusRetryPolicy(Status.of(StatusCode.TRANSPORT_UNAVAILABLE)));
104+
Assert.assertEquals(fast, config.getStatusRetryPolicy(Status.of(StatusCode.CLIENT_CANCELLED)));
105+
Assert.assertEquals(fast, config.getStatusRetryPolicy(Status.of(StatusCode.CLIENT_INTERNAL_ERROR)));
106106

107-
RetryPolicy slow = config.getStatusCodeRetryPolicy(StatusCode.OVERLOADED);
107+
RetryPolicy slow = config.getStatusRetryPolicy(Status.of(StatusCode.OVERLOADED));
108108
Assert.assertNotNull(slow);
109-
Assert.assertEquals(slow, config.getStatusCodeRetryPolicy(StatusCode.CLIENT_RESOURCE_EXHAUSTED));
109+
Assert.assertEquals(slow, config.getStatusRetryPolicy(Status.of(StatusCode.CLIENT_RESOURCE_EXHAUSTED)));
110110
}
111111

112112
@Test
113113
public void notFoundRetryPolicyTest() {
114114
RetryConfig config = RetryConfig.newConfig().retryNotFound(true).retryForever();
115115

116-
RetryPolicy fast = config.getStatusCodeRetryPolicy(StatusCode.ABORTED);
117-
Assert.assertEquals(fast, config.getStatusCodeRetryPolicy(StatusCode.NOT_FOUND));
116+
RetryPolicy fast = config.getStatusRetryPolicy(Status.of(StatusCode.ABORTED));
117+
Assert.assertEquals(fast, config.getStatusRetryPolicy(Status.of(StatusCode.NOT_FOUND)));
118118
}
119119

120120
@Test
121121
public void foreverRetryTest() {
122122
RetryConfig config = RetryConfig.newConfig().withSlowBackoff(100, 5).withFastBackoff(10, 10).retryForever();
123123

124-
RetryPolicy immediatelly = config.getStatusCodeRetryPolicy(StatusCode.BAD_SESSION);
124+
RetryPolicy immediatelly = config.getStatusRetryPolicy(Status.of(StatusCode.BAD_SESSION));
125125
Assert.assertEquals(0, immediatelly.nextRetryMs(0, 0));
126126
Assert.assertEquals(0, immediatelly.nextRetryMs(0, Integer.MAX_VALUE));
127127
Assert.assertEquals(0, immediatelly.nextRetryMs(Integer.MAX_VALUE, 0));
128128
Assert.assertEquals(0, immediatelly.nextRetryMs(Integer.MAX_VALUE, Integer.MAX_VALUE));
129129

130-
RetryPolicy fast = config.getStatusCodeRetryPolicy(StatusCode.ABORTED);
130+
RetryPolicy fast = config.getStatusRetryPolicy(Status.of(StatusCode.ABORTED));
131131
assertDuration(10, 20, fast.nextRetryMs(0, 0));
132132
assertDuration(10, 20, fast.nextRetryMs(0, Integer.MAX_VALUE));
133133
assertDuration(10240, 20480, fast.nextRetryMs(Integer.MAX_VALUE, 0));
134134
assertDuration(10240, 20480, fast.nextRetryMs(Integer.MAX_VALUE, Integer.MAX_VALUE));
135135

136-
RetryPolicy slow = config.getStatusCodeRetryPolicy(StatusCode.OVERLOADED);
136+
RetryPolicy slow = config.getStatusRetryPolicy(Status.of(StatusCode.OVERLOADED));
137137
assertDuration(100, 200, slow.nextRetryMs(0, 0));
138138
assertDuration(100, 200, slow.nextRetryMs(0, Integer.MAX_VALUE));
139139
assertDuration(3200, 6400, slow.nextRetryMs(Integer.MAX_VALUE, 0));
@@ -144,22 +144,22 @@ public void foreverRetryTest() {
144144
public void untilElapsedRetryTest() {
145145
RetryConfig config = RetryConfig.idempotentRetryUntilElapsed(5000);
146146

147-
RetryPolicy immediatelly = config.getStatusCodeRetryPolicy(StatusCode.BAD_SESSION);
147+
RetryPolicy immediatelly = config.getStatusRetryPolicy(Status.of(StatusCode.BAD_SESSION));
148148
Assert.assertEquals(0, immediatelly.nextRetryMs(0, 0));
149149
Assert.assertEquals(0, immediatelly.nextRetryMs(0, 5000));
150150
Assert.assertEquals(0, immediatelly.nextRetryMs(Integer.MAX_VALUE, 0));
151151
Assert.assertEquals(0, immediatelly.nextRetryMs(Integer.MAX_VALUE, 5000));
152152
Assert.assertEquals(-1, immediatelly.nextRetryMs(0, 5001));
153153
Assert.assertEquals(-1, immediatelly.nextRetryMs(Integer.MAX_VALUE, 5001));
154154

155-
RetryPolicy fast = config.getStatusCodeRetryPolicy(StatusCode.ABORTED);
155+
RetryPolicy fast = config.getStatusRetryPolicy(Status.of(StatusCode.ABORTED));
156156
assertDuration(5, 10, fast.nextRetryMs(0, 0));
157157
Assert.assertEquals(3, fast.nextRetryMs(0, 4997));
158158
Assert.assertEquals(5000, fast.nextRetryMs(Integer.MAX_VALUE, 0));
159159
Assert.assertEquals(1, fast.nextRetryMs(Integer.MAX_VALUE, 4999));
160160
Assert.assertEquals(-1, fast.nextRetryMs(Integer.MAX_VALUE, 5000));
161161

162-
RetryPolicy slow = config.getStatusCodeRetryPolicy(StatusCode.OVERLOADED);
162+
RetryPolicy slow = config.getStatusRetryPolicy(Status.of(StatusCode.OVERLOADED));
163163
assertDuration(500, 1000, slow.nextRetryMs(0, 0));
164164
Assert.assertEquals(3, slow.nextRetryMs(0, 4997));
165165
Assert.assertEquals(5000, slow.nextRetryMs(Integer.MAX_VALUE, 0));
@@ -171,23 +171,23 @@ public void untilElapsedRetryTest() {
171171
public void nTimesRetryTest() {
172172
RetryConfig config = RetryConfig.newConfig().retryNTimes(8);
173173

174-
RetryPolicy immediatelly = config.getStatusCodeRetryPolicy(StatusCode.BAD_SESSION);
174+
RetryPolicy immediatelly = config.getStatusRetryPolicy(Status.of(StatusCode.BAD_SESSION));
175175
Assert.assertEquals(0, immediatelly.nextRetryMs(0, 0));
176176
Assert.assertEquals(0, immediatelly.nextRetryMs(0, Integer.MAX_VALUE));
177177
Assert.assertEquals(0, immediatelly.nextRetryMs(7, 0));
178178
Assert.assertEquals(0, immediatelly.nextRetryMs(7, Integer.MAX_VALUE));
179179
Assert.assertEquals(-1, immediatelly.nextRetryMs(8, 0));
180180
Assert.assertEquals(-1, immediatelly.nextRetryMs(8, Integer.MAX_VALUE));
181181

182-
RetryPolicy fast = config.getStatusCodeRetryPolicy(StatusCode.ABORTED);
182+
RetryPolicy fast = config.getStatusRetryPolicy(Status.of(StatusCode.ABORTED));
183183
assertDuration(5, 10, fast.nextRetryMs(0, 0));
184184
assertDuration(5, 10, fast.nextRetryMs(0, Integer.MAX_VALUE));
185185
assertDuration(5 * 128, 5 * 256, fast.nextRetryMs(7, 0));
186186
assertDuration(5 * 128, 5 * 256, fast.nextRetryMs(7, Integer.MAX_VALUE));
187187
Assert.assertEquals(-1, fast.nextRetryMs(8, 0));
188188
Assert.assertEquals(-1, fast.nextRetryMs(8, Integer.MAX_VALUE));
189189

190-
RetryPolicy slow = config.getStatusCodeRetryPolicy(StatusCode.OVERLOADED);
190+
RetryPolicy slow = config.getStatusRetryPolicy(Status.of(StatusCode.OVERLOADED));
191191
assertDuration(500, 1000, slow.nextRetryMs(0, 0));
192192
assertDuration(500, 1000, slow.nextRetryMs(0, Integer.MAX_VALUE));
193193
assertDuration(500 * 64, 500 * 128, slow.nextRetryMs(7, 0));

topic/src/main/java/tech/ydb/topic/impl/GrpcStreamRetrier.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313
import tech.ydb.common.retry.RetryConfig;
1414
import tech.ydb.common.retry.RetryPolicy;
1515
import tech.ydb.core.Status;
16-
import tech.ydb.core.StatusCode;
1716

1817
/**
1918
* @author Nikolay Perfilov
2019
*/
2120
public abstract class GrpcStreamRetrier {
2221
public static final RetryConfig RETRY_ALL = new RetryConfig() {
2322
@Override
24-
public RetryPolicy getStatusCodeRetryPolicy(StatusCode code) {
23+
public RetryPolicy getStatusRetryPolicy(Status status) {
2524
return RETRY_ALL_POLICY;
2625
}
2726

@@ -128,7 +127,7 @@ protected void onSessionClosed(Status status, Throwable th) {
128127
} else {
129128
logger.warn("[{}] Error in {} stream session: {}", id, getStreamName(), status);
130129
}
131-
retryPolicy = retryConfig.getStatusCodeRetryPolicy(status.getCode());
130+
retryPolicy = retryConfig.getStatusRetryPolicy(status);
132131
}
133132

134133
if (isStopped.get()) {

0 commit comments

Comments
 (0)