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

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


The following commit(s) were added to refs/heads/master by this push:
     new a5e9dd0  Accelerate cache usage: combine get and contains (#1356)
a5e9dd0 is described below

commit a5e9dd0fe98db9757e95fa792006a991a37752b6
Author: Jialin Qiao <[email protected]>
AuthorDate: Sat Jun 13 15:55:33 2020 +0800

    Accelerate cache usage: combine get and contains (#1356)
    
    * combine contains and get in cache
---
 .../apache/iotdb/db/engine/cache/ChunkCache.java   | 22 +++++++---------------
 .../iotdb/db/engine/cache/ChunkMetadataCache.java  | 10 ++++++----
 .../db/engine/cache/TimeSeriesMetadataCache.java   | 20 +++++++++++---------
 3 files changed, 24 insertions(+), 28 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..9cc8875 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
@@ -21,7 +21,6 @@ package org.apache.iotdb.db.engine.cache;
 
 import java.io.IOException;
 import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -93,40 +92,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..dcb3cc8 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
@@ -131,10 +131,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 +143,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