You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by er...@apache.org on 2022/09/20 03:07:29 UTC

[iotdb] 01/01: [IOTDB-4454] Show build info in cli and SHOW VERSION query

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

ericpai pushed a commit to branch feature/iotdb-4454
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 1c1a48d795593821f19db18d8613d871af44acd4
Author: ericpai <er...@hotmail.com>
AuthorDate: Tue Sep 20 10:56:47 2022 +0800

    [IOTDB-4454] Show build info in cli and SHOW VERSION query
---
 .../java/org/apache/iotdb/cli/AbstractCli.java     |  5 +++-
 cli/src/main/java/org/apache/iotdb/cli/Cli.java    |  2 +-
 node-commons/pom.xml                               | 32 ++++++++++++++++++++++
 .../apache/iotdb/commons/conf/IoTDBConstant.java   | 23 +++++++++++++++-
 .../org/apache/iotdb/db/conf/IoTDBStartCheck.java  |  2 +-
 .../db/mpp/common/header/ColumnHeaderConstant.java |  5 +++-
 .../memory/StatementMemorySourceVisitor.java       |  1 +
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |  9 ++++--
 .../service/thrift/impl/ClientRPCServiceImpl.java  |  3 +-
 .../db/service/thrift/impl/TSServiceImpl.java      |  3 +-
 thrift/src/main/thrift/client.thrift               |  1 +
 .../zeppelin/iotdb/IoTDBInterpreterTest.java       |  2 ++
 12 files changed, 79 insertions(+), 9 deletions(-)

diff --git a/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java b/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java
index 1cbed9d0af..bf91a36a84 100644
--- a/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java
+++ b/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java
@@ -303,7 +303,7 @@ public abstract class AbstractCli {
     }
   }
 
