dimas-b commented on code in PR #864:
URL: https://github.com/apache/polaris/pull/864#discussion_r1930988291


##########
service/common/src/main/java/org/apache/polaris/service/exception/IcebergExceptionMapper.java:
##########
@@ -144,4 +112,56 @@ public static boolean containsAnyAccessDeniedHint(String 
message) {
   public static Collection<String> getAccessDeniedHints() {
     return ImmutableSet.copyOf(ACCESS_DENIED_HINTS);
   }
+
+  static int mapExceptionToResponseCode(RuntimeException rex) {
+    // Cloud exceptions
+    if (rex instanceof S3Exception
+        || rex instanceof AzureException
+        || rex instanceof StorageException) {
+      if (doesAnyThrowableContainAccessDeniedHint(rex)) {
+        return Response.Status.FORBIDDEN.getStatusCode();
+      }
+
+      int httpCode =
+          switch (rex) {
+            case S3Exception s3e -> s3e.statusCode();
+            case HttpResponseException hre -> 
hre.getResponse().getStatusCode();
+            case StorageException se -> se.getCode();
+            default -> -1;
+          };
+
+      if (300 <= httpCode && httpCode <= 499) {
+        return httpCode;

Review Comment:
   I support the intention to avoid 5xx errors where those can be attributed to 
user mistakes. However, I believe the HTTP spec defines responses not from the 
user's perspective, but from the client's perspective. As such a client making 
a valid request that did not work because of previous calls (e.g. config 
changes) possibly made by other clients, is not a "bad request" (400), IMHO.
   
   WDYT about mapping 3xx to 422 (Unprocessable Content) instead?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to