This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch rel/1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.1 by this push:
new 1ba56299057 Fix a concurrent bug when recover last flush time and
compact (#10839) (#10850)
1ba56299057 is described below
commit 1ba56299057309c464e93c4b5839fafb52842565
Author: Haonan <[email protected]>
AuthorDate: Mon Aug 14 17:29:41 2023 +0800
Fix a concurrent bug when recover last flush time and compact (#10839)
(#10850)
---
.../db/engine/storagegroup/HashLastFlushTimeMap.java | 14 +-------------
.../iotdb/db/engine/storagegroup/TsFileManager.java | 17 +++++++++++++++++
2 files changed, 18 insertions(+), 13 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/HashLastFlushTimeMap.java
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/HashLastFlushTimeMap.java
index 1dfb5a9a9de..db42b87baeb 100644
---
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/HashLastFlushTimeMap.java
+++
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/HashLastFlushTimeMap.java
@@ -23,9 +23,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
-import java.util.Set;
public class HashLastFlushTimeMap implements ILastFlushTimeMap {
@@ -225,19 +223,9 @@ public class HashLastFlushTimeMap implements
ILastFlushTimeMap {
}
private long recoverFlushTime(long partitionId, String devicePath) {
- List<TsFileResource> tsFileResourceList =
- tsFileManager.getOrCreateSequenceListByTimePartition(partitionId);
-
- for (int i = tsFileResourceList.size() - 1; i >= 0; i--) {
- Set<String> deviceSet = tsFileResourceList.get(i).getDevices();
- if (deviceSet.contains(devicePath)) {
- return tsFileResourceList.get(i).getEndTime(devicePath);
- }
- }
-
long memCost = HASHMAP_NODE_BASIC_SIZE + 2L * devicePath.length();
memCostForEachPartition.compute(partitionId, (k, v) -> v == null ? memCost
: v + memCost);
- return Long.MIN_VALUE;
+ return tsFileManager.recoverFlushTimeFromTsFileResource(partitionId,
devicePath);
}
@Override
diff --git
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileManager.java
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileManager.java
index c8ff4534099..a903aef42ff 100644
---
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileManager.java
+++
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileManager.java
@@ -103,6 +103,23 @@ public class TsFileManager {
}
}
+ public long recoverFlushTimeFromTsFileResource(long partitionId, String
devicePath) {
+ writeLock("recoverFlushTimeFromTsFileResource");
+ try {
+ List<TsFileResource> tsFileResourceList =
+ sequenceFiles.computeIfAbsent(partitionId, l -> new
TsFileResourceList());
+ for (int i = tsFileResourceList.size() - 1; i >= 0; i--) {
+ Set<String> deviceSet = tsFileResourceList.get(i).getDevices();
+ if (deviceSet.contains(devicePath)) {
+ return tsFileResourceList.get(i).getEndTime(devicePath);
+ }
+ }
+ } finally {
+ writeUnlock();
+ }
+ return Long.MIN_VALUE;
+ }
+
public Iterator<TsFileResource> getIterator(boolean sequence) {
readLock();
try {