SAMZA-2096: Support getVersion in Sql Shell
authorWeiqing Yang <yangweiqing001@gmail.com>
Tue, 5 Feb 2019 00:14:37 +0000 (16:14 -0800)
committerAditya Toomula <atoomula@linkedin.com>
Tue, 5 Feb 2019 00:14:37 +0000 (16:14 -0800)
## What changes were proposed in this pull request?
1. Print version information when Shell is just initialized.
2. Support "VERSION" command.

## How was this patch tested?
Test in Shell.

Author: Weiqing Yang <yangweiqing001@gmail.com>

Reviewers: shenodaguirguis,atoomula

Closes #904 from weiqingy/shellVersion

build.gradle
samza-sql-shell/src/main/java/org/apache/samza/sql/client/cli/CliCommandType.java
samza-sql-shell/src/main/java/org/apache/samza/sql/client/cli/CliConstants.java
samza-sql-shell/src/main/java/org/apache/samza/sql/client/cli/CliShell.java
samza-sql-shell/src/main/java/org/apache/samza/sql/client/impl/SamzaExecutor.java
samza-sql-shell/src/main/java/org/apache/samza/sql/client/interfaces/SqlExecutor.java
samza-sql-shell/src/main/java/org/apache/samza/sql/client/interfaces/SqlFunction.java