-  static void displayLogo(String version) {
+  static void displayLogo(String version, String buildInfo) {
     println(
         " _____       _________  ______   ______    \n"
             + "|_   _|     |  _   _  ||_   _ `.|_   _ \\   \n"
@@ -312,6 +312,9 @@ public abstract class AbstractCli {
             + " _| |_| \\__. | _| |_    _| |_.' /_| |__) | \n"
             + "|_____|'.__.' |_____|  |______.'|_______/  version "
             + version
+            + " (Build: "
+            + buildInfo
+            + ")"
             + "\n"
             + "                                           \n");
   }
diff --git a/cli/src/main/java/org/apache/iotdb/cli/Cli.java b/cli/src/main/java/org/apache/iotdb/cli/Cli.java
index e4cf0ec62a..535a714e03 100644
--- a/cli/src/main/java/org/apache/iotdb/cli/Cli.java
+++ b/cli/src/main/java/org/apache/iotdb/cli/Cli.java
@@ -164,7 +164,7 @@ public class Cli extends AbstractCli {
       timestampPrecision = properties.getTimestampPrecision();
 
       echoStarting();
-      displayLogo(properties.getVersion());
+      displayLogo(properties.getVersion(), properties.getBuildInfo());
       println(IOTDB_CLI_PREFIX + "> login successfully");
       while (true) {
         try {
diff --git a/node-commons/pom.xml b/node-commons/pom.xml
index 3b2e80429f..8d21fab502 100644
--- a/node-commons/pom.xml
+++ b/node-commons/pom.xml
@@ -155,6 +155,34 @@
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>pl.project13.maven</groupId>
+                <artifactId>git-commit-id-plugin</artifactId>
+                <version>4.9.10</version>
+                <executions>
+                    <execution>
+                        <id>get-the-git-infos</id>
+                        <goals>
+                            <goal>revision</goal>
+                        </goals>
+                        <phase>initialize</phase>
+                    </execution>
+                </executions>
+                <configuration>
+                    <generateGitPropertiesFile>true</generateGitPropertiesFile>
+                    <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
+                    <includeOnlyProperties>
+                        <includeOnlyProperty>^git.commit.id.abbrev$</includeOnlyProperty>
+                        <includeOnlyProperty>^git.dirty$</includeOnlyProperty>
+                    </includeOnlyProperties>
+                    <commitIdGenerationMode>full</commitIdGenerationMode>
+                    <failOnNoGitDirectory>false</failOnNoGitDirectory>
+                    <offline>true</offline>
+                    <gitDescribe>
+                        <dirty>-dev</dirty>
+                    </gitDescribe>
+                </configuration>
+            </plugin>
             <!--
               Use the MANIFEST file generated by the maven-bundle-plugin.
             -->
@@ -163,6 +191,10 @@
                 <configuration>
                     <archive>
                         <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+                        <manifest>
+                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                        </manifest>
                     </archive>
                 </configuration>
             </plugin>
diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java b/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
index 627fcbe4da..292eebf642 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
@@ -19,12 +19,31 @@
 package org.apache.iotdb.commons.conf;
 
 import java.util.HashSet;
+import java.util.Properties;
 import java.util.Set;
 
 public class IoTDBConstant {
 
   private IoTDBConstant() {}
 
+  static {
+    Properties prop = new Properties();
+    String finalBuildInfo = "UNKNOWN";
+    try {
+      prop.load(IoTDBConstant.class.getResourceAsStream("/git.properties"));
+      finalBuildInfo = prop.getProperty("git.commit.id.abbrev", "UNKNOWN");
+      String isDirty = prop.getProperty("git.dirty", "false");
+      if (isDirty.equalsIgnoreCase("true")) {
+        finalBuildInfo += "-dev";
+      }
+    } catch (Exception e) {
+      System.err.println("get git.properties error: " + e.getMessage());
+    }
+    BUILD_INFO = finalBuildInfo;
+  }
+
+  public static final String BUILD_INFO;
+
   public static final String ENV_FILE_NAME = "datanode-env";
   public static final String IOTDB_CONF = "IOTDB_CONF";
   public static final String GLOBAL_DB_NAME = "IoTDB";
@@ -46,6 +65,7 @@ public class IoTDBConstant {
       "UNKNOWN".equals(VERSION)
           ? "UNKNOWN"
           : VERSION.split("\\.")[0] + "." + VERSION.split("\\.")[1];
+  public static final String VERSION_WITH_BUILD = VERSION + " (Build: " + BUILD_INFO + ")";
 
   public static final String AUDIT_LOGGER_NAME = "IoTDB_AUDIT_LOGGER";
   public static final String SLOW_SQL_LOGGER_NAME = "SLOW_SQL";
@@ -85,7 +105,8 @@ public class IoTDBConstant {
   // show info
   public static final String COLUMN_ITEM = "                             item";
   public static final String COLUMN_VALUE = "value";
-  public static final String COLUMN_VERSION = "        version";
+  public static final String COLUMN_VERSION = "version";
+  public static final String COLUMN_BUILD_INFO = "build info";
   public static final String COLUMN_TIMESERIES = "timeseries";
   public static final String COLUMN_TIMESERIES_ALIAS = "alias";
   public static final String COLUMN_TIMESERIES_DATATYPE = "dataType";
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
index f0f8a1b5c9..fc190de029 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
@@ -129,7 +129,7 @@ public class IoTDBStartCheck {
   }
 
   private IoTDBStartCheck() {
-    logger.info("Starting IoTDB " + IoTDBConstant.VERSION);
+    logger.info("Starting IoTDB " + IoTDBConstant.VERSION_WITH_BUILD);
 
     // check whether SCHEMA_DIR exists, create if not exists
     File dir = SystemFileFactory.INSTANCE.getFile(SCHEMA_DIR);
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java
index e642a4504f..ef6cf7379d 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java
@@ -52,6 +52,7 @@ public class ColumnHeaderConstant {
   public static final String COLUMN_NODETYPES = "node types";
   public static final String COLUMN_CHILDNODES = "child nodes";
   public static final String COLUMN_VERSION = "version";
+  public static final String COLUMN_BUILD_INFO = "build info";
   public static final String COLUMN_PATHS = "paths";
 
   // column names for count statement
@@ -163,7 +164,9 @@ public class ColumnHeaderConstant {
       ImmutableList.of(new ColumnHeader(COLUMN_CHILDNODES, TSDataType.TEXT));
 
   public static final List<ColumnHeader> showVersionColumnHeaders =
-      ImmutableList.of(new ColumnHeader(COLUMN_VERSION, TSDataType.TEXT));
+      ImmutableList.of(
+          new ColumnHeader(COLUMN_VERSION, TSDataType.TEXT),
+          new ColumnHeader(COLUMN_BUILD_INFO, TSDataType.TEXT));
 
   public static final List<ColumnHeader> showPathsUsingTemplateHeaders =
       ImmutableList.of(new ColumnHeader(COLUMN_PATHS, TSDataType.TEXT));
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java
index 7d3ea37344..aaa51c3b13 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java
@@ -168,6 +168,7 @@ public class StatementMemorySourceVisitor
     TsBlockBuilder tsBlockBuilder = new TsBlockBuilder(outputDataTypes);
     tsBlockBuilder.getTimeColumnBuilder().writeLong(0L);
     tsBlockBuilder.getColumnBuilder(0).writeBinary(new Binary(IoTDBConstant.VERSION));
+    tsBlockBuilder.getColumnBuilder(1).writeBinary(new Binary(IoTDBConstant.BUILD_INFO));
     tsBlockBuilder.declarePosition();
     return new StatementMemorySource(
         tsBlockBuilder.build(), context.getAnalysis().getRespDatasetHeader());
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
index 4798a32ddc..bcb8b7aec9 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
@@ -1020,12 +1020,17 @@ public class PlanExecutor implements IPlanExecutor {
   private QueryDataSet processShowVersion() {
     SingleDataSet singleDataSet =
         new SingleDataSet(
-            Collections.singletonList(new PartialPath(IoTDBConstant.COLUMN_VERSION, false)),
-            Collections.singletonList(TSDataType.TEXT));
+            Arrays.asList(
+                new PartialPath(IoTDBConstant.COLUMN_VERSION, false),
+                new PartialPath(IoTDBConstant.COLUMN_BUILD_INFO, false)),
+            Arrays.asList(TSDataType.TEXT, TSDataType.TEXT));
     Field field = new Field(TSDataType.TEXT);
     field.setBinaryV(new Binary(IoTDBConstant.VERSION));
     RowRecord rowRecord = new RowRecord(0);
     rowRecord.addField(field);
+    field = new Field(TSDataType.TEXT);
+    field.setBinaryV(new Binary(IoTDBConstant.BUILD_INFO));
+    rowRecord.addField(field);
     singleDataSet.setRecord(rowRecord);
     return singleDataSet;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
index defe25b4c1..dc3a0857fd 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
@@ -274,7 +274,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
   public ServerProperties getProperties() {
     ServerProperties properties = new ServerProperties();
     properties.setVersion(IoTDBConstant.VERSION);
-    LOGGER.info("IoTDB server version: {}", IoTDBConstant.VERSION);
+    properties.setBuildInfo(IoTDBConstant.BUILD_INFO);
+    LOGGER.info("IoTDB server version: {}", IoTDBConstant.VERSION_WITH_BUILD);
     properties.setSupportedTimeAggregationOperations(new ArrayList<>());
     properties.getSupportedTimeAggregationOperations().add(IoTDBConstant.MAX_TIME);
     properties.getSupportedTimeAggregationOperations().add(IoTDBConstant.MIN_TIME);
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
index 32a33b2fa6..54d9013506 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
@@ -1163,7 +1163,8 @@ public class TSServiceImpl implements IClientRPCServiceWithHandler {
   public ServerProperties getProperties() {
     ServerProperties properties = new ServerProperties();
     properties.setVersion(IoTDBConstant.VERSION);
-    LOGGER.info("IoTDB server version: {}", IoTDBConstant.VERSION);
+    properties.setBuildInfo(IoTDBConstant.BUILD_INFO);
+    LOGGER.info("IoTDB server version: {}", IoTDBConstant.VERSION_WITH_BUILD);
     properties.setSupportedTimeAggregationOperations(new ArrayList<>());
     properties.getSupportedTimeAggregationOperations().add(IoTDBConstant.MAX_TIME);
     properties.getSupportedTimeAggregationOperations().add(IoTDBConstant.MIN_TIME);
diff --git a/thrift/src/main/thrift/client.thrift b/thrift/src/main/thrift/client.thrift
index 44058b86b6..83d15737e1 100644
--- a/thrift/src/main/thrift/client.thrift
+++ b/thrift/src/main/thrift/client.thrift
@@ -353,6 +353,7 @@ struct ServerProperties {
   8: optional i32 watermarkParamMaxRightBit;
   9: optional i32 thriftMaxFrameSize;
   10:optional bool isReadOnly;
+  11:optional string buildInfo;
 }
 
 struct TSSetSchemaTemplateReq {
diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/iotdb/IoTDBInterpreterTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/iotdb/IoTDBInterpreterTest.java
index 352c6d85a5..4ee342629a 100644
--- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/iotdb/IoTDBInterpreterTest.java
+++ b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/iotdb/IoTDBInterpreterTest.java
@@ -306,9 +306,11 @@ public class IoTDBInterpreterTest {
   public void testShowVersion() {
     InterpreterResult actual = interpreter.internalInterpret("SHOW VERSION", null);
     String gt = "version\n" + IoTDBConstant.VERSION;
+    String buildInfo = "build info\n" + IoTDBConstant.BUILD_INFO;
     Assert.assertNotNull(actual);
     Assert.assertEquals(Code.SUCCESS, actual.code());
     Assert.assertEquals(gt, actual.message().get(0).getData());
+    Assert.assertEquals(buildInfo, actual.message().get(1).getData());
   }
 
   @Test