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");