in service/common/src/main/java/org/apache/polaris/service/exception/IcebergExceptionMapper.java [160:198]
static int mapExceptionToResponseCode(RuntimeException rex) {
for (Throwable t : ExceptionUtils.getThrowables(rex)) {
// Cloud exceptions can be wrapped by the Iceberg SDK
Optional<Integer> code = mapCloudExceptionToResponseCode(t);
if (code.isPresent()) {
return code.get();
}
}
return switch (rex) {
case NoSuchNamespaceException e -> Status.NOT_FOUND.getStatusCode();
case NoSuchIcebergTableException e -> Status.NOT_FOUND.getStatusCode();
case NoSuchTableException e -> Status.NOT_FOUND.getStatusCode();
case NoSuchViewException e -> Status.NOT_FOUND.getStatusCode();
case NotFoundException e -> Status.NOT_FOUND.getStatusCode();
case FileIOUnknownHostException e -> Status.NOT_FOUND.getStatusCode();
case AlreadyExistsException e -> Status.CONFLICT.getStatusCode();
case CommitFailedException e -> Status.CONFLICT.getStatusCode();
case UnprocessableEntityException e -> 422;
case CherrypickAncestorCommitException e -> Status.BAD_REQUEST.getStatusCode();
case CommitStateUnknownException e -> Status.BAD_REQUEST.getStatusCode();
case DuplicateWAPCommitException e -> Status.BAD_REQUEST.getStatusCode();
case ForbiddenException e -> Status.FORBIDDEN.getStatusCode();
case jakarta.ws.rs.ForbiddenException e -> Status.FORBIDDEN.getStatusCode();
case NotAuthorizedException e -> Status.UNAUTHORIZED.getStatusCode();
case NamespaceNotEmptyException e -> Status.BAD_REQUEST.getStatusCode();
case ValidationException e -> Status.BAD_REQUEST.getStatusCode();
case ServiceUnavailableException e -> Status.SERVICE_UNAVAILABLE.getStatusCode();
case RuntimeIOException e -> Status.SERVICE_UNAVAILABLE.getStatusCode();
case ServiceFailureException e -> Status.SERVICE_UNAVAILABLE.getStatusCode();
case CleanableFailure e -> Status.BAD_REQUEST.getStatusCode();
case RESTException e -> Status.SERVICE_UNAVAILABLE.getStatusCode();
case IllegalArgumentException e -> Status.BAD_REQUEST.getStatusCode();
case UnsupportedOperationException e -> Status.NOT_ACCEPTABLE.getStatusCode();
case WebApplicationException e -> e.getResponse().getStatus();
case TimeoutException e -> Status.REQUEST_TIMEOUT.getStatusCode();
default -> Status.INTERNAL_SERVER_ERROR.getStatusCode();
};
}