Skip to content

Commit 42a1571

Browse files
committed
Add SocketException and 'insufficient data written' to retryable exceptions
1 parent 8acf3c3 commit 42a1571

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

gcloud-java-core/src/main/java/com/google/cloud/BaseServiceException.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import java.io.IOException;
2525
import java.io.Serializable;
26+
import java.net.SocketException;
2627
import java.net.SocketTimeoutException;
2728
import java.util.Collections;
2829
import java.util.Objects;
@@ -187,7 +188,10 @@ protected boolean isRetryable(boolean idempotent, Error error) {
187188
}
188189

189190
protected boolean isRetryable(boolean idempotent, IOException exception) {
190-
return idempotent && exception instanceof SocketTimeoutException;
191+
boolean exceptionIsRetryable = exception instanceof SocketTimeoutException
192+
|| exception instanceof SocketException
193+
|| "insufficient data written".equals(exception.getMessage());
194+
return idempotent && exceptionIsRetryable;
191195
}
192196

193197
/**

gcloud-java-core/src/test/java/com/google/cloud/BaseServiceExceptionTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.junit.Test;
3333

3434
import java.io.IOException;
35+
import java.net.SocketException;
3536
import java.net.SocketTimeoutException;
3637
import java.util.Set;
3738

@@ -101,6 +102,21 @@ public void testBaseServiceException() {
101102
serviceException = new BaseServiceException(exception, true);
102103
assertTrue(serviceException.retryable());
103104
assertTrue(serviceException.idempotent());
105+
assertNull(serviceException.getMessage());
106+
assertEquals(exception, serviceException.getCause());
107+
108+
exception = new SocketException();
109+
serviceException = new BaseServiceException(exception, true);
110+
assertTrue(serviceException.retryable());
111+
assertTrue(serviceException.idempotent());
112+
assertNull(serviceException.getMessage());
113+
assertEquals(exception, serviceException.getCause());
114+
115+
exception = new IOException("insufficient data written");
116+
serviceException = new BaseServiceException(exception, true);
117+
assertTrue(serviceException.retryable());
118+
assertTrue(serviceException.idempotent());
119+
assertEquals("insufficient data written", serviceException.getMessage());
104120
assertEquals(exception, serviceException.getCause());
105121

106122
GoogleJsonError error = new GoogleJsonError();

0 commit comments

Comments
 (0)