You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by bl...@apache.org on 2022/09/03 19:09:50 UTC
[iceberg] 09/09: Core: Add CommitStateUnknownException handling to REST (#5694)
This is an automated email from the ASF dual-hosted git repository.
blue pushed a commit to branch 0.14.x
in repository https://gitbox.apache.org/repos/asf/iceberg.git
commit 3c9600f899cdd57ffcc78f46bac59c51b11af7a4
Author: Ryan Blue <bl...@apache.org>
AuthorDate: Fri Sep 2 12:50:39 2022 -0700
Core: Add CommitStateUnknownException handling to REST (#5694)
---
.../apache/iceberg/exceptions/ServiceFailureException.java | 10 ++++------
...lureException.java => ServiceUnavailableException.java} | 14 ++++++--------
.../main/java/org/apache/iceberg/rest/ErrorHandlers.java | 12 ++++++++++--
3 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/api/src/main/java/org/apache/iceberg/exceptions/ServiceFailureException.java b/api/src/main/java/org/apache/iceberg/exceptions/ServiceFailureException.java
index 9049d725ef..b8ef3b411a 100644
--- a/api/src/main/java/org/apache/iceberg/exceptions/ServiceFailureException.java
+++ b/api/src/main/java/org/apache/iceberg/exceptions/ServiceFailureException.java
@@ -21,17 +21,15 @@ package org.apache.iceberg.exceptions;
import com.google.errorprone.annotations.FormatMethod;
-/**
- * Exception thrown on HTTP 5XX Server Error.
- */
-public class ServiceFailureException extends RuntimeException {
+/** Exception thrown on HTTP 5XX Server Error. */
+public class ServiceFailureException extends RESTException {
@FormatMethod
public ServiceFailureException(String message, Object... args) {
- super(String.format(message, args));
+ super(message, args);
}
@FormatMethod
public ServiceFailureException(Throwable cause, String message, Object... args) {
- super(String.format(message, args), cause);
+ super(cause, message, args);
}
}
diff --git a/api/src/main/java/org/apache/iceberg/exceptions/ServiceFailureException.java b/api/src/main/java/org/apache/iceberg/exceptions/ServiceUnavailableException.java
similarity index 72%
copy from api/src/main/java/org/apache/iceberg/exceptions/ServiceFailureException.java
copy to api/src/main/java/org/apache/iceberg/exceptions/ServiceUnavailableException.java
index 9049d725ef..74877214ac 100644
--- a/api/src/main/java/org/apache/iceberg/exceptions/ServiceFailureException.java
+++ b/api/src/main/java/org/apache/iceberg/exceptions/ServiceUnavailableException.java
@@ -21,17 +21,15 @@ package org.apache.iceberg.exceptions;
import com.google.errorprone.annotations.FormatMethod;
-/**
- * Exception thrown on HTTP 5XX Server Error.
- */
-public class ServiceFailureException extends RuntimeException {
+/** Exception thrown on HTTP 503: service is unavailable */
+public class ServiceUnavailableException extends RESTException {
@FormatMethod
- public ServiceFailureException(String message, Object... args) {
- super(String.format(message, args));
+ public ServiceUnavailableException(String message, Object... args) {
+ super(message, args);
}
@FormatMethod
- public ServiceFailureException(Throwable cause, String message, Object... args) {
- super(String.format(message, args), cause);
+ public ServiceUnavailableException(Throwable cause, String message, Object... args) {
+ super(cause, message, args);
}
}
diff --git a/core/src/main/java/org/apache/iceberg/rest/ErrorHandlers.java b/core/src/main/java/org/apache/iceberg/rest/ErrorHandlers.java
index d72ee460aa..33cce5dd96 100644
--- a/core/src/main/java/org/apache/iceberg/rest/ErrorHandlers.java
+++ b/core/src/main/java/org/apache/iceberg/rest/ErrorHandlers.java
@@ -23,12 +23,14 @@ import java.util.function.Consumer;
import org.apache.iceberg.exceptions.AlreadyExistsException;
import org.apache.iceberg.exceptions.BadRequestException;
import org.apache.iceberg.exceptions.CommitFailedException;
+import org.apache.iceberg.exceptions.CommitStateUnknownException;
import org.apache.iceberg.exceptions.ForbiddenException;
import org.apache.iceberg.exceptions.NoSuchNamespaceException;
import org.apache.iceberg.exceptions.NoSuchTableException;
import org.apache.iceberg.exceptions.NotAuthorizedException;
import org.apache.iceberg.exceptions.RESTException;
import org.apache.iceberg.exceptions.ServiceFailureException;
+import org.apache.iceberg.exceptions.ServiceUnavailableException;
import org.apache.iceberg.rest.responses.ErrorResponse;
/**
@@ -59,6 +61,10 @@ public class ErrorHandlers {
throw new NoSuchTableException("%s", error.message());
case 409:
throw new CommitFailedException("Commit failed: %s", error.message());
+ case 500:
+ case 504:
+ throw new CommitStateUnknownException(
+ new ServiceFailureException("Service failed: %s: %s", error.code(), error.message()));
}
};
}
@@ -115,10 +121,12 @@ public class ErrorHandlers {
case 405:
case 406:
break;
- case 501:
- throw new UnsupportedOperationException(error.message());
case 500:
throw new ServiceFailureException("Server error: %s: %s", error.type(), error.message());
+ case 501:
+ throw new UnsupportedOperationException(error.message());
+ case 503:
+ throw new ServiceUnavailableException("Service unavailable: %s", error.message());
}
throw new RESTException("Unable to process: %s", error.message());