This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch Parallelism011 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 5ea2d80d29d237b1f23e11edef0c7174e10e19ff Author: JackieTien97 <[email protected]> AuthorDate: Sat Dec 19 11:08:53 2020 +0800 change parallelism in timeseries metadata cache --- .../iotdb/db/engine/cache/TimeSeriesMetadataCache.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) 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 8273476..05ecabd 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; @@ -60,6 +64,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,8 +134,9 @@ public class TimeSeriesMetadataCache { cacheHitNum.incrementAndGet(); printCacheLog(true); } else { - // allow for the parallelism of different devices - synchronized (key.device.intern()) { + // allow for the parallelism of different devices in different files + synchronized (devices + .computeIfAbsent(key.device + SEPARATOR + key.filePath, WeakReference::new)) { // double check lock.readLock().lock(); try {
