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

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


The following commit(s) were added to refs/heads/master by this push:
     new d079a4d  [IOTDB-471] fix and try to locate latestTimeForEachDevice 
null pointer bug (#800)
d079a4d is described below

commit d079a4d1cc0650524d03065cebc527d9a1226d10
Author: SilverNarcissus <[email protected]>
AuthorDate: Thu Feb 13 20:14:14 2020 +0800

    [IOTDB-471] fix and try to locate latestTimeForEachDevice null pointer bug 
(#800)
---
 .../iotdb/db/engine/memtable/WritableMemChunk.java       | 15 +++++++++++++++
 .../db/engine/storagegroup/StorageGroupProcessor.java    | 16 +++++++++++++---
 .../iotdb/db/engine/storagegroup/TsFileProcessor.java    |  5 +++--
 3 files changed, 31 insertions(+), 5 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
index b2ba0a0..bcc0355 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
@@ -277,4 +277,19 @@ public class WritableMemChunk implements IWritableMemChunk 
{
   public void delete(long upperBound) {
     list.delete(upperBound);
   }
+
+  @Override
+  public String toString() {
+    int size = getSortedTimeValuePairList().size();
+    StringBuilder out = new StringBuilder("MemChunk Size: " + size + 
System.lineSeparator());
+    if (size != 0) {
+      out.append("Data type:").append(dataType).append(System.lineSeparator());
+      out.append("First value:").append(getSortedTimeValuePairList().get(0))
+          .append(System.lineSeparator());
+      out.append("Last value:").append(getSortedTimeValuePairList().get(size - 
1))
+          .append(System.lineSeparator());
+      ;
+    }
+    return out.toString();
+  }
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
index 4b6bed8..86a21f8 100755
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
@@ -1234,9 +1234,19 @@ public class StorageGroupProcessor {
 
   private boolean updateLatestFlushTimeCallback(TsFileProcessor processor) {
     // update the largest timestamp in the last flushing memtable
-    for (Entry<String, Long> entry : 
latestTimeForEachDevice.get(processor.getTimeRangeId())
-        .entrySet()) {
-      latestFlushedTimeForEachDevice.get(processor.getTimeRangeId())
+    Map<String, Long> curPartitionDeviceLatestTime = latestTimeForEachDevice
+        .get(processor.getTimeRangeId());
+
+    if (curPartitionDeviceLatestTime == null) {
+      logger.error("Partition: " + processor.getTimeRangeId() +
+          " does't have latest time for each device record. Flushing tsfile 
is: "
+          + processor.getTsFileResource().getFile());
+      return false;
+    }
+
+    for (Entry<String, Long> entry : curPartitionDeviceLatestTime.entrySet()) {
+      latestFlushedTimeForEachDevice
+          .computeIfAbsent(processor.getTimeRangeId(), id -> new HashMap<>())
           .put(entry.getKey(), entry.getValue());
     }
     return true;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
index a90debd..2927c33 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
@@ -392,7 +392,9 @@ public class TsFileProcessor {
    * flushManager again.
    */
   private void addAMemtableIntoFlushingList(IMemTable tobeFlushed) throws 
IOException {
-    updateLatestFlushTimeCallback.call(this);
+    if(!updateLatestFlushTimeCallback.call(this)){
+      logger.error("Memetable info: " + tobeFlushed.getMemTableMap());
+    }
     flushingMemTables.addLast(tobeFlushed);
     long cur = versionController.nextVersion();
     tobeFlushed.setVersion(cur);
@@ -505,7 +507,6 @@ public class TsFileProcessor {
     tsFileResource.serialize();
     writer.endFile(schema);
     tsFileResource.cleanCloseFlag();
-    tsFileResource.close();
 
     // remove this processor from Closing list in StorageGroupProcessor,
     // mark the TsFileResource closed, no need writer anymore

Reply via email to