You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by xi...@apache.org on 2021/05/19 07:23:32 UTC

[incubator-pinot] branch master updated: Update Quickstart to take tmp dir as a parameter (#5445)

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 1b0bb72  Update Quickstart to take tmp dir as a parameter (#5445)
1b0bb72 is described below

commit 1b0bb7212dc3dd577e72aea9b9a9ba849d6642f8
Author: Xiang Fu <xi...@gmail.com>
AuthorDate: Wed May 19 00:23:16 2021 -0700

    Update Quickstart to take tmp dir as a parameter (#5445)
---
 .../pinot/tools/BatchQuickstartWithMinion.java     | 11 ++--
 .../org/apache/pinot/tools/HybridQuickstart.java   | 17 +++---
 .../org/apache/pinot/tools/JoinQuickStart.java     | 17 +++---
 .../apache/pinot/tools/JsonIndexQuickStart.java    | 15 ++++--
 .../OfflineComplexTypeHandlingQuickStart.java      | 15 ++++--
 ...ickstartWithMinion.java => QuickStartBase.java} | 23 ++++----
 .../java/org/apache/pinot/tools/Quickstart.java    | 16 ++++--
 .../RealtimeComplexTypeHandlingQuickStart.java     | 15 ++++--
 .../pinot/tools/RealtimeJsonIndexQuickStart.java   | 15 ++++--
 .../org/apache/pinot/tools/RealtimeQuickStart.java | 16 +++---
 .../org/apache/pinot/tools/UpsertQuickStart.java   | 15 ++++--
 .../tools/admin/command/QuickStartCommand.java     | 62 ++++++++++++++++++++--
 12 files changed, 166 insertions(+), 71 deletions(-)

diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/BatchQuickstartWithMinion.java b/pinot-tools/src/main/java/org/apache/pinot/tools/BatchQuickstartWithMinion.java
index 37deaa8..c7267fc 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/BatchQuickstartWithMinion.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/BatchQuickstartWithMinion.java
@@ -18,7 +18,10 @@
  */
 package org.apache.pinot.tools;
 
-import org.apache.pinot.spi.plugin.PluginManager;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.apache.pinot.tools.admin.PinotAdministrator;
 
 
 public class BatchQuickstartWithMinion extends Quickstart {
@@ -34,7 +37,9 @@ public class BatchQuickstartWithMinion extends Quickstart {
 
   public static void main(String[] args)
       throws Exception {
-    PluginManager.get().init();
-    new BatchQuickstartWithMinion().execute();
+    List<String> arguments = new ArrayList<>();
+    arguments.addAll(Arrays.asList("QuickStart", "-type", "BATCH-MINION"));
+    arguments.addAll(Arrays.asList(args));
+    PinotAdministrator.main(arguments.toArray(new String[arguments.size()]));
   }
 }
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 a2f2a8a..cba6277 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
@@ -23,15 +23,18 @@ import com.google.common.collect.Lists;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import org.apache.commons.io.FileUtils;
 import org.apache.pinot.common.utils.ZkStarter;
 import org.apache.pinot.spi.config.table.TableConfig;
 import org.apache.pinot.spi.data.Schema;
-import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.spi.stream.StreamDataProvider;
 import org.apache.pinot.spi.stream.StreamDataServerStartable;
 import org.apache.pinot.spi.utils.JsonUtils;
 import org.apache.pinot.tools.Quickstart.Color;
+import org.apache.pinot.tools.admin.PinotAdministrator;
 import org.apache.pinot.tools.admin.command.QuickstartRunner;
 import org.apache.pinot.tools.streams.AirlineDataStream;
 import org.apache.pinot.tools.utils.KafkaStarterUtils;
@@ -40,7 +43,7 @@ import static org.apache.pinot.tools.Quickstart.prettyPrintResponse;
 import static org.apache.pinot.tools.Quickstart.printStatus;
 
 
-public class HybridQuickstart {
+public class HybridQuickstart extends QuickStartBase {
   private StreamDataServerStartable _kafkaStarter;
   private ZkStarter.ZookeeperInstance _zookeeperInstance;
   private File _schemaFile;
@@ -50,10 +53,10 @@ public class HybridQuickstart {
 
   public static void main(String[] args)
       throws Exception {
-    // TODO: Explicitly call below method to load dependencies from pinot-plugins libs which are excluded from pinot-tools packaging.
-    // E.g. Kafka related libs are coming from pinot-kafka-* lib, avro libs are coming from pinot-avro lib.
-    PluginManager.get().init();
-    new HybridQuickstart().execute();
+    List<String> arguments = new ArrayList<>();
+    arguments.addAll(Arrays.asList("QuickStart", "-type", "HYBRID"));
+    arguments.addAll(Arrays.asList(args));
+    PinotAdministrator.main(arguments.toArray(new String[arguments.size()]));
   }
 
   private QuickstartTableRequest prepareTableRequest(File baseDir)
@@ -101,7 +104,7 @@ public class HybridQuickstart {
 
   public void execute()
       throws Exception {
-    File quickstartTmpDir = new File(FileUtils.getTempDirectory(), String.valueOf(System.currentTimeMillis()));
+    File quickstartTmpDir = new File(_tmpDir, String.valueOf(System.currentTimeMillis()));
     File baseDir = new File(quickstartTmpDir, "airlineStats");
     File dataDir = new File(baseDir, "data");
     Preconditions.checkState(dataDir.mkdirs());
diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/JoinQuickStart.java b/pinot-tools/src/main/java/org/apache/pinot/tools/JoinQuickStart.java
index d6cd44e..fe25759 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/JoinQuickStart.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/JoinQuickStart.java
@@ -22,19 +22,22 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import java.io.File;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import org.apache.commons.io.FileUtils;
-import org.apache.pinot.spi.plugin.PluginManager;
+import org.apache.pinot.tools.admin.PinotAdministrator;
 import org.apache.pinot.tools.admin.command.QuickstartRunner;
 
 import static org.apache.pinot.tools.Quickstart.prettyPrintResponse;
 import static org.apache.pinot.tools.Quickstart.printStatus;
 
 
-public class JoinQuickStart {
+public class JoinQuickStart extends QuickStartBase {
 
-  private void execute()
+  public void execute()
       throws Exception {
-    File quickstartTmpDir = new File(FileUtils.getTempDirectory(), String.valueOf(System.currentTimeMillis()));
+    File quickstartTmpDir = new File(_tmpDir, String.valueOf(System.currentTimeMillis()));
 
     // Baseball stat table
     File baseBallStatsBaseDir = new File(quickstartTmpDir, "baseballStats");
@@ -120,7 +123,9 @@ public class JoinQuickStart {
 
   public static void main(String[] args)
       throws Exception {
-    PluginManager.get().init();
-    new JoinQuickStart().execute();
+    List<String> arguments = new ArrayList<>();
+    arguments.addAll(Arrays.asList("QuickStart", "-type", "JOIN"));
+    arguments.addAll(Arrays.asList(args));
+    PinotAdministrator.main(arguments.toArray(new String[arguments.size()]));
   }
 }
diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/JsonIndexQuickStart.java b/pinot-tools/src/main/java/org/apache/pinot/tools/JsonIndexQuickStart.java
index d9b9be9..2c752f9 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/JsonIndexQuickStart.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/JsonIndexQuickStart.java
@@ -21,21 +21,24 @@ package org.apache.pinot.tools;
 import com.google.common.base.Preconditions;
 import java.io.File;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 import org.apache.commons.io.FileUtils;
-import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.tools.Quickstart.Color;
+import org.apache.pinot.tools.admin.PinotAdministrator;
 import org.apache.pinot.tools.admin.command.QuickstartRunner;
 
 import static org.apache.pinot.tools.Quickstart.prettyPrintResponse;
 import static org.apache.pinot.tools.Quickstart.printStatus;
 
 
-public class JsonIndexQuickStart {
+public class JsonIndexQuickStart extends QuickStartBase {
 
   public void execute()
       throws Exception {
-    File quickstartTmpDir = new File(FileUtils.getTempDirectory(), String.valueOf(System.currentTimeMillis()));
+    File quickstartTmpDir = new File(_tmpDir, String.valueOf(System.currentTimeMillis()));
     File baseDir = new File(quickstartTmpDir, "githubEvents");
     File dataDir = new File(quickstartTmpDir, "rawdata");
     Preconditions.checkState(dataDir.mkdirs());
@@ -89,7 +92,9 @@ public class JsonIndexQuickStart {
 
   public static void main(String[] args)
       throws Exception {
-    PluginManager.get().init();
-    new JsonIndexQuickStart().execute();
+    List<String> arguments = new ArrayList<>();
+    arguments.addAll(Arrays.asList("QuickStart", "-type", "BATCH-JSON-INDEX"));
+    arguments.addAll(Arrays.asList(args));
+    PinotAdministrator.main(arguments.toArray(new String[arguments.size()]));
   }
 }
diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/OfflineComplexTypeHandlingQuickStart.java b/pinot-tools/src/main/java/org/apache/pinot/tools/OfflineComplexTypeHandlingQuickStart.java
index c656dfa..2f0563b 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/OfflineComplexTypeHandlingQuickStart.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/OfflineComplexTypeHandlingQuickStart.java
@@ -21,21 +21,24 @@ package org.apache.pinot.tools;
 import com.google.common.base.Preconditions;
 import java.io.File;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 import org.apache.commons.io.FileUtils;
-import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.tools.Quickstart.Color;
+import org.apache.pinot.tools.admin.PinotAdministrator;
 import org.apache.pinot.tools.admin.command.QuickstartRunner;
 
 import static org.apache.pinot.tools.Quickstart.prettyPrintResponse;
 import static org.apache.pinot.tools.Quickstart.printStatus;
 
 
-public class OfflineComplexTypeHandlingQuickStart {
+public class OfflineComplexTypeHandlingQuickStart extends QuickStartBase {
 
   public void execute()
       throws Exception {
-    File quickstartTmpDir = new File(FileUtils.getTempDirectory(), String.valueOf(System.currentTimeMillis()));
+    File quickstartTmpDir = new File(_tmpDir, String.valueOf(System.currentTimeMillis()));
     File baseDir = new File(quickstartTmpDir, "githubEvents");
     File dataDir = new File(quickstartTmpDir, "rawdata");
     Preconditions.checkState(dataDir.mkdirs());
@@ -89,7 +92,9 @@ public class OfflineComplexTypeHandlingQuickStart {
 
   public static void main(String[] args)
       throws Exception {
-    PluginManager.get().init();
-    new OfflineComplexTypeHandlingQuickStart().execute();
+    List<String> arguments = new ArrayList<>();
+    arguments.addAll(Arrays.asList("QuickStart", "-type", "BATCH-COMPLEX-TYPE"));
+    arguments.addAll(Arrays.asList(args));
+    PinotAdministrator.main(arguments.toArray(new String[arguments.size()]));
   }
 }
diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/BatchQuickstartWithMinion.java b/pinot-tools/src/main/java/org/apache/pinot/tools/QuickStartBase.java
similarity index 67%
copy from pinot-tools/src/main/java/org/apache/pinot/tools/BatchQuickstartWithMinion.java
copy to pinot-tools/src/main/java/org/apache/pinot/tools/QuickStartBase.java
index 37deaa8..94016c8 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/BatchQuickstartWithMinion.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/QuickStartBase.java
@@ -18,23 +18,18 @@
  */
 package org.apache.pinot.tools;
 
-import org.apache.pinot.spi.plugin.PluginManager;
+import java.io.File;
+import org.apache.commons.io.FileUtils;
 
 
-public class BatchQuickstartWithMinion extends Quickstart {
+public abstract class QuickStartBase {
+  protected File _tmpDir = FileUtils.getTempDirectory();
 
-  public String getBootstrapDataDir() {
-    return "examples/minions/batch/baseballStats";
+  public QuickStartBase setTmpDir(String tmpDir) {
+    this._tmpDir = new File(tmpDir);
+    return this;
   }
 
-  @Override
-  public int getNumMinions() {
-    return 1;
-  }
-
-  public static void main(String[] args)
-      throws Exception {
-    PluginManager.get().init();
-    new BatchQuickstartWithMinion().execute();
-  }
+  public abstract void execute()
+      throws Exception;
 }
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 f583352..4907d79 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
@@ -23,16 +23,20 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import java.io.File;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 import org.apache.commons.io.FileUtils;
-import org.apache.pinot.spi.plugin.PluginManager;
+import org.apache.pinot.tools.admin.PinotAdministrator;
 import org.apache.pinot.tools.admin.command.QuickstartRunner;
 
 
-public class Quickstart {
+public class Quickstart extends QuickStartBase {
   private static final String TAB = "\t\t";
   private static final String NEW_LINE = "\n";
 
+
   public enum Color {
     RESET("\u001B[0m"), GREEN("\u001B[32m"), YELLOW("\u001B[33m"), CYAN("\u001B[36m");
 
@@ -149,7 +153,7 @@ public class Quickstart {
 
   public void execute()
       throws Exception {
-    File quickstartTmpDir = new File(FileUtils.getTempDirectory(), String.valueOf(System.currentTimeMillis()));
+    File quickstartTmpDir = new File(_tmpDir, String.valueOf(System.currentTimeMillis()));
     File baseDir = new File(quickstartTmpDir, "baseballStats");
     File dataDir = new File(baseDir, "rawdata");
     Preconditions.checkState(dataDir.mkdirs());
@@ -235,7 +239,9 @@ public class Quickstart {
 
   public static void main(String[] args)
       throws Exception {
-    PluginManager.get().init();
-    new Quickstart().execute();
+    List<String> arguments = new ArrayList<>();
+    arguments.addAll(Arrays.asList("QuickStart", "-type", "BATCH"));
+    arguments.addAll(Arrays.asList(args));
+    PinotAdministrator.main(arguments.toArray(new String[arguments.size()]));
   }
 }
diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeComplexTypeHandlingQuickStart.java b/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeComplexTypeHandlingQuickStart.java
index 7664288..713aaa0 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeComplexTypeHandlingQuickStart.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeComplexTypeHandlingQuickStart.java
@@ -22,12 +22,15 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import java.io.File;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import org.apache.commons.io.FileUtils;
 import org.apache.pinot.common.utils.ZkStarter;
-import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.spi.stream.StreamDataProvider;
 import org.apache.pinot.spi.stream.StreamDataServerStartable;
 import org.apache.pinot.tools.Quickstart.Color;
+import org.apache.pinot.tools.admin.PinotAdministrator;
 import org.apache.pinot.tools.admin.command.QuickstartRunner;
 import org.apache.pinot.tools.streams.MeetupRsvpJsonStream;
 import org.apache.pinot.tools.utils.KafkaStarterUtils;
@@ -36,18 +39,20 @@ import static org.apache.pinot.tools.Quickstart.prettyPrintResponse;
 import static org.apache.pinot.tools.Quickstart.printStatus;
 
 
-public class RealtimeComplexTypeHandlingQuickStart {
+public class RealtimeComplexTypeHandlingQuickStart extends QuickStartBase {
   private StreamDataServerStartable _kafkaStarter;
 
   public static void main(String[] args)
       throws Exception {
-    PluginManager.get().init();
-    new RealtimeComplexTypeHandlingQuickStart().execute();
+    List<String> arguments = new ArrayList<>();
+    arguments.addAll(Arrays.asList("QuickStart", "-type", "REALTIME-COMPLEX-TYPE"));
+    arguments.addAll(Arrays.asList(args));
+    PinotAdministrator.main(arguments.toArray(new String[arguments.size()]));
   }
 
   public void execute()
       throws Exception {
-    File quickstartTmpDir = new File(FileUtils.getTempDirectory(), String.valueOf(System.currentTimeMillis()));
+    File quickstartTmpDir = new File(_tmpDir, String.valueOf(System.currentTimeMillis()));
     File baseDir = new File(quickstartTmpDir, "meetupRsvp");
     File dataDir = new File(baseDir, "data");
     Preconditions.checkState(dataDir.mkdirs());
diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeJsonIndexQuickStart.java b/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeJsonIndexQuickStart.java
index 5a79315..d246fb8 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeJsonIndexQuickStart.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/RealtimeJsonIndexQuickStart.java
@@ -22,12 +22,15 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import java.io.File;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import org.apache.commons.io.FileUtils;
 import org.apache.pinot.common.utils.ZkStarter;
-import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.spi.stream.StreamDataProvider;
 import org.apache.pinot.spi.stream.StreamDataServerStartable;
 import org.apache.pinot.tools.Quickstart.Color;
+import org.apache.pinot.tools.admin.PinotAdministrator;
 import org.apache.pinot.tools.admin.command.QuickstartRunner;
 import org.apache.pinot.tools.streams.MeetupRsvpJsonStream;
 import org.apache.pinot.tools.utils.KafkaStarterUtils;
@@ -36,18 +39,20 @@ import static org.apache.pinot.tools.Quickstart.prettyPrintResponse;
 import static org.apache.pinot.tools.Quickstart.printStatus;
 
 
-public class RealtimeJsonIndexQuickStart {
+public class RealtimeJsonIndexQuickStart extends QuickStartBase {
   private StreamDataServerStartable _kafkaStarter;
 
   public static void main(String[] args)
       throws Exception {
-    PluginManager.get().init();
-    new RealtimeJsonIndexQuickStart().execute();
+    List<String> arguments = new ArrayList<>();
+    arguments.addAll(Arrays.asList("QuickStart", "-type", "REALTIME-JSON-INDEX"));
+    arguments.addAll(Arrays.asList(args));
+    PinotAdministrator.main(arguments.toArray(new String[arguments.size()]));
   }
 
   public void execute()
       throws Exception {
-    File quickstartTmpDir = new File(FileUtils.getTempDirectory(), String.valueOf(System.currentTimeMillis()));
+    File quickstartTmpDir = new File(_tmpDir, String.valueOf(System.currentTimeMillis()));
     File baseDir = new File(quickstartTmpDir, "meetupRsvp");
     File dataDir = new File(baseDir, "data");
     Preconditions.checkState(dataDir.mkdirs());
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 883b4c0..41c3e4f 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
@@ -22,12 +22,15 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import java.io.File;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import org.apache.commons.io.FileUtils;
 import org.apache.pinot.common.utils.ZkStarter;
-import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.spi.stream.StreamDataProvider;
 import org.apache.pinot.spi.stream.StreamDataServerStartable;
 import org.apache.pinot.tools.Quickstart.Color;
+import org.apache.pinot.tools.admin.PinotAdministrator;
 import org.apache.pinot.tools.admin.command.QuickstartRunner;
 import org.apache.pinot.tools.streams.MeetupRsvpStream;
 import org.apache.pinot.tools.utils.KafkaStarterUtils;
@@ -36,19 +39,20 @@ import static org.apache.pinot.tools.Quickstart.prettyPrintResponse;
 import static org.apache.pinot.tools.Quickstart.printStatus;
 
 
-public class RealtimeQuickStart {
+public class RealtimeQuickStart extends QuickStartBase {
   private StreamDataServerStartable _kafkaStarter;
 
   public static void main(String[] args)
       throws Exception {
-    PluginManager.get().init();
-    new RealtimeQuickStart().execute();
+    List<String> arguments = new ArrayList<>();
+    arguments.addAll(Arrays.asList("QuickStart", "-type", "REALTIME"));
+    arguments.addAll(Arrays.asList(args));
+    PinotAdministrator.main(arguments.toArray(new String[arguments.size()]));
   }
 
   public void execute()
       throws Exception {
-    File quickstartTmpDir = new File(FileUtils.getTempDirectory(), String.valueOf(System.currentTimeMillis()));
-
+    File quickstartTmpDir = new File(_tmpDir, String.valueOf(System.currentTimeMillis()));
     File baseDir = new File(quickstartTmpDir, "meetupRsvp");
     File dataDir = new File(baseDir, "rawdata");
     Preconditions.checkState(dataDir.mkdirs());
diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/UpsertQuickStart.java b/pinot-tools/src/main/java/org/apache/pinot/tools/UpsertQuickStart.java
index 1e3705e..53e5e12 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/UpsertQuickStart.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/UpsertQuickStart.java
@@ -22,12 +22,15 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import java.io.File;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import org.apache.commons.io.FileUtils;
 import org.apache.pinot.common.utils.ZkStarter;
-import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.spi.stream.StreamDataProvider;
 import org.apache.pinot.spi.stream.StreamDataServerStartable;
 import org.apache.pinot.tools.Quickstart.Color;
+import org.apache.pinot.tools.admin.PinotAdministrator;
 import org.apache.pinot.tools.admin.command.QuickstartRunner;
 import org.apache.pinot.tools.streams.MeetupRsvpStream;
 import org.apache.pinot.tools.utils.KafkaStarterUtils;
@@ -36,18 +39,20 @@ import static org.apache.pinot.tools.Quickstart.prettyPrintResponse;
 import static org.apache.pinot.tools.Quickstart.printStatus;
 
 
-public class UpsertQuickStart {
+public class UpsertQuickStart extends QuickStartBase {
   private StreamDataServerStartable _kafkaStarter;
 
   public static void main(String[] args)
       throws Exception {
-    PluginManager.get().init();
-    new UpsertQuickStart().execute();
+    List<String> arguments = new ArrayList<>();
+    arguments.addAll(Arrays.asList("QuickStart", "-type", "UPSERT"));
+    arguments.addAll(Arrays.asList(args));
+    PinotAdministrator.main(arguments.toArray(new String[arguments.size()]));
   }
 
   public void execute()
       throws Exception {
-    File quickstartTmpDir = new File(FileUtils.getTempDirectory(), String.valueOf(System.currentTimeMillis()));
+    File quickstartTmpDir = new File(_tmpDir, String.valueOf(System.currentTimeMillis()));
     File bootstrapTableDir = new File(quickstartTmpDir, "meetupRsvp");
     File dataDir = new File(bootstrapTableDir, "data");
     Preconditions.checkState(dataDir.mkdirs());
diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/QuickStartCommand.java b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/QuickStartCommand.java
index eeec0dc..54119f4 100644
--- a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/QuickStartCommand.java
+++ b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/QuickStartCommand.java
@@ -22,8 +22,15 @@ import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.tools.BatchQuickstartWithMinion;
 import org.apache.pinot.tools.Command;
 import org.apache.pinot.tools.HybridQuickstart;
+import org.apache.pinot.tools.JoinQuickStart;
+import org.apache.pinot.tools.JsonIndexQuickStart;
+import org.apache.pinot.tools.OfflineComplexTypeHandlingQuickStart;
+import org.apache.pinot.tools.QuickStartBase;
 import org.apache.pinot.tools.Quickstart;
+import org.apache.pinot.tools.RealtimeComplexTypeHandlingQuickStart;
+import org.apache.pinot.tools.RealtimeJsonIndexQuickStart;
 import org.apache.pinot.tools.RealtimeQuickStart;
+import org.apache.pinot.tools.UpsertQuickStart;
 import org.kohsuke.args4j.Option;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,6 +42,9 @@ public class QuickStartCommand extends AbstractBaseAdminCommand implements Comma
   @Option(name = "-type", required = false, metaVar = "<String>", usage = "Type of quickstart, supported: STREAM/BATCH/HYBRID")
   private String _type;
 
+  @Option(name = "-tmpDir", required = false, aliases = {"-quickstartDir", "-dataDir"}, metaVar = "<String>", usage = "Temp Directory to host quickstart data")
+  private String _tmpDir;
+
   @Option(name = "-help", required = false, help = true, aliases = {"-h", "--h", "--help"}, usage = "Print this message.")
   private boolean _help = false;
 
@@ -53,6 +63,14 @@ public class QuickStartCommand extends AbstractBaseAdminCommand implements Comma
     return this;
   }
 
+  public String getTmpDir() {
+    return _tmpDir;
+  }
+
+  public void setTmpDir(String tmpDir) {
+    _tmpDir = tmpDir;
+  }
+
   @Override
   public String toString() {
     return ("QuickStart -type " + _type);
@@ -60,7 +78,6 @@ public class QuickStartCommand extends AbstractBaseAdminCommand implements Comma
 
   @Override
   public void cleanup() {
-
   }
 
   @Override
@@ -72,27 +89,62 @@ public class QuickStartCommand extends AbstractBaseAdminCommand implements Comma
   public boolean execute()
       throws Exception {
     PluginManager.get().init();
+    QuickStartBase quickstart;
     switch (_type.toUpperCase()) {
       case "OFFLINE":
       case "BATCH":
-        new Quickstart().execute();
+        quickstart = new Quickstart();
         break;
       case "OFFLINE_MINION":
       case "BATCH_MINION":
       case "OFFLINE-MINION":
       case "BATCH-MINION":
-        new BatchQuickstartWithMinion().execute();
+        quickstart = new BatchQuickstartWithMinion();
         break;
       case "REALTIME":
       case "STREAM":
-        new RealtimeQuickStart().execute();
+        quickstart = new RealtimeQuickStart();
         break;
       case "HYBRID":
-        new HybridQuickstart().execute();
+        quickstart = new HybridQuickstart();
+        break;
+      case "JOIN":
+        quickstart = new JoinQuickStart();
+        break;
+      case "UPSERT":
+        quickstart = new UpsertQuickStart();
+        break;
+      case "OFFLINE_JSON_INDEX":
+      case "OFFLINE-JSON-INDEX":
+      case "BATCH_JSON_INDEX":
+      case "BATCH-JSON-INDEX":
+        quickstart = new JsonIndexQuickStart();
+        break;
+      case "REALTIME_JSON_INDEX":
+      case "REALTIME-JSON-INDEX":
+      case "STREAM_JSON_INDEX":
+      case "STREAM-JSON-INDEX":
+        quickstart = new RealtimeJsonIndexQuickStart();
+        break;
+      case "OFFLINE_COMPLEX_TYPE":
+      case "OFFLINE-COMPLEX-TYPE":
+      case "BATCH_COMPLEX_TYPE":
+      case "BATCH-COMPLEX-TYPE":
+        quickstart = new OfflineComplexTypeHandlingQuickStart();
+        break;
+      case "REALTIME_COMPLEX_TYPE":
+      case "REALTIME-COMPLEX-TYPE":
+      case "STREAM_COMPLEX_TYPE":
+      case "STREAM-COMPLEX-TYPE":
+        quickstart = new RealtimeComplexTypeHandlingQuickStart();
         break;
       default:
         throw new UnsupportedOperationException("Unsupported QuickStart type: " + _type);
     }
+    if (_tmpDir != null) {
+      quickstart.setTmpDir(_tmpDir);
+    }
+    quickstart.execute();
     return true;
   }
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org