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]

Reply via email to