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 =