You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2019/04/12 09:35:28 UTC

[incubator-iotdb] branch refactor_mem_control updated: undo time update when insertion failed

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

jiangtian pushed a commit to branch refactor_mem_control
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git


The following commit(s) were added to refs/heads/refactor_mem_control by this push:
     new 77bb08f  undo time update when insertion failed
77bb08f is described below

commit 77bb08f2ebc2263646f3b8e7af066dceb635e885
Author: 江天 <jt...@163.com>
AuthorDate: Fri Apr 12 17:34:15 2019 +0800

    undo time update when insertion failed
---
 .../db/engine/bufferwrite/BufferWriteProcessor.java      |  6 +++++-
 .../apache/iotdb/db/engine/filenode/FileNodeManager.java |  6 ++++++
 .../iotdb/db/engine/filenode/FileNodeProcessor.java      | 16 ++++++++++++++++
 .../apache/iotdb/db/engine/filenode/TsFileResource.java  |  4 ++++
 .../org/apache/iotdb/db/service/IoTDBShutdownHook.java   | 10 +++++++---
 5 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/bufferwrite/BufferWriteProcessor.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/bufferwrite/BufferWriteProcessor.java
index 91ace85..d5fcb05 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/bufferwrite/BufferWriteProcessor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/bufferwrite/BufferWriteProcessor.java
@@ -192,7 +192,11 @@ public class BufferWriteProcessor extends Processor {
               dataPoint.getValue().toString());
         }
         valueCount++;
-        checkMemThreshold4Flush(memUsage);
+        try {
+          flush();
+        } catch (IOException e) {
+          throw new BufferWriteProcessorException(e);
+        }
         return true;
       case DANGEROUS:
       default:
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java
index 76e1f2f..12264f4 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java
@@ -420,6 +420,9 @@ public class FileNodeManager implements IStatistic, IService {
     // write wal
     writeLog(tsRecord, isMonitor, bufferWriteProcessor.getLogNode());
     // Write data
+    long prevStartTime = fileNodeProcessor.getIntervalFileNodeStartTime(deviceId);
+    long prevUpdateTime = fileNodeProcessor.getLastUpdateTime(deviceId);
+
     fileNodeProcessor.setIntervalFileNodeStartTime(deviceId);
     fileNodeProcessor.setLastUpdateTime(deviceId, timestamp);
     try {
@@ -428,6 +431,9 @@ public class FileNodeManager implements IStatistic, IService {
       if (!isMonitor) {
         updateStatHashMapWhenFail(tsRecord);
       }
+      // undo time update
+      fileNodeProcessor.setIntervalFileNodeStartTime(deviceId, prevStartTime);
+      fileNodeProcessor.setLastUpdateTime(deviceId, prevUpdateTime);
       throw new FileNodeManagerException(e);
     }
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
index 6818a79..47aca8e 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
@@ -371,6 +371,19 @@ public class FileNodeProcessor extends Processor implements IStatistic {
     }
   }
 
+  void setIntervalFileNodeStartTime(String deviceId, long time) {
+    if (time != -1) {
+      currentTsFileResource.setStartTime(deviceId, time);
+    } else {
+      currentTsFileResource.removeTime(deviceId);
+      invertedIndexOfFiles.get(deviceId).remove(currentTsFileResource);
+    }
+  }
+
+  long getIntervalFileNodeStartTime(String deviceId) {
+    return currentTsFileResource.getStartTime(deviceId);
+  }
+
   /**
    * clear filenode.
    */
@@ -587,6 +600,9 @@ public class FileNodeProcessor extends Processor implements IStatistic {
     if (!lastUpdateTimeMap.containsKey(deviceId) || lastUpdateTimeMap.get(deviceId) < timestamp) {
       lastUpdateTimeMap.put(deviceId, timestamp);
     }
+    if (timestamp == -1) {
+      lastUpdateTimeMap.remove(deviceId);
+    }
   }
 
   /**
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/TsFileResource.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/TsFileResource.java
index 2806256..c349c62 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/TsFileResource.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/TsFileResource.java
@@ -169,6 +169,10 @@ public class TsFileResource {
     }
   }
 
+  public void removeStartTime(String deviceId) {
+    startTimeMap.remove(deviceId);
+  }
+
   public Map<String, Long> getStartTimeMap() {
 
     return startTimeMap;
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java b/iotdb/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
index b333c0e..c5f3024 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
@@ -19,6 +19,7 @@
 package org.apache.iotdb.db.service;
 
 import org.apache.iotdb.db.engine.memcontrol.BasicMemController;
+import org.apache.iotdb.db.utils.MemUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -28,8 +29,11 @@ public class IoTDBShutdownHook extends Thread{
 
   @Override
   public void run() {
-    LOGGER.info("Recorded memory usage: {}, actual jvm memory usage: {}",
-        BasicMemController.getInstance().getTotalUsage(), Runtime.getRuntime().totalMemory() -
-        Runtime.getRuntime().freeMemory());
+    if(LOGGER.isInfoEnabled()) {
+      LOGGER.info("Recorded memory usage: {}, actual jvm memory usage: {}",
+          MemUtils.bytesCntToStr(BasicMemController.getInstance().getTotalUsage()),
+          MemUtils.bytesCntToStr(Runtime.getRuntime().totalMemory() -
+              Runtime.getRuntime().freeMemory()));
+    }
   }
 }