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 <[email protected]> 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());
