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