This is an automated email from the ASF dual-hosted git repository.

lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new 20657050fb [rest] add requestId into errorMsg (#5426)
20657050fb is described below

commit 20657050fbb51f348797004be1f8cd2457288333
Author: Xiaohu <[email protected]>
AuthorDate: Wed Apr 9 15:21:58 2025 +0800

    [rest] add requestId into errorMsg (#5426)
---
 .../apache/paimon/rest/DefaultErrorHandler.java    | 12 ++++++++--
 .../java/org/apache/paimon/rest/ErrorHandler.java  |  4 ++--
 .../java/org/apache/paimon/rest/HttpClient.java    |  5 ++++-
 .../org/apache/paimon/catalog/CatalogTestBase.java |  2 +-
 .../paimon/rest/DefaultErrorHandlerTest.java       | 26 +++++++++++++---------
 5 files changed, 32 insertions(+), 17 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/rest/DefaultErrorHandler.java 
b/paimon-core/src/main/java/org/apache/paimon/rest/DefaultErrorHandler.java
index 551fa64aba..47654e7c9c 100644
--- a/paimon-core/src/main/java/org/apache/paimon/rest/DefaultErrorHandler.java
+++ b/paimon-core/src/main/java/org/apache/paimon/rest/DefaultErrorHandler.java
@@ -29,6 +29,8 @@ import 
org.apache.paimon.rest.exceptions.ServiceFailureException;
 import org.apache.paimon.rest.exceptions.ServiceUnavailableException;
 import org.apache.paimon.rest.responses.ErrorResponse;
 
+import static org.apache.paimon.rest.LoggingInterceptor.DEFAULT_REQUEST_ID;
+
 /** Default error handler. */
 public class DefaultErrorHandler extends ErrorHandler {
 
@@ -39,9 +41,15 @@ public class DefaultErrorHandler extends ErrorHandler {
     }
 
     @Override
-    public void accept(ErrorResponse error) {
+    public void accept(ErrorResponse error, String requestId) {
         int code = error.getCode();
-        String message = error.getMessage();
+        String message;
+        if (DEFAULT_REQUEST_ID.equals(requestId)) {
+            message = error.getMessage();
+        } else {
+            // if we have a requestId, append it to the message
+            message = String.format("%s requestId:%s", error.getMessage(), 
requestId);
+        }
         switch (code) {
             case 400:
                 throw new BadRequestException(String.format("%s", message));
diff --git a/paimon-core/src/main/java/org/apache/paimon/rest/ErrorHandler.java 
b/paimon-core/src/main/java/org/apache/paimon/rest/ErrorHandler.java
index cdfa4bcdfa..102db10fc0 100644
--- a/paimon-core/src/main/java/org/apache/paimon/rest/ErrorHandler.java
+++ b/paimon-core/src/main/java/org/apache/paimon/rest/ErrorHandler.java
@@ -20,7 +20,7 @@ package org.apache.paimon.rest;
 
 import org.apache.paimon.rest.responses.ErrorResponse;
 
-import java.util.function.Consumer;
+import java.util.function.BiConsumer;
 
 /** Error handler for REST client. */
-public abstract class ErrorHandler implements Consumer<ErrorResponse> {}
+public abstract class ErrorHandler implements BiConsumer<ErrorResponse, 
String> {}
diff --git a/paimon-core/src/main/java/org/apache/paimon/rest/HttpClient.java 
b/paimon-core/src/main/java/org/apache/paimon/rest/HttpClient.java
index b4ab074927..dca501b693 100644
--- a/paimon-core/src/main/java/org/apache/paimon/rest/HttpClient.java
+++ b/paimon-core/src/main/java/org/apache/paimon/rest/HttpClient.java
@@ -45,6 +45,8 @@ import java.util.function.Function;
 import static okhttp3.ConnectionSpec.CLEARTEXT;
 import static okhttp3.ConnectionSpec.COMPATIBLE_TLS;
 import static okhttp3.ConnectionSpec.MODERN_TLS;
+import static org.apache.paimon.rest.LoggingInterceptor.DEFAULT_REQUEST_ID;
+import static org.apache.paimon.rest.LoggingInterceptor.REQUEST_ID_KEY;
 import static org.apache.paimon.rest.RESTObjectMapper.OBJECT_MAPPER;
 
 /** HTTP client for REST catalog. */
@@ -199,7 +201,8 @@ public class HttpClient implements RESTClient {
                                             : "response body is null",
                                     response.code());
                 }
-                errorHandler.accept(error);
+                String requestId = response.header(REQUEST_ID_KEY, 
DEFAULT_REQUEST_ID);
+                errorHandler.accept(error, requestId);
             }
             if (responseType != null && responseBodyStr != null) {
                 return OBJECT_MAPPER.readValue(responseBodyStr, responseType);
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/catalog/CatalogTestBase.java 
b/paimon-core/src/test/java/org/apache/paimon/catalog/CatalogTestBase.java
index 2c7f8812ac..76674304c7 100644
--- a/paimon-core/src/test/java/org/apache/paimon/catalog/CatalogTestBase.java
+++ b/paimon-core/src/test/java/org/apache/paimon/catalog/CatalogTestBase.java
@@ -1222,7 +1222,7 @@ public abstract class CatalogTestBase {
         // alter table
         SchemaChange schemaChange = SchemaChange.addColumn("new_col", 
DataTypes.STRING());
         assertThatThrownBy(() -> catalog.alterTable(identifier, schemaChange, 
false))
-                .hasMessage("Only data table support alter table.");
+                .hasMessageContaining("Only data table support alter table.");
 
         // drop table
         catalog.dropTable(identifier, false);
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/rest/DefaultErrorHandlerTest.java 
b/paimon-core/src/test/java/org/apache/paimon/rest/DefaultErrorHandlerTest.java
index 42758799c4..c4b30a8726 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/rest/DefaultErrorHandlerTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/rest/DefaultErrorHandlerTest.java
@@ -34,6 +34,7 @@ import org.junit.Test;
 
 import java.io.IOException;
 
+import static org.apache.paimon.rest.LoggingInterceptor.DEFAULT_REQUEST_ID;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /** Test for {@link DefaultErrorHandler}. */
@@ -49,34 +50,37 @@ public class DefaultErrorHandlerTest {
     public void testHandleErrorResponse() {
         assertThrows(
                 BadRequestException.class,
-                () -> defaultErrorHandler.accept(generateErrorResponse(400)));
+                () -> defaultErrorHandler.accept(generateErrorResponse(400), 
DEFAULT_REQUEST_ID));
         assertThrows(
                 NotAuthorizedException.class,
-                () -> defaultErrorHandler.accept(generateErrorResponse(401)));
+                () -> defaultErrorHandler.accept(generateErrorResponse(401), 
DEFAULT_REQUEST_ID));
         assertThrows(
                 ForbiddenException.class,
-                () -> defaultErrorHandler.accept(generateErrorResponse(403)));
+                () -> defaultErrorHandler.accept(generateErrorResponse(403), 
DEFAULT_REQUEST_ID));
         assertThrows(
                 NoSuchResourceException.class,
-                () -> defaultErrorHandler.accept(generateErrorResponse(404)));
+                () -> defaultErrorHandler.accept(generateErrorResponse(404), 
DEFAULT_REQUEST_ID));
         assertThrows(
-                RESTException.class, () -> 
defaultErrorHandler.accept(generateErrorResponse(405)));
+                RESTException.class,
+                () -> defaultErrorHandler.accept(generateErrorResponse(405), 
DEFAULT_REQUEST_ID));
         assertThrows(
-                RESTException.class, () -> 
defaultErrorHandler.accept(generateErrorResponse(406)));
+                RESTException.class,
+                () -> defaultErrorHandler.accept(generateErrorResponse(406), 
DEFAULT_REQUEST_ID));
         assertThrows(
                 AlreadyExistsException.class,
-                () -> defaultErrorHandler.accept(generateErrorResponse(409)));
+                () -> defaultErrorHandler.accept(generateErrorResponse(409), 
DEFAULT_REQUEST_ID));
         assertThrows(
                 ServiceFailureException.class,
-                () -> defaultErrorHandler.accept(generateErrorResponse(500)));
+                () -> defaultErrorHandler.accept(generateErrorResponse(500), 
DEFAULT_REQUEST_ID));
         assertThrows(
                 NotImplementedException.class,
-                () -> defaultErrorHandler.accept(generateErrorResponse(501)));
+                () -> defaultErrorHandler.accept(generateErrorResponse(501), 
DEFAULT_REQUEST_ID));
         assertThrows(
-                RESTException.class, () -> 
defaultErrorHandler.accept(generateErrorResponse(502)));
+                RESTException.class,
+                () -> defaultErrorHandler.accept(generateErrorResponse(502), 
DEFAULT_REQUEST_ID));
         assertThrows(
                 ServiceUnavailableException.class,
-                () -> defaultErrorHandler.accept(generateErrorResponse(503)));
+                () -> defaultErrorHandler.accept(generateErrorResponse(503), 
DEFAULT_REQUEST_ID));
     }
 
     private ErrorResponse generateErrorResponse(int code) {

Reply via email to