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: {}",