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