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