This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch rel/0.11
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.11 by this push:
new fa67fc5 change parallelism in timeseries metadata cache (#2290)
fa67fc5 is described below
commit fa67fc5d6bba95a48b36fd16b49c1cfd8cacd18f
Author: Jackie Tien <[email protected]>
AuthorDate: Sat Dec 19 14:02:09 2020 +0800
change parallelism in timeseries metadata cache (#2290)
---
.../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 {