You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hx...@apache.org on 2022/08/28 11:15:56 UTC
[iotdb] 01/01: add -p pid, -v version feature
This is an automated email from the ASF dual-hosted git repository.
hxd pushed a commit to branch 4230-2-0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 2d125a4ddf8c86cb65aedacefdf9e35f4337fed0
Author: xiangdong huang <sa...@gmail.com>
AuthorDate: Sun Aug 28 19:15:18 2022 +0800
add -p pid, -v version feature
---
server/src/assembly/resources/sbin/start-server.sh | 95 ++++++++++++++++++++--
server/src/assembly/resources/sbin/stop-server.bat | 3 +
server/src/assembly/resources/sbin/stop-server.sh | 4 +-
.../org/apache/iotdb/db/conf/IoTDBConstant.java | 3 +
.../org/apache/iotdb/db/service/GetVersion.java | 27 ++++++
.../java/org/apache/iotdb/db/service/IoTDB.java | 10 +++
.../org/apache/iotdb/db/service/DaemonTest.java | 41 ++++++++++
7 files changed, 177 insertions(+), 6 deletions(-)
diff --git a/server/src/assembly/resources/sbin/start-server.sh b/server/src/assembly/resources/sbin/start-server.sh
index e840f42eb4..18672de81a 100755
--- a/server/src/assembly/resources/sbin/start-server.sh
+++ b/server/src/assembly/resources/sbin/start-server.sh
@@ -41,7 +41,6 @@ elif [ -r "$IOTDB_INCLUDE" ]; then
. "$IOTDB_INCLUDE"
fi
-
if [ -z "${IOTDB_HOME}" ]; then
export IOTDB_HOME="`dirname "$0"`/.."
fi
@@ -54,6 +53,9 @@ if [ -z "${IOTDB_LOG_DIR}" ]; then
export IOTDB_LOG_DIR=${IOTDB_HOME}/logs
fi
+if [ -z "${configurationFile}" ]; then
+ IOTDB_LOG_CONFIG="${IOTDB_CONF}/logback.xml"
+fi
is_conf_path=false
for arg do
@@ -70,10 +72,59 @@ for arg do
set -- "$@" "$arg"
done
-CONF_PARAMS=$*
+# raw parameters of the command line
+PARAMS=$*
+
+# Parse any command line options.
+args=`getopt vRfhp:bD:H:E: "$@"`
+eval set -- "$args"
+while true; do
+ case "$1" in
+ -p)
+ pidfile="$2"
+ shift 2
+ ;;
+ -f)
+ foreground="yes"
+ shift
+ ;;
+ printgc)
+ PRINT_GC="yes"
+ shift
+ ;;
+ -H)
+ IOTDB_JVM_OPTS="$IOTDB_JVM_OPTS -XX:HeapDumpPath=$2"
+ shift 2
+ ;;
+ -E)
+ IOTDB_JVM_OPTS="$IOTDB_JVM_OPTS -XX:ErrorFile=$2"
+ shift 2
+ ;;
+ -h)
+ echo "Usage: $0 [-v] [-f] [-h] [-p pidfile] [printgc] [-H HeapDumpPath] [-E JvmErrorFile]"
+ exit 0
+ ;;
+ -v)
+ SHOW_VERSION="yes"
+ break
+ ;;
+ --)
+ shift
+ if [ "x$*" != "x" ] ; then
+ echo "Error parsing arguments! Unknown argument \"$*\"" >&2
+ exit 1
+ fi
+ break
+ ;;
+ *)
+ echo "Error parsing arguments! Unknown argument \"$1\"" >&2
+ exit 1
+ ;;
+ esac
+done
if [ -f "$IOTDB_CONF/iotdb-env.sh" ]; then
- if [ "$#" -ge "1" -a "$1" == "printgc" ]; then
+ if [ "x$PRINT_GC" != "x" ]; then
. "$IOTDB_CONF/iotdb-env.sh" "printgc"
else
. "$IOTDB_CONF/iotdb-env.sh"
@@ -86,22 +137,56 @@ CLASSPATH=""
for f in ${IOTDB_HOME}/lib/*.jar; do
CLASSPATH=${CLASSPATH}":"$f
done
+
classname=org.apache.iotdb.db.service.IoTDB
+if [ "x$SHOW_VERSION" != "x" ]; then
+ classname=org.apache.iotdb.db.service.GetVersion
+ IOTDB_LOG_CONFIG="${IOTDB_CONF}/logback-tool.xml"
+fi
+
launch_service()
{
class="$1"
- iotdb_parms="-Dlogback.configurationFile=${IOTDB_CONF}/logback.xml"
+ iotdb_parms="-Dlogback.configurationFile=${IOTDB_LOG_CONFIG}"
iotdb_parms="$iotdb_parms -DIOTDB_HOME=${IOTDB_HOME}"
iotdb_parms="$iotdb_parms -DTSFILE_HOME=${IOTDB_HOME}"
iotdb_parms="$iotdb_parms -DIOTDB_CONF=${IOTDB_CONF}"
iotdb_parms="$iotdb_parms -DTSFILE_CONF=${IOTDB_CONF}"
iotdb_parms="$iotdb_parms -Dname=iotdb\.IoTDB"
- exec "$JAVA" $illegal_access_params $iotdb_parms $IOTDB_JMX_OPTS -cp "$CLASSPATH" "$class" $CONF_PARAMS
+ iotdb_parms="$iotdb_parms -DIOTDB_LOG_DIR=${DIOTDB_LOG_DIR}"
+
+ if [ "x$pidpath" != "x" ]; then
+ iotdb_parms="$iotdb_parms -Diotdb-pidfile=$pidpath"
+ fi
+
+ # The iotdb-foreground option will tell IoTDB not to close stdout/stderr, but it's up to us not to background.
+ if [ "x$foreground" != "x" ]; then
+ iotdb_parms="$iotdb_parms -Diotdb-foreground=yes"
+ if [ "x$JVM_ON_OUT_OF_MEMORY_ERROR_OPT" != "x" ]; then
+ exec $NUMACTL "$JAVA" $JVM_OPTS "$JVM_ON_OUT_OF_MEMORY_ERROR_OPT" $illegal_access_params $iotdb_parms $IOTDB_JMX_OPTS -cp "$CLASSPATH" $IOTDB_JVM_OPTS "$class" $PARAMS
+ else
+ exec $NUMACTL "$JAVA" $JVM_OPTS $illegal_access_params $iotdb_parms $IOTDB_JMX_OPTS -cp "$CLASSPATH" $IOTDB_JVM_OPTS "$class" $PARAMS
+ fi
+ # Startup IoTDB, background it, and write the pid.
+ else
+ if [ "x$JVM_ON_OUT_OF_MEMORY_ERROR_OPT" != "x" ]; then
+ exec $NUMACTL "$JAVA" $JVM_OPTS "$JVM_ON_OUT_OF_MEMORY_ERROR_OPT" $illegal_access_params $iotdb_parms $IOTDB_JMX_OPTS -cp "$CLASSPATH" $IOTDB_JVM_OPTS "$class" $PARAMS 2>&1 > /dev/null <&- &
+ [ ! -z "$pidfile" ] && printf "%d" $! > "$pidfile"
+ true
+ else
+ exec $NUMACTL "$JAVA" $JVM_OPTS $illegal_access_params $iotdb_parms $IOTDB_JMX_OPTS -cp "$CLASSPATH" $IOTDB_JVM_OPTS "$class" $PARAMS 2>&1 > /dev/null <&- &
+ [ ! -z "$pidfile" ] && printf "%d" $! > "$pidfile"
+ true
+ fi
+ fi
+
return $?
}
# Start up the service
launch_service "$classname"
+
+
exit $?
diff --git a/server/src/assembly/resources/sbin/stop-server.bat b/server/src/assembly/resources/sbin/stop-server.bat
index a2f85581fa..4944e7449f 100755
--- a/server/src/assembly/resources/sbin/stop-server.bat
+++ b/server/src/assembly/resources/sbin/stop-server.bat
@@ -27,6 +27,8 @@ for /f "eol=; tokens=2,2 delims==" %%i in ('findstr /i "^rpc_port"
set rpc_port=%%i
)
+echo "check whether the rpc_port is used..., port is " %rpc_port%
+
for /f "eol=; tokens=2,2 delims==" %%i in ('findstr /i "rpc_address"
%superior_dir%\conf\iotdb-engine.properties') do (
set rpc_address=%%i
@@ -34,5 +36,6 @@ for /f "eol=; tokens=2,2 delims==" %%i in ('findstr /i "rpc_address"
for /f "tokens=5" %%a in ('netstat /ano ^| findstr %rpc_address%:%rpc_port%') do (
taskkill /f /pid %%a
+ echo "close IoTDB, PID:" %%a
)
rem ps ax | grep -i 'iotdb.IoTDB' | grep -v grep | awk '{print $1}' | xargs kill -SIGTERM
diff --git a/server/src/assembly/resources/sbin/stop-server.sh b/server/src/assembly/resources/sbin/stop-server.sh
index 0cd069a8fb..92f4c4428f 100755
--- a/server/src/assembly/resources/sbin/stop-server.sh
+++ b/server/src/assembly/resources/sbin/stop-server.sh
@@ -22,6 +22,8 @@
IOTDB_CONF="`dirname "$0"`/../conf"
rpc_port=`sed '/^rpc_port=/!d;s/.*=//' ${IOTDB_CONF}/iotdb-engine.properties`
+echo "check whether the rpc_port is used..., port is" $rpc_port
+
if type lsof > /dev/null 2>&1 ; then
PID=$(lsof -t -i:${rpc_port} -sTCP:LISTEN)
elif type netstat > /dev/null 2>&1 ; then
@@ -38,5 +40,5 @@ if [ -z "$PID" ]; then
exit 1
else
kill -s TERM $PID
- echo "close IoTDB"
+ echo "close IoTDB, PID:" $PID
fi
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
index 337a9e0a6e..7a406386ca 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
@@ -64,6 +64,9 @@ public class IoTDBConstant {
public static final String LAST_VALUE = "last_value";
public static final int MIN_SUPPORTED_JDK_VERSION = 8;
+ public static final String IOTDB_FOREGROUND = "iotdb-foreground";
+ public static final String IOTDB_PIDFILE = "iotdb-pidfile";
+
// show info
public static final String COLUMN_ITEM = " item";
public static final String COLUMN_VALUE = "value";
diff --git a/server/src/main/java/org/apache/iotdb/db/service/GetVersion.java b/server/src/main/java/org/apache/iotdb/db/service/GetVersion.java
new file mode 100644
index 0000000000..8b49874460
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/service/GetVersion.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.service;
+
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+
+public class GetVersion {
+ public static void main(String[] args) {
+ System.out.println(IoTDBDescriptor.getInstance().getConfig().getIoTDBVersion());
+ }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
index 66ffc23ac4..fb10ab2dd3 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
@@ -51,6 +51,7 @@ import org.apache.iotdb.db.writelog.manager.MultiFileLogNodeManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
import java.io.IOException;
import static org.apache.iotdb.db.utils.JarLoaderUtil.loadExternLib;
@@ -133,9 +134,18 @@ public class IoTDB implements IoTDBMBean {
config.setEnablePartialInsert(prevIsEnablePartialInsert);
activated = true;
+ processPid();
+
logger.info("{} has started.", IoTDBConstant.GLOBAL_DB_NAME);
}
+ void processPid() {
+ String pidFile = System.getProperty(IoTDBConstant.IOTDB_PIDFILE);
+ if (pidFile != null) {
+ new File(pidFile).deleteOnExit();
+ }
+ }
+
private void setUp() throws StartupException, QueryProcessException {
logger.info("Setting up IoTDB...");
diff --git a/server/src/test/java/org/apache/iotdb/db/service/DaemonTest.java b/server/src/test/java/org/apache/iotdb/db/service/DaemonTest.java
new file mode 100644
index 0000000000..5ea7c01104
--- /dev/null
+++ b/server/src/test/java/org/apache/iotdb/db/service/DaemonTest.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.service;
+
+import org.apache.iotdb.db.conf.IoTDBConstant;
+
+import org.junit.Test;
+
+public class DaemonTest {
+
+ @Test
+ public void testPid() {
+ IoTDB ioTDB = IoTDB.getInstance();
+ // no pid set, so there is nothing happens
+ ioTDB.processPid();
+ }
+
+ @Test
+ public void testSetPid() {
+ IoTDB ioTDB = IoTDB.getInstance();
+ System.setProperty(IoTDBConstant.IOTDB_PIDFILE, "./iotdb.pid");
+ // no pid set, so there is nothing happens
+ ioTDB.processPid();
+ }
+}