This is an automated email from the ASF dual-hosted git repository.

qiaojialin pushed a commit to branch acc_cache
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 8b783cb265544d019e5d298cd78c2a1c8c318528
Author: qiaojialin <[email protected]>
AuthorDate: Fri Jun 12 16:38:24 2020 +0800

    combine contains and get in cache
---
 .../apache/iotdb/db/engine/cache/ChunkCache.java    | 21 +++++++--------------
 .../iotdb/db/engine/cache/ChunkMetadataCache.java   | 11 +++++++----
 .../db/engine/cache/TimeSeriesMetadataCache.java    | 20 +++++++++++---------
 3 files changed, 25 insertions(+), 27 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
index d9ef0a9..c3a6431 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
@@ -93,40 +93,33 @@ public class ChunkCache {
 
     try {
       lock.readLock().lock();
-      if (lruCache.containsKey(chunkMetaData)) {
+      Chunk chunk = lruCache.get(chunkMetaData);
+      if (chunk != null) {
         cacheHitNum.incrementAndGet();
         printCacheLog(true);
-        Chunk chunk = lruCache.get(chunkMetaData);
         return new Chunk(chunk.getHeader(), chunk.getData().duplicate(), 
chunk.getDeletedAt());
       }
     } finally {
       lock.readLock().unlock();
     }
 
-    Lock cacheLock = lock.writeLock();
+    lock.writeLock().lock();
     try {
-      cacheLock.lock();
-      if (lruCache.containsKey(chunkMetaData)) {
-        try {
-          cacheLock = lock.readLock();
-          cacheLock.lock();
-        } finally {
-          lock.writeLock().unlock();
-        }
+      Chunk chunk = lruCache.get(chunkMetaData);
+      if (chunk != null) {
         cacheHitNum.incrementAndGet();
         printCacheLog(true);
-        Chunk chunk = lruCache.get(chunkMetaData);
         return new Chunk(chunk.getHeader(), chunk.getData().duplicate(), 
chunk.getDeletedAt());
       }
       printCacheLog(false);
-      Chunk chunk = reader.readMemChunk(chunkMetaData);
+      chunk = reader.readMemChunk(chunkMetaData);
       lruCache.put(chunkMetaData, chunk);
       return new Chunk(chunk.getHeader(), chunk.getData().duplicate(), 
chunk.getDeletedAt());
     } catch (IOException e) {
       logger.error("something wrong happened while reading {}", 
reader.getFileName());
       throw e;
     } finally {
-      cacheLock.unlock();
+      lock.writeLock().unlock();
     }
 
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java
index 623dfec..8802cbf 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.engine.cache;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.locks.ReadWriteLock;
@@ -131,10 +132,11 @@ public class ChunkMetadataCache {
 
     lock.readLock().lock();
     try {
-      if (lruCache.containsKey(key)) {
+      List<ChunkMetadata> chunkMetadataList = lruCache.get(key);
+      if (chunkMetadataList != null) {
         cacheHitNum.incrementAndGet();
         printCacheLog(true);
-        return new ArrayList<>(lruCache.get(key));
+        return new ArrayList<>(chunkMetadataList);
       }
     } finally {
       lock.readLock().unlock();
@@ -142,10 +144,11 @@ public class ChunkMetadataCache {
 
     lock.writeLock().lock();
     try {
-      if (lruCache.containsKey(key)) {
+      List<ChunkMetadata> chunkMetadataList = lruCache.get(key);
+      if (chunkMetadataList != null) {
         printCacheLog(true);
         cacheHitNum.incrementAndGet();
-        return new ArrayList<>(lruCache.get(key));
+        return new ArrayList<>(chunkMetadataList);
       }
       printCacheLog(false);
       // bloom filter part
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 aa3a846..c80eed6 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
@@ -114,10 +114,11 @@ public class TimeSeriesMetadataCache {
 
     try {
       lock.readLock().lock();
-      if (lruCache.containsKey(key)) {
+      TimeseriesMetadata timeseriesMetadata = lruCache.get(key);
+      if (timeseriesMetadata != null) {
         cacheHitNum.incrementAndGet();
         printCacheLog(true);
-        return new TimeseriesMetadata(lruCache.get(key));
+        return new TimeseriesMetadata(timeseriesMetadata);
       }
     } finally {
       lock.readLock().unlock();
@@ -125,10 +126,11 @@ public class TimeSeriesMetadataCache {
 
     try {
       lock.writeLock().lock();
-      if (lruCache.containsKey(key)) {
+      TimeseriesMetadata tsMetadata = lruCache.get(key);
+      if (tsMetadata != null) {
         cacheHitNum.incrementAndGet();
         printCacheLog(true);
-        return new TimeseriesMetadata(lruCache.get(key));
+        return new TimeseriesMetadata(tsMetadata);
       }
       printCacheLog(false);
       // bloom filter part
@@ -141,14 +143,14 @@ public class TimeSeriesMetadataCache {
       List<TimeseriesMetadata> timeSeriesMetadataList = reader
           .readTimeseriesMetadata(key.device, allSensors);
       // put TimeSeriesMetadata of all sensors used in this query into cache
-      timeSeriesMetadataList.forEach(timeseriesMetadata ->
+      timeSeriesMetadataList.forEach(t ->
           lruCache.put(new TimeSeriesMetadataCacheKey(key.filePath, key.device,
-              timeseriesMetadata.getMeasurementId()), timeseriesMetadata));
-      TimeseriesMetadata metadata = lruCache.get(key);
-      if (metadata == null) {
+              t.getMeasurementId()), t));
+      tsMetadata = lruCache.get(key);
+      if (tsMetadata == null) {
         return null;
       } else {
-        return new TimeseriesMetadata(metadata);
+        return new TimeseriesMetadata(tsMetadata);
       }
     } catch (IOException e) {
       logger.error("something wrong happened while reading {}", key.filePath);

Reply via email to