index 3e8d08a..53b01dc 100644 (file)
@@ -346,6 +346,12 @@ project(":samza-sql_$scalaVersion") {
 project(":samza-sql-shell_$scalaVersion") {
   apply plugin: 'java'
 
+  jar {
+    manifest {
+      attributes("Implementation-Version": "$version")
+    }
+  }
+
   dependencies {
     compile project(":samza-sql_$scalaVersion")
     compile project(":samza-tools_$scalaVersion")
index 0cd170e..f153cef 100755 (executable)
@@ -42,6 +42,7 @@ enum CliCommandType {
   CLEAR("CLEAR", "\tClears the screen.", "CLEAR"),
   EXIT("EXIT", "\tExits the shell.", "Exit"),
   QUIT("QUIT", "\tQuits the shell.", "QUIT"),
+  VERSION("VERSION", "\tShows version information", "VERSION"),
 
   INVALID_COMMAND("INVALID_COMMAND", "INVALID_COMMAND", "INVALID_COMMAND");
 
index e417099..b20e614 100755 (executable)
@@ -34,9 +34,6 @@ class CliConstants {
   public static final String CONFIG_EXECUTOR = "shell.executor";
   public static final String DEFAULT_EXECUTOR_CLASS = "org.apache.samza.sql.client.impl.SamzaExecutor";
 
-  public static final String VERSION = "0.0.1";
-
-
   public static final String WELCOME_MESSAGE;
   static {
         WELCOME_MESSAGE =
@@ -51,7 +48,7 @@ class CliConstants {
 "   \\  \\:\\/:/        /  /:/        /  /:/     \\  \\:\\           /  /:/ \n"+
 "    \\  \\::/        /__/:/        /__/:/       \\  \\:\\         /__/:/ \n"+
 "     \\__\\/         \\__\\/         \\__\\/         \\__\\/         \\__\\/  \n\n"+
-"Welcome to Samza SQL shell (V" + VERSION + "). Enter HELP for all commands.\n\n";
+"Welcome to Samza SQL shell. Enter HELP for all commands.\n";
   }
 
   public static final char SPACE = '\u0020';
index 8bdbf7d..98c6e1d 100755 (executable)
@@ -119,9 +119,11 @@ class CliShell {
     // screen and we need it to show streaming results. Clear the screen instead.
     clearScreen();
     writer.write(CliConstants.WELCOME_MESSAGE);
+    printVersion();
     if(!CliUtil.isNullOrEmpty(message)) {
       writer.println(message);
     }
+    writer.println();
 
     try {
       // Check if jna.jar exists in class path
@@ -205,6 +207,10 @@ class CliShell {
               commandStop(command);
               break;
 
+            case VERSION:
+              commandVersion(command);
+              break;
+
             case INVALID_COMMAND:
               printHelpMessage();
               break;
@@ -242,6 +248,18 @@ class CliShell {
     }
   }
 
+  private void commandVersion(CliCommand command) {
+    printVersion();
+  }
+
+  private void printVersion() {
+    String version = String.format("Shell version %s, Executor is %s, version %s",
+            this.getClass().getPackage().getImplementationVersion(),
+            executor.getClass().getName(),
+            executor.getVersion());
+    writer.println(version);
+  }
+
   private void commandClear() {
     clearScreen();
   }
index 73f80e8..0434815 100755 (executable)
@@ -298,6 +298,11 @@ public class SamzaExecutor implements SqlExecutor {
     return udfs;
   }
 
+  @Override
+  public String getVersion() {
+    return this.getClass().getPackage().getImplementationVersion();
+  }
+
   static void saveOutputMessage(OutgoingMessageEnvelope messageEnvelope) {
     outputData.add(messageEnvelope);
   }
index 37c1cca..fb7d109 100644 (file)
@@ -56,7 +56,7 @@ public interface SqlExecutor {
    * @param context The ExecutionContext at the time of the call.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public void start(ExecutionContext context) throws ExecutorException;
+  void start(ExecutionContext context) throws ExecutorException;
 
   /**
    * Indicates no further calls will be made thus it's safe for the executor to clean up.
@@ -64,20 +64,20 @@ public interface SqlExecutor {
    * @param context The ExecutionContext at the time of the call.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public void stop(ExecutionContext context) throws ExecutorException;
+  void stop(ExecutionContext context) throws ExecutorException;
 
   /**
    *
    * @return An EnvironmentVariableHandler that handles executor specific environment variables
    */
-  public EnvironmentVariableHandler getEnvironmentVariableHandler();
+  EnvironmentVariableHandler getEnvironmentVariableHandler();
 
   /**
    * @param context The ExecutionContext at the time of the call.
    * @return A list of table names. Could be empty.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public List<String> listTables(ExecutionContext context) throws ExecutorException;
+  List<String> listTables(ExecutionContext context) throws ExecutorException;
 
   /**
    * @param context   The ExecutionContext at the time of the call.
@@ -85,7 +85,7 @@ public interface SqlExecutor {
    * @return Schema of the table.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public SqlSchema getTableSchema(ExecutionContext context, String tableName) throws ExecutorException;
+  SqlSchema getTableSchema(ExecutionContext context, String tableName) throws ExecutorException;
 
   /**
    * @param context   The ExecutionContext at the time of the call.
@@ -93,14 +93,14 @@ public interface SqlExecutor {
    * @return The query result.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public QueryResult executeQuery(ExecutionContext context, String statement) throws ExecutorException;
+  QueryResult executeQuery(ExecutionContext context, String statement) throws ExecutorException;
 
 
   /**
    * @return how many rows available for reading.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public int getRowCount() throws ExecutorException;
+  int getRowCount() throws ExecutorException;
 
   /**
    * Row starts at 0. Executor shall keep the data retrieved.
@@ -112,7 +112,7 @@ public interface SqlExecutor {
    * @return A list of row data represented by a String array.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public List<String[]> retrieveQueryResult(ExecutionContext context, int startRow, int endRow) throws ExecutorException;
+  List<String[]> retrieveQueryResult(ExecutionContext context, int startRow, int endRow) throws ExecutorException;
 
 
   /**
@@ -125,7 +125,7 @@ public interface SqlExecutor {
    * @return available data between startRow and endRow (both are inclusive)
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public List<String[]> consumeQueryResult(ExecutionContext context, int startRow, int endRow) throws ExecutorException;
+  List<String[]> consumeQueryResult(ExecutionContext context, int startRow, int endRow) throws ExecutorException;
 
   /**
    * Executes all the NON-QUERY statements in the sqlFile.
@@ -136,7 +136,7 @@ public interface SqlExecutor {
    * @return Execution result.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public NonQueryResult executeNonQuery(ExecutionContext context, File file) throws ExecutorException;
+  NonQueryResult executeNonQuery(ExecutionContext context, File file) throws ExecutorException;
 
   /**
    * @param context    The ExecutionContext at the time of the call.
@@ -144,14 +144,14 @@ public interface SqlExecutor {
    * @return Execution result.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public NonQueryResult executeNonQuery(ExecutionContext context, List<String> statements) throws ExecutorException;
+  NonQueryResult executeNonQuery(ExecutionContext context, List<String> statements) throws ExecutorException;
 
   /**
    * @param context The ExecutionContext at the time of the call.
    * @param exeId   Execution ID.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public void stopExecution(ExecutionContext context, int exeId) throws ExecutorException;
+  void stopExecution(ExecutionContext context, int exeId) throws ExecutorException;
 
 
   /**
@@ -161,14 +161,14 @@ public interface SqlExecutor {
    * @param exeId   Execution ID.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public void removeExecution(ExecutionContext context, int exeId) throws ExecutorException;
+  void removeExecution(ExecutionContext context, int exeId) throws ExecutorException;
 
   /**
    * @param execId Execution ID.
    * @return ExecutionStatus.
    * @throws ExecutorException if the Executor encounters an error.
    */
-  public ExecutionStatus queryExecutionStatus(int execId) throws ExecutorException;
+  ExecutionStatus queryExecutionStatus(int execId) throws ExecutorException;
 
   /**
    * @param context The ExecutionContext at the time of the call.
@@ -176,4 +176,11 @@ public interface SqlExecutor {
    * @throws ExecutorException if the Executor encounters an error.
    */
   List<SqlFunction> listFunctions(ExecutionContext context) throws ExecutorException;
+
+  /**
+   * Gets the version of this executor.
+   * @return A String representing the version of the executor. This function does NOT throw an
+   * ExecutorException as the caller has nothing to do to "recover" if the function fails.
+   */
+  String getVersion();
 }
index 3ac602c..5d28ce6 100644 (file)
@@ -29,25 +29,25 @@ public interface SqlFunction {
    * Gets the name of the function.
    * @return name of the function
    */
-  public String getName();
+  String getName();
 
   /**
    * Gets the description of the function.
    * @return description of the function.
    */
-  public String getDescription();
+  String getDescription();
 
   /**
    * Gets the argument types of the function as a List.
    * @return A list containing the type names of the arguments.
    */
-  public List<String> getArgumentTypes();
+  List<String> getArgumentTypes();
 
   /**
    * Gets the return type of the function.
    * @return return type name
    */
-  public String getReturnType();
+  String getReturnType();
 
   /**
    * Don't forget to implement toString()