This is an automated email from the ASF dual-hosted git repository.
xiangfu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 8e412b5 Disallow table creation with dot in the table name (#5714)
8e412b5 is described below
commit 8e412b5754bde73be0d3dd2de893d40fecbff2c1
Author: Xiang Fu <[email protected]>
AuthorDate: Mon Jul 20 20:02:10 2020 -0700
Disallow table creation with dot in the table name (#5714)
---
.../api/resources/PinotTableRestletResource.java | 4 ++++
.../controller/api/PinotTableRestletResourceTest.java | 11 +++++++++++
.../java/org/apache/pinot/core/util/TableConfigUtils.java | 14 ++++++++++++++
3 files changed, 29 insertions(+)
diff --git
a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotTableRestletResource.java
b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotTableRestletResource.java
index 08ec338..429a1de 100644
---
a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotTableRestletResource.java
+++
b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotTableRestletResource.java
@@ -112,7 +112,11 @@ public class PinotTableRestletResource {
TableConfig tableConfig;
try {
tableConfig = JsonUtils.stringToObject(tableConfigStr,
TableConfig.class);
+ // TableConfigUtils.validate(...) is used across table create/update.
TableConfigUtils.validate(tableConfig);
+ // TableConfigUtils.validateTableName(...) checks table name rules.
+ // So it won't effect already created tables.
+ TableConfigUtils.validateTableName(tableConfig);
} catch (Exception e) {
throw new ControllerApplicationException(LOGGER, e.getMessage(),
Response.Status.BAD_REQUEST, e);
}
diff --git
a/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotTableRestletResourceTest.java
b/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotTableRestletResourceTest.java
index 52ad0fa..d1cd559 100644
---
a/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotTableRestletResourceTest.java
+++
b/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotTableRestletResourceTest.java
@@ -96,6 +96,17 @@ public class PinotTableRestletResourceTest extends
ControllerTest {
Assert.assertTrue(e.getMessage().startsWith("Server returned HTTP
response code: 400"));
}
+ offlineTableConfig = _offlineBuilder.build();
+ offlineTableConfigJson = (ObjectNode) offlineTableConfig.toJsonNode();
+ offlineTableConfigJson.put(TableConfig.TABLE_NAME_KEY,
"bad.table.with.dot");
+ try {
+ sendPostRequest(_createTableUrl, offlineTableConfigJson.toString());
+ Assert.fail("Creation of an OFFLINE table with dot in the table name
does not fail");
+ } catch (IOException e) {
+ // Expected 400 Bad Request
+ Assert.assertTrue(e.getMessage().startsWith("Server returned HTTP
response code: 400"));
+ }
+
// Create an OFFLINE table with a valid name which should succeed
offlineTableConfig =
_offlineBuilder.setTableName("valid_table_name").build();
String offlineTableConfigString = offlineTableConfig.toJsonString();
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/util/TableConfigUtils.java
b/pinot-core/src/main/java/org/apache/pinot/core/util/TableConfigUtils.java
index 7dcb1b3..64336a2 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/util/TableConfigUtils.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/util/TableConfigUtils.java
@@ -56,6 +56,20 @@ public final class TableConfigUtils {
validateIngestionConfig(tableConfig.getIngestionConfig());
}
+ /**
+ * Validates the table name with the following rules:
+ * <ul>
+ * <li>Table name shouldn't contain dot in it</li>
+ * </ul>
+ */
+ public static void validateTableName(TableConfig tableConfig) {
+ String tableName = tableConfig.getTableName();
+ if (tableName.contains(".")) {
+ throw new IllegalStateException(
+ "Table name: '" + tableName + "' containing '.' is not allowed");
+ }
+ }
+
private static void validateValidationConfig(TableConfig tableConfig) {
SegmentsValidationAndRetentionConfig validationConfig =
tableConfig.getValidationConfig();
if (validationConfig != null) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]