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/05/07 07:23:24 UTC
[iotdb] branch master updated: [IOTDB-3016] do flush when graceful stop IoTDB (#5800)
This is an automated email from the ASF dual-hosted git repository.
ericpai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 2031319c2d [IOTDB-3016] do flush when graceful stop IoTDB (#5800)
2031319c2d is described below
commit 2031319c2ded910dc78a6c72f51c9229b6b50401
Author: Jamber <ja...@sina.com>
AuthorDate: Sat May 7 15:23:19 2022 +0800
[IOTDB-3016] do flush when graceful stop IoTDB (#5800)
---
server/src/assembly/resources/sbin/stop-server.sh | 47 +++++++++++++++-------
.../apache/iotdb/db/service/IoTDBShutdownHook.java | 7 ++++
2 files changed, 39 insertions(+), 15 deletions(-)
diff --git a/server/src/assembly/resources/sbin/stop-server.sh b/server/src/assembly/resources/sbin/stop-server.sh
index 0cd069a8fb..971a9a6164 100755
--- a/server/src/assembly/resources/sbin/stop-server.sh
+++ b/server/src/assembly/resources/sbin/stop-server.sh
@@ -18,25 +18,42 @@
# under the License.
#
-
IOTDB_CONF="`dirname "$0"`/../conf"
rpc_port=`sed '/^rpc_port=/!d;s/.*=//' ${IOTDB_CONF}/iotdb-engine.properties`
+PID=""
-if type lsof > /dev/null 2>&1 ; then
- PID=$(lsof -t -i:${rpc_port} -sTCP:LISTEN)
-elif type netstat > /dev/null 2>&1 ; then
- PID=$(netstat -anp 2>/dev/null | grep ":${rpc_port} " | grep ' LISTEN ' | awk '{print $NF}' | sed "s|/.*||g" )
-else
- echo ""
- echo " Error: No necessary tool."
- echo " Please install 'lsof' or 'netstat'."
- exit 1
-fi
+function getPid {
+ if type lsof > /dev/null 2>&1 ; then
+ PID=$(lsof -t -i:${rpc_port} -sTCP:LISTEN)
+ elif type netstat > /dev/null 2>&1 ; then
+ PID=$(netstat -anp 2>/dev/null | grep ":${rpc_port} " | grep ' LISTEN ' | awk '{print $NF}' | sed "s|/.*||g" )
+ else
+ echo ""
+ echo " Error: No necessary tool."
+ echo " Please install 'lsof' or 'netstat'."
+ exit 1
+ fi
+}
+getPid
if [ -z "$PID" ]; then
- echo "No IoTDB server to stop"
+ echo "No IoTDB server to stop."
exit 1
-else
- kill -s TERM $PID
- echo "close IoTDB"
fi
+
+echo -n "Begin to stop IoTDB ..."
+kill -s TERM $PID
+for ((i=1; i<=1000;i++)) #check status in 100 sec
+do
+ if [ ! -d "/proc/$PID" ]; then
+ echo " closed gracefully."
+ exit 0
+ fi
+ if [ $((i%10)) -eq 0 ]; then
+ echo -n "."
+ fi
+ usleep 100000
+done
+
+kill -s KILL $PID
+echo " forced to kill."
diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
index a8900d3eb2..cbd45bf9ec 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
@@ -18,8 +18,10 @@
*/
package org.apache.iotdb.db.service;
+import org.apache.iotdb.db.engine.StorageEngine;
import org.apache.iotdb.db.engine.compaction.CompactionTaskManager;
import org.apache.iotdb.db.utils.MemUtils;
+import org.apache.iotdb.db.wal.WALManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,6 +35,11 @@ public class IoTDBShutdownHook extends Thread {
CompactionTaskManager.getInstance().stop();
// close rocksdb if possible to avoid lose data
IoTDB.configManager.clear();
+
+ // == flush data to Tsfile and remove WAL log files
+ StorageEngine.getInstance().syncCloseAllProcessor();
+ WALManager.getInstance().deleteOutdatedWALFiles();
+
if (logger.isInfoEnabled()) {
logger.info(
"IoTDB exits. Jvm memory usage: {}",