You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2020/12/22 02:58:02 UTC
[iotdb] 03/04: my
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch TimeSeriesMetadataCache
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 6699d55579d9bcdb81e29f8e74e0052a2fd00767
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Sun Dec 20 14:18:29 2020 +0800
my
---
.../src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java | 2 +-
.../apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java | 11 ++++++++++-
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 05c2c73..ddd925d 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -297,7 +297,7 @@ public class IoTDBConfig {
/**
* whether to cache meta data(ChunkMetaData and TsFileMetaData) or not.
*/
- private boolean metaDataCacheEnable = true;
+ private boolean metaDataCacheEnable = false;
/**
* Memory allocated for timeSeriesMetaData cache in read process
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
index d305fc8..ec4a0ae 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
@@ -20,9 +20,13 @@
package org.apache.iotdb.db.engine.cache;
import java.io.IOException;
+import java.lang.ref.WeakReference;
+import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Set;
+import java.util.WeakHashMap;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -59,6 +63,10 @@ public class TimeSeriesMetadataCache {
private final ReadWriteLock lock = new ReentrantReadWriteLock();
+ private final Map<String, WeakReference<String>> devices = Collections
+ .synchronizedMap(new WeakHashMap<>());
+ private static final String SEPARATOR = "$";
+
private TimeSeriesMetadataCache() {
if (CACHE_ENABLE) {
@@ -126,7 +134,8 @@ public class TimeSeriesMetadataCache {
printCacheLog(true);
} else {
// allow for the parallelism of different devices
- synchronized (key.device.intern()) {
+ synchronized (devices
+ .computeIfAbsent(key.device + SEPARATOR + key.filePath, WeakReference::new)) {
// double check
lock.readLock().lock();
try {