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);
