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) {