This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch CacheBug in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 49cba854b2778a749c2c31922c1f0a1622b70e09 Author: JackieTien97 <[email protected]> AuthorDate: Tue Oct 27 18:37:13 2020 +0800 improve chunk metadata cache --- .../apache/iotdb/db/engine/cache/ChunkMetadataCache.java | 15 +++++---------- .../reader/chunk/metadata/DiskChunkMetadataLoader.java | 9 +++++---- .../reader/chunk/metadata/MemChunkMetadataLoader.java | 3 ++- .../iotdb/tsfile/file/metadata/TimeseriesMetadata.java | 2 +- .../tsfile/read/controller/IChunkMetadataLoader.java | 3 ++- 5 files changed, 15 insertions(+), 17 deletions(-) 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 4ff58e7..1d511d7 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 @@ -33,6 +33,7 @@ import org.apache.iotdb.db.query.control.FileReaderManager; import org.apache.iotdb.db.utils.FileLoaderUtils; import org.apache.iotdb.db.utils.TestOnly; import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata; +import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata; import org.apache.iotdb.tsfile.read.TsFileSequenceReader; import org.apache.iotdb.tsfile.read.common.Path; import org.apache.iotdb.tsfile.utils.BloomFilter; @@ -106,8 +107,8 @@ public class ChunkMetadataCache { /** * get {@link ChunkMetadata}. THREAD SAFE. */ - public List<ChunkMetadata> get(String filePath, Path seriesPath) - throws IOException { + public List<ChunkMetadata> get(String filePath, Path seriesPath, + TimeseriesMetadata timeSeriesMetadata) throws IOException { if (!CACHE_ENABLE) { // bloom filter part TsFileSequenceReader tsFileReader = FileReaderManager.getInstance().get(filePath, true); @@ -121,7 +122,7 @@ public class ChunkMetadataCache { return new ArrayList<>(); } // If timeseries isn't included in the tsfile, empty list is returned. - return tsFileReader.getChunkMetadataList(seriesPath); + return tsFileReader.readChunkMetaDataList(timeSeriesMetadata); } AccountableString key = new AccountableString(filePath + IoTDBConstant.PATH_SEPARATOR @@ -137,19 +138,13 @@ public class ChunkMetadataCache { lock.readLock().unlock(); } - if (chunkMetadataList != null) { printCacheLog(true); cacheHitNum.incrementAndGet(); } else { printCacheLog(false); - // bloom filter part TsFileSequenceReader tsFileReader = FileReaderManager.getInstance().get(filePath, true); - BloomFilter bloomFilter = tsFileReader.readBloomFilter(); - if (bloomFilter != null && !bloomFilter.contains(seriesPath.getFullPath())) { - return new ArrayList<>(); - } - chunkMetadataList = FileLoaderUtils.getChunkMetadataList(seriesPath, filePath); + chunkMetadataList = tsFileReader.readChunkMetaDataList(timeSeriesMetadata); lock.writeLock().lock(); try { lruCache.put(key, chunkMetadataList); diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/DiskChunkMetadataLoader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/DiskChunkMetadataLoader.java index 877647b..6b2bfa9 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/DiskChunkMetadataLoader.java +++ b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/DiskChunkMetadataLoader.java @@ -18,6 +18,8 @@ */ package org.apache.iotdb.db.query.reader.chunk.metadata; +import java.io.IOException; +import java.util.List; import org.apache.iotdb.db.engine.cache.ChunkMetadataCache; import org.apache.iotdb.db.engine.modification.Modification; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; @@ -25,11 +27,10 @@ import org.apache.iotdb.db.query.context.QueryContext; import org.apache.iotdb.db.query.reader.chunk.DiskChunkLoader; import org.apache.iotdb.db.utils.QueryUtils; import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata; +import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata; import org.apache.iotdb.tsfile.read.common.Path; import org.apache.iotdb.tsfile.read.controller.IChunkMetadataLoader; import org.apache.iotdb.tsfile.read.filter.basic.Filter; -import java.io.IOException; -import java.util.List; public class DiskChunkMetadataLoader implements IChunkMetadataLoader { @@ -47,9 +48,9 @@ public class DiskChunkMetadataLoader implements IChunkMetadataLoader { } @Override - public List<ChunkMetadata> loadChunkMetadataList() throws IOException { + public List<ChunkMetadata> loadChunkMetadataList(TimeseriesMetadata timeseriesMetadata) throws IOException { List<ChunkMetadata> chunkMetadataList = ChunkMetadataCache - .getInstance().get(resource.getPath(), seriesPath); + .getInstance().get(resource.getPath(), seriesPath, timeseriesMetadata); setDiskChunkLoader(chunkMetadataList, resource, seriesPath, context); diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/MemChunkMetadataLoader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/MemChunkMetadataLoader.java index 8ab268c..aa1e7cb 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/MemChunkMetadataLoader.java +++ b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/MemChunkMetadataLoader.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.engine.querycontext.ReadOnlyMemChunk; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.query.context.QueryContext; import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata; +import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata; import org.apache.iotdb.tsfile.read.common.Path; import org.apache.iotdb.tsfile.read.controller.IChunkMetadataLoader; import org.apache.iotdb.tsfile.read.filter.basic.Filter; @@ -44,7 +45,7 @@ public class MemChunkMetadataLoader implements IChunkMetadataLoader { } @Override - public List<ChunkMetadata> loadChunkMetadataList() { + public List<ChunkMetadata> loadChunkMetadataList(TimeseriesMetadata timeseriesMetadata) { List<ChunkMetadata> chunkMetadataList = resource.getChunkMetadataList(); DiskChunkMetadataLoader.setDiskChunkLoader(chunkMetadataList, resource, seriesPath, context); diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java index 4893563..60dce34 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java @@ -130,7 +130,7 @@ public class TimeseriesMetadata implements Accountable { } public List<ChunkMetadata> loadChunkMetadataList() throws IOException { - return chunkMetadataLoader.loadChunkMetadataList(); + return chunkMetadataLoader.loadChunkMetadataList(this); } public boolean isModified() { diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IChunkMetadataLoader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IChunkMetadataLoader.java index f80c42f..9badcda 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IChunkMetadataLoader.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IChunkMetadataLoader.java @@ -22,13 +22,14 @@ import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata; import java.io.IOException; import java.util.List; +import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata; public interface IChunkMetadataLoader { /** * read all chunk metadata of one time series in one file. */ - List<ChunkMetadata> loadChunkMetadataList() throws IOException; + List<ChunkMetadata> loadChunkMetadataList(TimeseriesMetadata timeseriesMetadata) throws IOException; /** * For query 0.9/v1 tsfile only
