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

xiangfu pushed a commit to branch new-pinot-admin-cmd
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git

commit 35d5d0a7da90440f9b0763446869a8784a3956c0
Author: Xiang Fu <[email protected]>
AuthorDate: Sat Jan 4 23:55:02 2020 -0800

    Update AddTableCommand to take schema file in order to creation pinot table 
in one line
---
 .../org/apache/pinot/tools/HybridQuickstart.java   |  2 -
 .../java/org/apache/pinot/tools/Quickstart.java    |  2 -
 .../org/apache/pinot/tools/RealtimeQuickStart.java |  2 -
 .../pinot/tools/admin/PinotAdministrator.java      |  1 +
 .../pinot/tools/admin/command/AddTableCommand.java | 82 +++++++++++++++-------
 .../tools/admin/command/GenerateDataCommand.java   |  2 +-
 .../tools/admin/command/QuickstartRunner.java      | 11 +--
 .../tools/query/comparison/ClusterStarter.java     |  3 +-
 8 files changed, 61 insertions(+), 44 deletions(-)

diff --git 
a/pinot-tools/src/main/java/org/apache/pinot/tools/HybridQuickstart.java 
b/pinot-tools/src/main/java/org/apache/pinot/tools/HybridQuickstart.java
index 68717cb..aa33073 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/HybridQuickstart.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/HybridQuickstart.java
@@ -130,8 +130,6 @@ public class HybridQuickstart {
     runner.createServerTenantWith(1, 1, "airline");
     printStatus(Color.YELLOW, "***** Creating a broker tenant with name 
'airline_broker' *****");
     runner.createBrokerTenantWith(2, "airline_broker");
-    printStatus(Color.YELLOW, "***** Adding airlineStats schema *****");
-    runner.addSchema();
     printStatus(Color.YELLOW, "***** Adding airlineStats offline and realtime 
table *****");
     runner.addTable();
     printStatus(Color.YELLOW, "***** Building index segment for airlineStats 
*****");
diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/Quickstart.java 
b/pinot-tools/src/main/java/org/apache/pinot/tools/Quickstart.java
index d7d0bf5..9427b52 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/Quickstart.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/Quickstart.java
@@ -146,8 +146,6 @@ public class Quickstart {
 
     printStatus(Color.CYAN, "***** Starting Zookeeper, controller, broker and 
server *****");
     runner.startAll();
-    printStatus(Color.CYAN, "***** Adding baseballStats schema *****");
-    runner.addSchema();
     printStatus(Color.CYAN, "***** Adding baseballStats table *****");
     runner.addTable();
     printStatus(Color.CYAN, "***** Building index segment for baseballStats 
*****");
diff --git 
a/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeQuickStart.java 
b/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeQuickStart.java
index 1492355..82f76e2 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeQuickStart.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeQuickStart.java
@@ -84,8 +84,6 @@ public class RealtimeQuickStart {
 
     printStatus(Color.CYAN, "***** Starting Zookeeper, controller, server and 
broker *****");
     runner.startAll();
-    printStatus(Color.CYAN, "***** Adding meetupRSVP schema *****");
-    runner.addSchema();
     printStatus(Color.CYAN, "***** Adding meetupRSVP table *****");
     runner.addTable();
     printStatus(Color.CYAN, "***** Starting meetup data stream and publishing 
to Kafka *****");
diff --git 
a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/PinotAdministrator.java
 
b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/PinotAdministrator.java
index 9684cca..5fd2ccb 100644
--- 
a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/PinotAdministrator.java
+++ 
b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/PinotAdministrator.java
@@ -97,6 +97,7 @@ public class PinotAdministrator {
       @SubCommand(name = "ChangeTableState", impl = ChangeTableState.class),
       @SubCommand(name = "AddTenant", impl = AddTenantCommand.class),
       @SubCommand(name = "AddSchema", impl = AddSchemaCommand.class),
+      @SubCommand(name = "UpdateSchema", impl = AddSchemaCommand.class),
       @SubCommand(name = "UploadSegment", impl = UploadSegmentCommand.class),
       @SubCommand(name = "PostQuery", impl = PostQueryCommand.class),
       @SubCommand(name = "StopProcess", impl = StopProcessCommand.class),
diff --git 
a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/AddTableCommand.java
 
b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/AddTableCommand.java
index d035f10..4106e47 100644
--- 
a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/AddTableCommand.java
+++ 
b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/AddTableCommand.java
@@ -20,10 +20,13 @@ package org.apache.pinot.tools.admin.command;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
-import org.apache.pinot.spi.utils.JsonUtils;
+import org.apache.pinot.common.utils.FileUploadDownloadClient;
 import org.apache.pinot.common.utils.NetUtil;
 import org.apache.pinot.controller.helix.ControllerRequestURLBuilder;
+import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.spi.utils.JsonUtils;
 import org.apache.pinot.tools.Command;
 import org.kohsuke.args4j.Option;
 import org.slf4j.Logger;
@@ -37,8 +40,11 @@ import org.slf4j.LoggerFactory;
 public class AddTableCommand extends AbstractBaseAdminCommand implements 
Command {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(AddTableCommand.class);
 
-  @Option(name = "-filePath", required = true, metaVar = "<string>", usage = 
"Path to the request.json file")
-  private String _filePath;
+  @Option(name = "-tableConfigFile", required = true, metaVar = "<string>", 
aliases = {"-tableConf", "-tableConfig", "-filePath"}, usage = "Path to table 
config file.")
+  private String _tableConfigFile;
+
+  @Option(name = "-schemaFile", required = false, metaVar = "<string>", 
aliases = {"-schema"}, usage = "Path to table schema file.")
+  private String _schemaFile = null;
 
   @Option(name = "-controllerHost", required = false, metaVar = "<String>", 
usage = "host name for controller.")
   private String _controllerHost;
@@ -61,29 +67,33 @@ public class AddTableCommand extends 
AbstractBaseAdminCommand implements Command
 
   @Override
   public String getName() {
-    return "AddTable";
+    return "AddTableV2";
   }
 
   @Override
   public String description() {
-    return "Add table specified in the json file, to the controller.";
+    return "Create Pinot table with table config and schema.";
   }
 
   @Override
   public String toString() {
-    String retString = ("AddTable -filePath " + _filePath + " -controllerHost 
" + _controllerHost + " -controllerPort "
-        + _controllerPort);
-
+    String retString =
+        ("AddTable -tableConfigFile " + _tableConfigFile + " -schemaFile " + 
_schemaFile + " -controllerHost "
+            + _controllerHost + " -controllerPort " + _controllerPort);
     return ((_exec) ? (retString + " -exec") : retString);
   }
 
   @Override
   public void cleanup() {
+  }
 
+  public AddTableCommand setTableConfigFile(String tableConfigFile) {
+    _tableConfigFile = tableConfigFile;
+    return this;
   }
 
-  public AddTableCommand setFilePath(String filePath) {
-    _filePath = filePath;
+  public AddTableCommand setSchemaFile(String schemaFile) {
+    _schemaFile = schemaFile;
     return this;
   }
 
@@ -102,33 +112,51 @@ public class AddTableCommand extends 
AbstractBaseAdminCommand implements Command
     return this;
   }
 
-  public boolean execute(JsonNode node)
+  public boolean sendTableCreationRequest(JsonNode node)
       throws IOException {
-    if (_controllerHost == null) {
-      _controllerHost = NetUtil.getHostAddress();
-    }
-    _controllerAddress = "http://"; + _controllerHost + ":" + _controllerPort;
+    String res = AbstractBaseAdminCommand
+        
.sendPostRequest(ControllerRequestURLBuilder.baseUrl(_controllerAddress).forTableCreate(),
 node.toString());
+    LOGGER.info(res);
+    return res.contains("succesfully added");
+  }
 
+  @Override
+  public boolean execute()
+      throws Exception {
     if (!_exec) {
       LOGGER.warn("Dry Running Command: " + toString());
       LOGGER.warn("Use the -exec option to actually execute the command.");
       return true;
     }
 
-    LOGGER.info("Executing command: " + toString());
-    String res = AbstractBaseAdminCommand
-        
.sendPostRequest(ControllerRequestURLBuilder.baseUrl(_controllerAddress).forTableCreate(),
 node.toString());
+    if (_controllerHost == null) {
+      _controllerHost = NetUtil.getHostAddress();
+    }
+    _controllerAddress = "http://"; + _controllerHost + ":" + _controllerPort;
 
-    LOGGER.info(res);
-    if (res.contains("succesfully added")) {
-      return true;
+    LOGGER.info("Executing command: " + toString());
+    // Backward compatible
+    if (_schemaFile != null) {
+      File schemaFile = new File(_schemaFile);
+      if (!schemaFile.exists()) {
+        throw new FileNotFoundException("schema file does not exist: " + 
_schemaFile);
+      }
+
+      Schema schema = Schema.fromFile(schemaFile);
+      try (FileUploadDownloadClient fileUploadDownloadClient = new 
FileUploadDownloadClient()) {
+        fileUploadDownloadClient.addSchema(
+            FileUploadDownloadClient.getUploadSchemaHttpURI(_controllerHost, 
Integer.parseInt(_controllerPort)),
+            schema.getSchemaName(), schemaFile);
+      } catch (Exception e) {
+        LOGGER.error("Got Exception to upload Pinot Schema: " + 
schema.getSchemaName(), e);
+        throw e;
+      }
+    }
+    File tableConfigFile = new File(_tableConfigFile);
+    if (!tableConfigFile.exists()) {
+      throw new FileNotFoundException("table config file does not exist: " + 
_tableConfigFile);
     }
-    return false;
-  }
 
-  @Override
-  public boolean execute()
-      throws Exception {
-    return execute(JsonUtils.fileToJsonNode(new File(_filePath)));
+    return sendTableCreationRequest(JsonUtils.fileToJsonNode(tableConfigFile));
   }
 }
diff --git 
a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/GenerateDataCommand.java
 
b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/GenerateDataCommand.java
index e46dcae..19ff1ce 100644
--- 
a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/GenerateDataCommand.java
+++ 
b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/GenerateDataCommand.java
@@ -101,7 +101,7 @@ public class GenerateDataCommand extends 
AbstractBaseAdminCommand implements Com
 
   @Override
   public String description() {
-    return "Generate random data as per the provided scema";
+    return "Generate random data as per the provided schema";
   }
 
   @Override
diff --git 
a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/QuickstartRunner.java
 
b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/QuickstartRunner.java
index 11c860e..549ac52 100644
--- 
a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/QuickstartRunner.java
+++ 
b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/QuickstartRunner.java
@@ -153,18 +153,11 @@ public class QuickstartRunner {
         
.setInstances(number).setRole(TenantRole.BROKER).setExecute(true).execute();
   }
 
-  public void addSchema()
-      throws Exception {
-    for (QuickstartTableRequest request : _tableRequests) {
-      new 
AddSchemaCommand().setControllerPort(String.valueOf(_controllerPorts.get(0)))
-          
.setSchemaFilePath(request.getSchemaFile().getAbsolutePath()).setExecute(true).execute();
-    }
-  }
-
   public void addTable()
       throws Exception {
     for (QuickstartTableRequest request : _tableRequests) {
-      new 
AddTableCommand().setFilePath(request.getTableRequestFile().getAbsolutePath())
+      new 
AddTableCommand().setSchemaFile(request.getSchemaFile().getAbsolutePath())
+          .setTableConfigFile(request.getTableRequestFile().getAbsolutePath())
           
.setControllerPort(String.valueOf(_controllerPorts.get(0))).setExecute(true).execute();
     }
   }
diff --git 
a/pinot-tools/src/main/java/org/apache/pinot/tools/query/comparison/ClusterStarter.java
 
b/pinot-tools/src/main/java/org/apache/pinot/tools/query/comparison/ClusterStarter.java
index bc7eb7a..b2840ab 100644
--- 
a/pinot-tools/src/main/java/org/apache/pinot/tools/query/comparison/ClusterStarter.java
+++ 
b/pinot-tools/src/main/java/org/apache/pinot/tools/query/comparison/ClusterStarter.java
@@ -192,7 +192,8 @@ public class ClusterStarter {
       throws Exception {
     if (_tableConfigFile != null) {
       AddTableCommand addTableCommand =
-          new 
AddTableCommand().setControllerPort(_controllerPort).setFilePath(_tableConfigFile).setExecute(true);
+          new AddTableCommand().setControllerPort(_controllerPort)
+              
.setSchemaFile(_schemaFileName).setTableConfigFile(_tableConfigFile).setExecute(true);
       addTableCommand.execute();
       return;
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to