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

yuqi1129 pushed a commit to branch cherry-pick-8f19ee03-to-branch-1.3
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to 
refs/heads/cherry-pick-8f19ee03-to-branch-1.3 by this push:
     new f3cf6f6145 fix: resolve null request validation backport conflicts for 
branch-1.3
f3cf6f6145 is described below

commit f3cf6f61452d299fd4e9c3df32c5a07f2ba90da3
Author: yuqi <[email protected]>
AuthorDate: Wed Nov 4 09:36:50 2026 +0800

    fix: resolve null request validation backport conflicts for branch-1.3
---
 .../gravitino/dto/requests/TableCreateRequest.java | 10 ++--
 .../dto/requests/TableUpdatesRequest.java          |  6 +--
 .../gravitino/dto/requests/ViewUpdatesRequest.java |  6 +--
 .../server/web/rest/MetalakeOperations.java        |  5 --
 .../server/web/rest/TestTableOperations.java       | 56 ++--------------------
 5 files changed, 11 insertions(+), 72 deletions(-)

diff --git 
a/common/src/main/java/org/apache/gravitino/dto/requests/TableCreateRequest.java
 
b/common/src/main/java/org/apache/gravitino/dto/requests/TableCreateRequest.java
index 3f1f61c154..a5a663da4c 100644
--- 
a/common/src/main/java/org/apache/gravitino/dto/requests/TableCreateRequest.java
+++ 
b/common/src/main/java/org/apache/gravitino/dto/requests/TableCreateRequest.java
@@ -124,15 +124,13 @@ public class TableCreateRequest implements RESTRequest {
     Preconditions.checkArgument(
         StringUtils.isNotBlank(name), "\"name\" field is required and cannot 
be empty");
 
-<<<<<<< HEAD
-=======
+    Preconditions.checkArgument(
+        columns != null, "\"columns\" field is required and cannot be null");
+    RequestValidation.elements(columns, "columns");
     RequestValidation.elements(partitioning, "partitioning");
+    RequestValidation.elements(sortOrders, "sortOrders");
     RequestValidation.elements(indexes, "indexes");
 
-    // DTO conversion can normalize null literals and discard their declared 
types.
-    WritableDataTypeValidator.validateTable(columns, partitioning, 
distribution, sortOrders);
-
->>>>>>> 8f19ee03c ([#14580] fix(rest): validate null request fields before 
dispatch (#14582))
     if (sortOrders != null) {
       Arrays.stream(sortOrders).forEach(sortOrder -> 
sortOrder.validate(columns));
     }
diff --git 
a/common/src/main/java/org/apache/gravitino/dto/requests/TableUpdatesRequest.java
 
b/common/src/main/java/org/apache/gravitino/dto/requests/TableUpdatesRequest.java
index aada638f16..a441fc14b2 100644
--- 
a/common/src/main/java/org/apache/gravitino/dto/requests/TableUpdatesRequest.java
+++ 
b/common/src/main/java/org/apache/gravitino/dto/requests/TableUpdatesRequest.java
@@ -58,13 +58,9 @@ public class TableUpdatesRequest implements RESTRequest {
   public void validate() throws IllegalArgumentException {
     Preconditions.checkArgument(updates != null, "updates must not be null");
     Preconditions.checkArgument(!updates.isEmpty(), "updates must not be 
empty");
-<<<<<<< HEAD
-    updates.forEach(RESTRequest::validate);
-=======
     for (int i = 0; i < updates.size(); i++) {
       Preconditions.checkArgument(updates.get(i) != null, "updates[%s] must 
not be null", i);
-      updates.get(i).validateWithPrefix("updates[" + i + "].");
+      updates.get(i).validate();
     }
->>>>>>> 8f19ee03c ([#14580] fix(rest): validate null request fields before 
dispatch (#14582))
   }
 }
diff --git 
a/common/src/main/java/org/apache/gravitino/dto/requests/ViewUpdatesRequest.java
 
b/common/src/main/java/org/apache/gravitino/dto/requests/ViewUpdatesRequest.java
index bca80edad3..c10df98511 100644
--- 
a/common/src/main/java/org/apache/gravitino/dto/requests/ViewUpdatesRequest.java
+++ 
b/common/src/main/java/org/apache/gravitino/dto/requests/ViewUpdatesRequest.java
@@ -53,13 +53,9 @@ public class ViewUpdatesRequest implements RESTRequest {
   public void validate() throws IllegalArgumentException {
     Preconditions.checkArgument(updates != null, "updates must not be null");
     Preconditions.checkArgument(!updates.isEmpty(), "updates must not be 
empty");
-<<<<<<< HEAD
-    updates.forEach(RESTRequest::validate);
-=======
     for (int i = 0; i < updates.size(); i++) {
       Preconditions.checkArgument(updates.get(i) != null, "updates[%s] must 
not be null", i);
-      updates.get(i).validateWithPrefix("updates[" + i + "].");
+      updates.get(i).validate();
     }
->>>>>>> 8f19ee03c ([#14580] fix(rest): validate null request fields before 
dispatch (#14582))
   }
 }
diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/MetalakeOperations.java
 
b/server/src/main/java/org/apache/gravitino/server/web/rest/MetalakeOperations.java
index 56e0d7c107..a16e462877 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/MetalakeOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/MetalakeOperations.java
@@ -189,17 +189,12 @@ public class MetalakeOperations {
     }
 
     LOG.info("Received set request for metalake: {}", metalakeName);
-<<<<<<< HEAD
-=======
     try {
       request.validate();
     } catch (IllegalArgumentException e) {
       return ExceptionHandlers.handleMetalakeException(OperationType.SET, 
metalakeName, e);
     }
 
-    OperationType op = request.isInUse() ? OperationType.ENABLE : 
OperationType.DISABLE;
-
->>>>>>> 8f19ee03c ([#14580] fix(rest): validate null request fields before 
dispatch (#14582))
     try {
       return Utils.doAs(
           httpRequest,
diff --git 
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestTableOperations.java
 
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestTableOperations.java
index c08d7e7071..824b356a90 100644
--- 
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestTableOperations.java
+++ 
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestTableOperations.java
@@ -154,57 +154,15 @@ public class TestTableOperations extends 
BaseOperationsTest {
     return resourceConfig;
   }
 
-  @Test
-<<<<<<< HEAD
-=======
-  public void testRejectUnresolvedTypesBeforeDispatch() {
-    String[] columns = {
-      "{\"name\":\"c\",\"type\":\"future_type\"}",
-      "{\"name\":\"c\",\"type\":{\"type\":\"external\",\"catalogString\":\" 
\"}}",
-      
"{\"name\":\"c\",\"type\":\"string\",\"defaultValue\":{\"type\":\"literal\",\"dataType\":\"future_type\",\"value\":null}}"
-    };
-    for (String column : columns) {
-      String json = "{\"name\":\"t\",\"columns\":[" + column + "]}";
-      try (Response response =
-          target(tablePath(metalake, catalog, schema))
-              .request(MediaType.APPLICATION_JSON_TYPE)
-              .accept("application/vnd.gravitino.v1+json")
-              .post(Entity.json(json))) {
-        Assertions.assertEquals(Status.BAD_REQUEST.getStatusCode(), 
response.getStatus());
-        Assertions.assertTrue(
-            
response.readEntity(ErrorResponse.class).getMessage().contains("columns[0]"));
-      }
-    }
-    String update =
-        """
-        {"updates":[{"@type":"updateColumnDefaultValue","fieldName":["c"],
-          "newDefaultValue":{"type":"function","funcName":"f","funcArgs":[
-            {"type":"literal","dataType":"future_type","value":null}]}}]}
-        """;
-    try (Response response =
-        target(tablePath(metalake, catalog, schema) + "t")
-            .request(MediaType.APPLICATION_JSON_TYPE)
-            .accept("application/vnd.gravitino.v1+json")
-            .put(Entity.json(update))) {
-      Assertions.assertEquals(Status.BAD_REQUEST.getStatusCode(), 
response.getStatus());
-      Assertions.assertTrue(
-          response
-              .readEntity(ErrorResponse.class)
-              .getMessage()
-              .contains("updates[0].newDefaultValue.funcArgs[0].dataType"));
-    }
-    Mockito.verifyNoInteractions(dispatcher);
-  }
-
   @Test
   public void testRejectNullTableInputsBeforeDispatch() {
     String[][] invalidRequests = {
-      {"{\"name\":\"t\"}", "columns"},
-      {"{\"name\":\"t\",\"columns\":null}", "columns"},
-      {"{\"name\":\"t\",\"columns\":[null]}", "columns[0]"},
+      {"{\"name\":\"t\"}", "\"columns\" field is required and cannot be null"},
+      {"{\"name\":\"t\",\"columns\":null}", "\"columns\" field is required and 
cannot be null"},
+      {"{\"name\":\"t\",\"columns\":[null]}", "columns[0] must not be null"},
       {
         
"{\"name\":\"t\",\"columns\":[{\"name\":\"c\",\"type\":\"string\"}],\"sortOrders\":[null]}",
-        "sortOrders[0]"
+        "sortOrders[0] must not be null"
       }
     };
     for (String[] invalidRequest : invalidRequests) {
@@ -215,17 +173,13 @@ public class TestTableOperations extends 
BaseOperationsTest {
               .post(Entity.json(invalidRequest[0]))) {
         Assertions.assertEquals(Status.BAD_REQUEST.getStatusCode(), 
response.getStatus());
         Assertions.assertTrue(
-            response
-                .readEntity(ErrorResponse.class)
-                .getMessage()
-                .contains("\"" + invalidRequest[1] + "\" field is required and 
cannot be null"));
+            
response.readEntity(ErrorResponse.class).getMessage().contains(invalidRequest[1]));
       }
     }
     Mockito.verifyNoInteractions(dispatcher);
   }
 
   @Test
->>>>>>> 8f19ee03c ([#14580] fix(rest): validate null request fields before 
dispatch (#14582))
   public void testListTables() {
     NameIdentifier table1 = NameIdentifier.of(metalake, catalog, schema, 
"table1");
     NameIdentifier table2 = NameIdentifier.of(metalake, catalog, schema, 
"table2");

Reply via email to