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-",