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

hxd 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 b9b3ea7  [ISSUE-2911]Fix The write stream is not closed when executing 
the command 'tracing off' (#2961)
b9b3ea7 is described below

commit b9b3ea7617d21d806fb9862093e9707c99f94f9f
Author: liuhai <[email protected]>
AuthorDate: Fri Apr 2 13:17:13 2021 +0800

    [ISSUE-2911]Fix The write stream is not closed when executing the command 
'tracing off' (#2961)
---
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |  9 ++++++++
 .../iotdb/db/query/control/TracingManager.java     | 27 +++++++++++++++++++---
 .../iotdb/db/query/control/TracingManagerTest.java |  3 +++
 3 files changed, 36 insertions(+), 3 deletions(-)

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 54a0bf7..f0f7e0e 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
@@ -106,6 +106,7 @@ import org.apache.iotdb.db.qp.physical.sys.TracingPlan;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.QueryTimeManager;
 import org.apache.iotdb.db.query.control.QueryTimeManager.QueryInfo;
+import org.apache.iotdb.db.query.control.TracingManager;
 import org.apache.iotdb.db.query.dataset.AlignByDeviceDataSet;
 import org.apache.iotdb.db.query.dataset.ListDataSet;
 import org.apache.iotdb.db.query.dataset.ShowDevicesDataSet;
@@ -409,8 +410,16 @@ public class PlanExecutor implements IPlanExecutor {
     }
   }
 
+  /** when tracing off need Close the stream */
   private void operateTracing(TracingPlan plan) {
     
IoTDBDescriptor.getInstance().getConfig().setEnablePerformanceTracing(plan.isTracingOn());
+    if (!plan.isTracingOn()) {
+      TracingManager.getInstance().close();
+    } else {
+      if (!TracingManager.getInstance().getWriterStatus()) {
+        TracingManager.getInstance().openTracingWriteStream();
+      }
+    }
   }
 
   private void operateFlush(FlushPlan plan) throws StorageGroupNotSetException 
{
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/control/TracingManager.java 
b/server/src/main/java/org/apache/iotdb/db/query/control/TracingManager.java
index 0cb5e7a..450c4f4 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/control/TracingManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/control/TracingManager.java
@@ -45,6 +45,10 @@ public class TracingManager {
   private Map<Long, Long> queryStartTime = new ConcurrentHashMap<>();
 
   public TracingManager(String dirName, String logFileName) {
+    initTracingManager(dirName, logFileName);
+  }
+
+  public void initTracingManager(String dirName, String logFileName) {
     File tracingDir = SystemFileFactory.INSTANCE.getFile(dirName);
     if (!tracingDir.exists()) {
       if (tracingDir.mkdirs()) {
@@ -54,7 +58,6 @@ public class TracingManager {
       }
     }
     File logFile = SystemFileFactory.INSTANCE.getFile(dirName + File.separator 
+ logFileName);
-
     FileWriter fileWriter = null;
     try {
       fileWriter = new FileWriter(logFile, true);
@@ -198,8 +201,26 @@ public class TracingManager {
     writer.flush();
   }
 
-  public void close() throws IOException {
-    writer.close();
+  public void close() {
+    try {
+      writer.close();
+    } catch (IOException e) {
+      logger.error("Meeting error while Close the tracing log stream : {}", 
e.getMessage());
+    }
+  }
+
+  public boolean getWriterStatus() {
+    try {
+      writer.flush();
+      return true;
+    } catch (IOException e) {
+      return false;
+    }
+  }
+
+  public void openTracingWriteStream() {
+    initTracingManager(
+        IoTDBDescriptor.getInstance().getConfig().getTracingDir(), 
IoTDBConstant.TRACING_LOG);
   }
 
   private static class TracingManagerHelper {
diff --git 
a/server/src/test/java/org/apache/iotdb/db/query/control/TracingManagerTest.java
 
b/server/src/test/java/org/apache/iotdb/db/query/control/TracingManagerTest.java
index c1783e3..3f1f0a9 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/query/control/TracingManagerTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/query/control/TracingManagerTest.java
@@ -64,6 +64,9 @@ public class TracingManagerTest {
 
   @Test
   public void tracingQueryTest() throws IOException {
+    if (!tracingManager.getWriterStatus()) {
+      tracingManager.openTracingWriteStream();
+    }
     String[] ans = {
       "Query Id: 10 - Query Statement: " + sql,
       "Query Id: 10 - Start time: 2020-12-",

Reply via email to