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

jackietien pushed a commit to branch ty/sonar
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/ty/sonar by this push:
     new f31bd373d43 
server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java done
f31bd373d43 is described below

commit f31bd373d4301e849b18cc89a30c04dc2f0a6c47
Author: JackieTien97 <[email protected]>
AuthorDate: Tue Jun 20 14:21:00 2023 +0800

    server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java done
---
 .../org/apache/iotdb/db/utils/FileLoaderUtils.java | 153 ++++++++++++---------
 .../file/metadata/AlignedTimeSeriesMetadata.java   |   3 +-
 .../tsfile/file/metadata/ITimeSeriesMetadata.java  |   3 +-
 .../tsfile/file/metadata/TimeseriesMetadata.java   |   6 +-
 .../read/controller/IChunkMetadataLoader.java      |   4 +-
 5 files changed, 91 insertions(+), 78 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java 
b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
index 8371584bb66..313386674d3 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 package org.apache.iotdb.db.utils;
 
 import org.apache.iotdb.commons.path.AlignedPath;
@@ -109,10 +110,13 @@ public class FileLoaderUtils {
   }
 
   /**
+   * Load TimeSeriesMetadata for non-aligned time series
+   *
    * @param resource TsFile
    * @param seriesPath Timeseries path
    * @param allSensors measurements queried at the same time of this device
    * @param filter any filter, only used to check time range
+   * @throws IOException IOException may be thrown while reading it from disk.
    */
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   public static TimeseriesMetadata loadTimeSeriesMetadata(
@@ -187,75 +191,35 @@ public class FileLoaderUtils {
   }
 
   /**
-   * Load VectorTimeSeriesMetadata for Vector
+   * Load AlignedTimeSeriesMetadata for aligned time series.
    *
    * @param resource corresponding TsFileResource
-   * @param vectorPath instance of VectorPartialPath, vector's full path, e.g. 
(root.sg1.d1.vector,
+   * @param alignedPath instance of VectorPartialPath, vector's full path, 
e.g. (root.sg1.d1.vector,
    *     [root.sg1.d1.vector.s1, root.sg1.d1.vector.s2])
+   * @throws IOException IOException may be thrown while reading it from disk.
    */
   public static AlignedTimeSeriesMetadata loadTimeSeriesMetadata(
-      TsFileResource resource, AlignedPath vectorPath, QueryContext context, 
Filter filter)
+      TsFileResource resource, AlignedPath alignedPath, QueryContext context, 
Filter filter)
       throws IOException {
-    long t1 = System.nanoTime();
+    final long t1 = System.nanoTime();
     boolean loadFromMem = false;
     try {
-      AlignedTimeSeriesMetadata alignedTimeSeriesMetadata = null;
+      AlignedTimeSeriesMetadata alignedTimeSeriesMetadata;
       // If the tsfile is closed, we need to load from tsfile
       if (resource.isClosed()) {
-        // load all the TimeseriesMetadata of vector, the first one is for 
time column and the
-        // remaining is for sub sensors
-        // the order of timeSeriesMetadata list is same as subSensorList's 
order
-        TimeSeriesMetadataCache cache = TimeSeriesMetadataCache.getInstance();
-        List<String> valueMeasurementList = vectorPath.getMeasurementList();
-        Set<String> allSensors = new HashSet<>(valueMeasurementList);
-        allSensors.add("");
-        boolean isDebug = context.isDebug();
-        String filePath = resource.getTsFilePath();
-        String deviceId = vectorPath.getDevice();
-
-        // when resource.getTimeIndexType() == 1, TsFileResource.timeIndexType 
is deviceTimeIndex
-        // we should not ignore the non-exist of device in TsFileMetadata
-        TimeseriesMetadata timeColumn =
-            cache.get(
-                new TimeSeriesMetadataCacheKey(filePath, deviceId, ""),
-                allSensors,
-                resource.getTimeIndexType() != 1,
-                isDebug);
-        if (timeColumn != null) {
-          List<TimeseriesMetadata> valueTimeSeriesMetadataList =
-              new ArrayList<>(valueMeasurementList.size());
-          // if all the queried aligned sensors does not exist, we will return 
null
-          boolean exist = false;
-          for (String valueMeasurement : valueMeasurementList) {
-            TimeseriesMetadata valueColumn =
-                cache.get(
-                    new TimeSeriesMetadataCacheKey(filePath, deviceId, 
valueMeasurement),
-                    allSensors,
-                    resource.getTimeIndexType() != 1,
-                    isDebug);
-            exist = (exist || (valueColumn != null));
-            valueTimeSeriesMetadataList.add(valueColumn);
-          }
-          if (exist) {
-            alignedTimeSeriesMetadata =
-                new AlignedTimeSeriesMetadata(timeColumn, 
valueTimeSeriesMetadataList);
-            alignedTimeSeriesMetadata.setChunkMetadataLoader(
-                new DiskAlignedChunkMetadataLoader(resource, vectorPath, 
context, filter));
-          }
-        }
+        alignedTimeSeriesMetadata = loadFromDisk(resource, alignedPath, 
context, filter);
       } else { // if the tsfile is unclosed, we just get it directly from 
TsFileResource
         loadFromMem = true;
-
         alignedTimeSeriesMetadata =
-            (AlignedTimeSeriesMetadata) 
resource.getTimeSeriesMetadata(vectorPath);
+            (AlignedTimeSeriesMetadata) 
resource.getTimeSeriesMetadata(alignedPath);
         if (alignedTimeSeriesMetadata != null) {
           alignedTimeSeriesMetadata.setChunkMetadataLoader(
-              new MemAlignedChunkMetadataLoader(resource, vectorPath, context, 
filter));
+              new MemAlignedChunkMetadataLoader(resource, alignedPath, 
context, filter));
         }
       }
 
       if (alignedTimeSeriesMetadata != null) {
-        long t2 = System.nanoTime();
+        final long t2 = System.nanoTime();
         try {
           if 
(alignedTimeSeriesMetadata.getTimeseriesMetadata().getStatistics().getStartTime()
               > 
alignedTimeSeriesMetadata.getTimeseriesMetadata().getStatistics().getEndTime()) 
{
@@ -269,19 +233,7 @@ public class FileLoaderUtils {
           }
 
           // set modifications to each aligned path
-          List<TimeseriesMetadata> valueTimeSeriesMetadataList =
-              alignedTimeSeriesMetadata.getValueTimeseriesMetadataList();
-          boolean modified = false;
-          for (int i = 0; i < valueTimeSeriesMetadataList.size(); i++) {
-            if (valueTimeSeriesMetadataList.get(i) != null) {
-              List<Modification> pathModifications =
-                  context.getPathModifications(
-                      resource.getModFile(), 
vectorPath.getPathWithMeasurement(i));
-              
valueTimeSeriesMetadataList.get(i).setModified(!pathModifications.isEmpty());
-              modified = (modified || !pathModifications.isEmpty());
-            }
-          }
-          
alignedTimeSeriesMetadata.getTimeseriesMetadata().setModified(modified);
+          setModifications(resource, alignedTimeSeriesMetadata, alignedPath, 
context);
         } finally {
           SERIES_SCAN_COST_METRIC_SET.recordSeriesScanCost(
               TIMESERIES_METADATA_MODIFICATION_ALIGNED, System.nanoTime() - 
t2);
@@ -297,21 +249,90 @@ public class FileLoaderUtils {
     }
   }
 
+  private static AlignedTimeSeriesMetadata loadFromDisk(
+      TsFileResource resource, AlignedPath alignedPath, QueryContext context, 
Filter filter)
+      throws IOException {
+    AlignedTimeSeriesMetadata alignedTimeSeriesMetadata = null;
+    // load all the TimeseriesMetadata of vector, the first one is for time 
column and the
+    // remaining is for sub sensors
+    // the order of timeSeriesMetadata list is same as subSensorList's order
+    TimeSeriesMetadataCache cache = TimeSeriesMetadataCache.getInstance();
+    List<String> valueMeasurementList = alignedPath.getMeasurementList();
+    Set<String> allSensors = new HashSet<>(valueMeasurementList);
+    allSensors.add("");
+    boolean isDebug = context.isDebug();
+    String filePath = resource.getTsFilePath();
+    String deviceId = alignedPath.getDevice();
+
+    // when resource.getTimeIndexType() == 1, TsFileResource.timeIndexType is 
deviceTimeIndex
+    // we should not ignore the non-exist of device in TsFileMetadata
+    TimeseriesMetadata timeColumn =
+        cache.get(
+            new TimeSeriesMetadataCacheKey(filePath, deviceId, ""),
+            allSensors,
+            resource.getTimeIndexType() != 1,
+            isDebug);
+    if (timeColumn != null) {
+      List<TimeseriesMetadata> valueTimeSeriesMetadataList =
+          new ArrayList<>(valueMeasurementList.size());
+      // if all the queried aligned sensors does not exist, we will return null
+      boolean exist = false;
+      for (String valueMeasurement : valueMeasurementList) {
+        TimeseriesMetadata valueColumn =
+            cache.get(
+                new TimeSeriesMetadataCacheKey(filePath, deviceId, 
valueMeasurement),
+                allSensors,
+                resource.getTimeIndexType() != 1,
+                isDebug);
+        exist = (exist || (valueColumn != null));
+        valueTimeSeriesMetadataList.add(valueColumn);
+      }
+      if (exist) {
+        alignedTimeSeriesMetadata =
+            new AlignedTimeSeriesMetadata(timeColumn, 
valueTimeSeriesMetadataList);
+        alignedTimeSeriesMetadata.setChunkMetadataLoader(
+            new DiskAlignedChunkMetadataLoader(resource, alignedPath, context, 
filter));
+      }
+    }
+    return alignedTimeSeriesMetadata;
+  }
+
+  private static void setModifications(
+      TsFileResource resource,
+      AlignedTimeSeriesMetadata alignedTimeSeriesMetadata,
+      AlignedPath alignedPath,
+      QueryContext context) {
+    List<TimeseriesMetadata> valueTimeSeriesMetadataList =
+        alignedTimeSeriesMetadata.getValueTimeseriesMetadataList();
+    boolean modified = false;
+    for (int i = 0; i < valueTimeSeriesMetadataList.size(); i++) {
+      if (valueTimeSeriesMetadataList.get(i) != null) {
+        List<Modification> pathModifications =
+            context.getPathModifications(
+                resource.getModFile(), alignedPath.getPathWithMeasurement(i));
+        
valueTimeSeriesMetadataList.get(i).setModified(!pathModifications.isEmpty());
+        modified = (modified || !pathModifications.isEmpty());
+      }
+    }
+    alignedTimeSeriesMetadata.getTimeseriesMetadata().setModified(modified);
+  }
+
   /**
    * load all chunk metadata of one time series in one file.
    *
    * @param timeSeriesMetadata the corresponding TimeSeriesMetadata in that 
file.
    */
-  public static List<IChunkMetadata> loadChunkMetadataList(ITimeSeriesMetadata 
timeSeriesMetadata)
-      throws IOException {
+  public static List<IChunkMetadata> loadChunkMetadataList(ITimeSeriesMetadata 
timeSeriesMetadata) {
     return timeSeriesMetadata.loadChunkMetadataList();
   }
 
   /**
-   * load all page readers in one chunk that satisfying the timeFilter
+   * load all page readers in one chunk that satisfying the timeFilter.
    *
    * @param chunkMetaData the corresponding chunk metadata
    * @param timeFilter it should be a TimeFilter instead of a ValueFilter
+   * @throws IOException if chunkMetaData is null or errors happened while 
loading page readers,
+   *     IOException will be thrown
    */
   public static List<IPageReader> loadPageReaderList(
       IChunkMetadata chunkMetaData, Filter timeFilter) throws IOException {
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
index f49d8142691..add0c7f5030 100644
--- 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
+++ 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.tsfile.file.metadata;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.controller.IChunkMetadataLoader;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -107,7 +106,7 @@ public class AlignedTimeSeriesMetadata implements 
ITimeSeriesMetadata {
    * the subSensors to generate the VectorChunkMetadata
    */
   @Override
-  public List<IChunkMetadata> loadChunkMetadataList() throws IOException {
+  public List<IChunkMetadata> loadChunkMetadataList() {
     return chunkMetadataLoader.loadChunkMetadataList(this);
   }
 
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
index e7b85489460..6b6bbc31730 100644
--- 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
+++ 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.tsfile.file.metadata;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.controller.IChunkMetadataLoader;
 
-import java.io.IOException;
 import java.util.List;
 
 public interface ITimeSeriesMetadata {
@@ -37,7 +36,7 @@ public interface ITimeSeriesMetadata {
   void setSeq(boolean seq);
 
   /** @return the result has already been filtered by modification files */
-  List<IChunkMetadata> loadChunkMetadataList() throws IOException;
+  List<IChunkMetadata> loadChunkMetadataList();
 
   void setChunkMetadataLoader(IChunkMetadataLoader chunkMetadataLoader);
 }
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 2b010e25f6e..b2c98378ab1 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
@@ -230,12 +230,8 @@ public class TimeseriesMetadata implements 
ITimeSeriesMetadata {
     this.chunkMetadataLoader = chunkMetadataLoader;
   }
 
-  public IChunkMetadataLoader getChunkMetadataLoader() {
-    return chunkMetadataLoader;
-  }
-
   @Override
-  public List<IChunkMetadata> loadChunkMetadataList() throws IOException {
+  public List<IChunkMetadata> loadChunkMetadataList() {
     return chunkMetadataLoader.loadChunkMetadataList(this);
   }
 
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 fffe261bea7..5d8421637b4 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
@@ -21,12 +21,10 @@ package org.apache.iotdb.tsfile.read.controller;
 import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
 import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata;
 
-import java.io.IOException;
 import java.util.List;
 
 public interface IChunkMetadataLoader {
 
   /** read all chunk metadata of one time series in one file. */
-  List<IChunkMetadata> loadChunkMetadataList(ITimeSeriesMetadata 
timeSeriesMetadata)
-      throws IOException;
+  List<IChunkMetadata> loadChunkMetadataList(ITimeSeriesMetadata 
timeSeriesMetadata);
 }

Reply via email to