You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2021/09/18 08:10:10 UTC

[iotdb] branch master updated: [ISSUE-3927] Inefficient Usage of JCF (#3926)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ed99733  [ISSUE-3927] Inefficient Usage of JCF (#3926)
ed99733 is described below

commit ed99733ba1472b59ff40601966008955ab72a086
Author: DittoTool <90...@users.noreply.github.com>
AuthorDate: Sat Sep 18 16:09:47 2021 +0800

    [ISSUE-3927] Inefficient Usage of JCF (#3926)
---
 .../log/manage/FilePartitionedSnapshotLogManager.java       | 12 +++++++-----
 .../cluster/log/manage/PartitionedSnapshotLogManager.java   |  5 ++++-
 .../java/org/apache/iotdb/jdbc/IoTDBPreparedStatement.java  |  4 ++--
 .../apache/iotdb/db/engine/merge/manage/MergeResource.java  |  4 +++-
 .../java/org/apache/iotdb/db/qp/executor/PlanExecutor.java  |  2 +-
 .../iotdb/db/query/executor/fill/LastPointReader.java       | 13 +++++++++++--
 6 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/FilePartitionedSnapshotLogManager.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/FilePartitionedSnapshotLogManager.java
index 39dbab8..fc09b8c 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/FilePartitionedSnapshotLogManager.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/FilePartitionedSnapshotLogManager.java
@@ -41,9 +41,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
+import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -130,11 +131,12 @@ public class FilePartitionedSnapshotLogManager extends PartitionedSnapshotLogMan
 
     // 2.register the measurement
     boolean slotExistsInPartition;
-    List<Integer> slots = null;
+    HashSet<Integer> slots = null;
     if (dataGroupMember.getMetaGroupMember() != null) {
       slots =
-          ((SlotPartitionTable) dataGroupMember.getMetaGroupMember().getPartitionTable())
-              .getNodeSlots(dataGroupMember.getHeader());
+          new HashSet<>(
+              ((SlotPartitionTable) dataGroupMember.getMetaGroupMember().getPartitionTable())
+                  .getNodeSlots(dataGroupMember.getHeader()));
     }
 
     for (Map.Entry<Integer, Collection<TimeseriesSchema>> entry : slotTimeseries.entrySet()) {
@@ -154,7 +156,7 @@ public class FilePartitionedSnapshotLogManager extends PartitionedSnapshotLogMan
     slotSnapshots.clear();
     Map<PartialPath, Map<Long, List<TsFileResource>>> allClosedStorageGroupTsFile =
         StorageEngine.getInstance().getAllClosedStorageGroupTsFile();
-    List<TsFileResource> createdHardlinks = new ArrayList<>();
+    List<TsFileResource> createdHardlinks = new LinkedList<>();
     // group the TsFiles by their slots
     for (Entry<PartialPath, Map<Long, List<TsFileResource>>> entry :
         allClosedStorageGroupTsFile.entrySet()) {
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/PartitionedSnapshotLogManager.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/PartitionedSnapshotLogManager.java
index 20535fe..04d7c07 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/PartitionedSnapshotLogManager.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/PartitionedSnapshotLogManager.java
@@ -44,6 +44,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
 
 /**
  * PartitionedSnapshotLogManager provides a PartitionedSnapshot as snapshot, dividing each log to a
@@ -97,13 +98,15 @@ public abstract class PartitionedSnapshotLogManager<T extends Snapshot> extends
   void collectTimeseriesSchemas(List<Integer> requiredSlots) {
     slotTimeseries.clear();
     List<IStorageGroupMNode> allSgNodes = IoTDB.metaManager.getAllStorageGroupNodes();
+
+    Set<Integer> requiredSlotsSet = new HashSet<Integer>(requiredSlots);
     for (IMNode sgNode : allSgNodes) {
       String storageGroupName = sgNode.getFullPath();
       int slot =
           SlotPartitionTable.getSlotStrategy()
               .calculateSlotByTime(storageGroupName, 0, ClusterConstant.SLOT_NUM);
 
-      if (!requiredSlots.contains(slot)) {
+      if (!requiredSlotsSet.contains(slot)) {
         continue;
       }
       Collection<TimeseriesSchema> schemas =
diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBPreparedStatement.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBPreparedStatement.java
index aa7e130..12d4fc5 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBPreparedStatement.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBPreparedStatement.java
@@ -55,7 +55,7 @@ import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.LinkedHashMap;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -67,7 +67,7 @@ public class IoTDBPreparedStatement extends IoTDBStatement implements PreparedSt
   private static final Logger logger = LoggerFactory.getLogger(IoTDBPreparedStatement.class);
 
   /** save the SQL parameters as (paramLoc,paramValue) pairs. */
-  private final Map<Integer, String> parameters = new LinkedHashMap<>();
+  private final Map<Integer, String> parameters = new HashMap<>();
 
   IoTDBPreparedStatement(
       IoTDBConnection connection, Iface client, Long sessionId, String sql, ZoneId zoneId)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/manage/MergeResource.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/manage/MergeResource.java
index bde31e2..3e7f462 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/merge/manage/MergeResource.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/manage/MergeResource.java
@@ -40,6 +40,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -244,10 +245,11 @@ public class MergeResource {
   public void removeOutdatedSeqReaders() throws IOException {
     Iterator<Entry<TsFileResource, TsFileSequenceReader>> entryIterator =
         fileReaderCache.entrySet().iterator();
+    HashSet<TsFileResource> fileSet = new HashSet<>(seqFiles);
     while (entryIterator.hasNext()) {
       Entry<TsFileResource, TsFileSequenceReader> entry = entryIterator.next();
       TsFileResource tsFile = entry.getKey();
-      if (!seqFiles.contains(tsFile)) {
+      if (!fileSet.contains(tsFile)) {
         TsFileSequenceReader reader = entry.getValue();
         reader.close();
         entryIterator.remove();
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
index 9f3bd4e..025765e 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
@@ -859,7 +859,7 @@ public class PlanExecutor implements IPlanExecutor {
             Arrays.asList(
                 new PartialPath(COLUMN_STORAGE_GROUP, false), new PartialPath(COLUMN_TTL, false)),
             Arrays.asList(TSDataType.TEXT, TSDataType.INT64));
-    List<PartialPath> selectedSgs = showTTLPlan.getStorageGroups();
+    Set<PartialPath> selectedSgs = new HashSet<>(showTTLPlan.getStorageGroups());
 
     List<IStorageGroupMNode> storageGroups = getAllStorageGroupNodes();
     int timestamp = 0;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LastPointReader.java b/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LastPointReader.java
index e49ea7c..134dbd2 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LastPointReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LastPointReader.java
@@ -35,6 +35,8 @@ import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.PriorityQueue;
 import java.util.Set;
@@ -169,8 +171,15 @@ public class LastPointReader {
           chunkStatistics.getEndTime(), chunkStatistics.getLastValue(), dataType);
     }
     List<IPageReader> pageReaders = FileLoaderUtils.loadPageReaderList(chunkMetaData, timeFilter);
-    for (int i = pageReaders.size() - 1; i >= 0; i--) {
-      IPageReader pageReader = pageReaders.get(i);
+    Iterator it;
+    if (pageReaders instanceof LinkedList) {
+      it = ((LinkedList<IPageReader>) pageReaders).descendingIterator();
+    } else {
+      // for singleton list
+      it = pageReaders.iterator();
+    }
+    while (it.hasNext()) {
+      IPageReader pageReader = (IPageReader) it.next();
       Statistics pageStatistics = pageReader.getStatistics();
       if (!pageReader.isModified() && endtimeContainedByTimeFilter(pageStatistics)) {
         lastPoint =