This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch rc/1.3.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rc/1.3.3 by this push:
new 547f3eba6bc [To rc/1.3.3] Make each execution acquire a schema read
lock only once
547f3eba6bc is described below
commit 547f3eba6bc6e9ab044cd293005a67d30d38992c
Author: Caideyipi <[email protected]>
AuthorDate: Thu Sep 26 21:00:57 2024 +0800
[To rc/1.3.3] Make each execution acquire a schema read lock only once
---
.../db/queryengine/common/MPPQueryContext.java | 18 ++--
.../iotdb/db/queryengine/plan/Coordinator.java | 11 +--
.../queryengine/plan/analyze/AnalyzeVisitor.java | 105 +++++++++++----------
.../analyze/lock/DataNodeSchemaLockManager.java | 22 +++--
.../plan/analyze/schema/ClusterSchemaFetcher.java | 64 +++++++------
5 files changed, 110 insertions(+), 110 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
index 7eebccdd675..ccd7536919f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
@@ -33,10 +33,10 @@ import
org.apache.iotdb.db.queryengine.statistics.QueryPlanStatistics;
import org.apache.tsfile.read.filter.basic.Filter;
import java.time.ZoneId;
-import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
+import java.util.Set;
/**
* This class is used to record the context of a query including QueryId,
query statement, session
@@ -71,7 +71,7 @@ public class MPPQueryContext {
private Filter globalTimeFilter;
- private Map<SchemaLockType, Integer> acquiredLockNumMap = new HashMap<>();
+ private final Set<SchemaLockType> acquiredLocks = new HashSet<>();
private boolean isExplainAnalyze = false;
@@ -200,16 +200,12 @@ public class MPPQueryContext {
return sql;
}
- public Map<SchemaLockType, Integer> getAcquiredLockNumMap() {
- return acquiredLockNumMap;
+ public Set<SchemaLockType> getAcquiredLocks() {
+ return acquiredLocks;
}
- public void addAcquiredLockNum(SchemaLockType lockType) {
- if (acquiredLockNumMap.containsKey(lockType)) {
- acquiredLockNumMap.put(lockType, acquiredLockNumMap.get(lockType) + 1);
- } else {
- acquiredLockNumMap.put(lockType, 1);
- }
+ public boolean addAcquiredLock(final SchemaLockType lockType) {
+ return acquiredLocks.add(lockType);
}
public void generateGlobalTimeFilter(Analysis analysis) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index 5d8c7830e3f..db56a6ec695 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -36,7 +36,6 @@ import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.execution.QueryIdGenerator;
import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher;
import
org.apache.iotdb.db.queryengine.plan.analyze.lock.DataNodeSchemaLockManager;
-import org.apache.iotdb.db.queryengine.plan.analyze.lock.SchemaLockType;
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaFetcher;
import org.apache.iotdb.db.queryengine.plan.execution.ExecutionResult;
import org.apache.iotdb.db.queryengine.plan.execution.IQueryExecution;
@@ -53,7 +52,6 @@ import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ScheduledExecutorService;
@@ -144,14 +142,7 @@ public class Coordinator {
if (queryContext != null) {
queryContext.releaseAllMemoryReservedForFrontEnd();
}
- if (queryContext != null &&
!queryContext.getAcquiredLockNumMap().isEmpty()) {
- Map<SchemaLockType, Integer> lockMap =
queryContext.getAcquiredLockNumMap();
- for (Map.Entry<SchemaLockType, Integer> entry : lockMap.entrySet()) {
- for (int i = 0; i < entry.getValue(); i++) {
-
DataNodeSchemaLockManager.getInstance().releaseReadLock(entry.getKey());
- }
- }
- }
+ DataNodeSchemaLockManager.getInstance().releaseReadLock(queryContext);
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
index b01ee8babed..012f48c271e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
@@ -2570,32 +2570,35 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
private void checkIsTemplateCompatible(
- PartialPath timeseriesPath, String alias, MPPQueryContext context,
boolean takeLock) {
+ final PartialPath timeSeriesPath,
+ final String alias,
+ final MPPQueryContext context,
+ final boolean takeLock) {
if (takeLock) {
-
DataNodeSchemaLockManager.getInstance().takeReadLock(SchemaLockType.TIMESERIES_VS_TEMPLATE);
- context.addAcquiredLockNum(SchemaLockType.TIMESERIES_VS_TEMPLATE);
+ DataNodeSchemaLockManager.getInstance()
+ .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
}
- Pair<Template, PartialPath> templateInfo =
- schemaFetcher.checkTemplateSetAndPreSetInfo(timeseriesPath, alias);
+ final Pair<Template, PartialPath> templateInfo =
+ schemaFetcher.checkTemplateSetAndPreSetInfo(timeSeriesPath, alias);
if (templateInfo != null) {
throw new SemanticException(
new TemplateIncompatibleException(
- timeseriesPath.getFullPath(), templateInfo.left.getName(),
templateInfo.right));
+ timeSeriesPath.getFullPath(), templateInfo.left.getName(),
templateInfo.right));
}
}
private void checkIsTemplateCompatible(
- PartialPath devicePath,
- List<String> measurements,
- List<String> aliasList,
- MPPQueryContext context,
- boolean takeLock) {
+ final PartialPath devicePath,
+ final List<String> measurements,
+ final List<String> aliasList,
+ final MPPQueryContext context,
+ final boolean takeLock) {
if (takeLock) {
-
DataNodeSchemaLockManager.getInstance().takeReadLock(SchemaLockType.TIMESERIES_VS_TEMPLATE);
- context.addAcquiredLockNum(SchemaLockType.TIMESERIES_VS_TEMPLATE);
+ DataNodeSchemaLockManager.getInstance()
+ .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
}
for (int i = 0; i < measurements.size(); i++) {
- Pair<Template, PartialPath> templateInfo =
+ final Pair<Template, PartialPath> templateInfo =
schemaFetcher.checkTemplateSetAndPreSetInfo(
devicePath.concatNode(measurements.get(i)),
aliasList == null ? null : aliasList.get(i));
@@ -2613,12 +2616,12 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
if (props == null || props.isEmpty()) {
return;
}
- Map<String, String> caseChangeMap = new HashMap<>();
- for (String key : props.keySet()) {
+ final Map<String, String> caseChangeMap = new HashMap<>();
+ for (final String key : props.keySet()) {
caseChangeMap.put(key.toLowerCase(Locale.ROOT), key);
}
- for (Map.Entry<String, String> caseChangeEntry : caseChangeMap.entrySet())
{
- String lowerCaseKey = caseChangeEntry.getKey();
+ for (final Map.Entry<String, String> caseChangeEntry :
caseChangeMap.entrySet()) {
+ final String lowerCaseKey = caseChangeEntry.getKey();
if (!ALLOWED_SCHEMA_PROPS.contains(lowerCaseKey)) {
throw new SemanticException(
new MetadataException(
@@ -2631,11 +2634,11 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
}
- private void analyzeSchemaProps(List<Map<String, String>> propsList) {
+ private void analyzeSchemaProps(final List<Map<String, String>> propsList) {
if (propsList == null) {
return;
}
- for (Map<String, String> props : propsList) {
+ for (final Map<String, String> props : propsList) {
analyzeSchemaProps(props);
}
}
@@ -2709,24 +2712,24 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
@Override
public Analysis visitInternalCreateMultiTimeSeries(
- InternalCreateMultiTimeSeriesStatement
internalCreateMultiTimeSeriesStatement,
- MPPQueryContext context) {
+ final InternalCreateMultiTimeSeriesStatement
internalCreateMultiTimeSeriesStatement,
+ final MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
- Analysis analysis = new Analysis();
+ final Analysis analysis = new Analysis();
analysis.setStatement(internalCreateMultiTimeSeriesStatement);
- PathPatternTree pathPatternTree = new PathPatternTree();
-
DataNodeSchemaLockManager.getInstance().takeReadLock(SchemaLockType.TIMESERIES_VS_TEMPLATE);
- context.addAcquiredLockNum(SchemaLockType.TIMESERIES_VS_TEMPLATE);
- for (Map.Entry<PartialPath, Pair<Boolean, MeasurementGroup>> entry :
+ final PathPatternTree pathPatternTree = new PathPatternTree();
+ DataNodeSchemaLockManager.getInstance()
+ .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
+ for (final Map.Entry<PartialPath, Pair<Boolean, MeasurementGroup>> entry :
internalCreateMultiTimeSeriesStatement.getDeviceMap().entrySet()) {
checkIsTemplateCompatible(
entry.getKey(), entry.getValue().right.getMeasurements(), null,
context, false);
pathPatternTree.appendFullPath(entry.getKey().concatNode(ONE_LEVEL_PATH_WILDCARD));
}
- SchemaPartition schemaPartitionInfo;
+ final SchemaPartition schemaPartitionInfo;
schemaPartitionInfo =
partitionFetcher.getOrCreateSchemaPartition(
pathPatternTree, context.getSession().getUserName());
@@ -2739,26 +2742,26 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
final CreateMultiTimeSeriesStatement createMultiTimeSeriesStatement,
final MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
- Analysis analysis = new Analysis();
+ final Analysis analysis = new Analysis();
analysis.setStatement(createMultiTimeSeriesStatement);
analyzeSchemaProps(createMultiTimeSeriesStatement.getPropsList());
- List<PartialPath> timeseriesPathList =
createMultiTimeSeriesStatement.getPaths();
- List<String> aliasList = createMultiTimeSeriesStatement.getAliasList();
+ final List<PartialPath> timeseriesPathList =
createMultiTimeSeriesStatement.getPaths();
+ final List<String> aliasList =
createMultiTimeSeriesStatement.getAliasList();
-
DataNodeSchemaLockManager.getInstance().takeReadLock(SchemaLockType.TIMESERIES_VS_TEMPLATE);
- context.addAcquiredLockNum(SchemaLockType.TIMESERIES_VS_TEMPLATE);
+ DataNodeSchemaLockManager.getInstance()
+ .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
for (int i = 0; i < timeseriesPathList.size(); i++) {
checkIsTemplateCompatible(
timeseriesPathList.get(i), aliasList == null ? null :
aliasList.get(i), context, false);
}
- PathPatternTree patternTree = new PathPatternTree();
- for (PartialPath path : createMultiTimeSeriesStatement.getPaths()) {
+ final PathPatternTree patternTree = new PathPatternTree();
+ for (final PartialPath path : createMultiTimeSeriesStatement.getPaths()) {
patternTree.appendFullPath(path);
}
- SchemaPartition schemaPartitionInfo =
+ final SchemaPartition schemaPartitionInfo =
partitionFetcher.getOrCreateSchemaPartition(
patternTree, context.getSession().getUserName());
analysis.setSchemaPartitionInfo(schemaPartitionInfo);
@@ -4053,10 +4056,10 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
private void checkTargetPathsInCreateLogicalView(
- Analysis analysis,
- CreateLogicalViewStatement createLogicalViewStatement,
- MPPQueryContext context) {
- Pair<Boolean, String> checkResult =
createLogicalViewStatement.checkTargetPaths();
+ final Analysis analysis,
+ final CreateLogicalViewStatement createLogicalViewStatement,
+ final MPPQueryContext context) {
+ final Pair<Boolean, String> checkResult =
createLogicalViewStatement.checkTargetPaths();
if (Boolean.FALSE.equals(checkResult.left)) {
analysis.setFinishQueryAfterAnalyze(true);
analysis.setFailStatus(
@@ -4067,10 +4070,10 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
// Make sure there are no redundant paths in targets. Note that redundant
paths in source
// are legal.
- List<PartialPath> targetPathList =
createLogicalViewStatement.getTargetPathList();
- Set<String> targetStringSet = new HashSet<>();
- for (PartialPath path : targetPathList) {
- boolean repeatPathNotExist = targetStringSet.add(path.toString());
+ final List<PartialPath> targetPathList =
createLogicalViewStatement.getTargetPathList();
+ final Set<String> targetStringSet = new HashSet<>();
+ for (final PartialPath path : targetPathList) {
+ final boolean repeatPathNotExist = targetStringSet.add(path.toString());
if (!repeatPathNotExist) {
analysis.setFinishQueryAfterAnalyze(true);
analysis.setFailStatus(
@@ -4082,12 +4085,12 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
// Make sure all paths are not under any templates
try {
-
DataNodeSchemaLockManager.getInstance().takeReadLock(SchemaLockType.TIMESERIES_VS_TEMPLATE);
- context.addAcquiredLockNum(SchemaLockType.TIMESERIES_VS_TEMPLATE);
+ DataNodeSchemaLockManager.getInstance()
+ .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
for (PartialPath path : createLogicalViewStatement.getTargetPathList()) {
checkIsTemplateCompatible(path, null, context, false);
}
- } catch (Exception e) {
+ } catch (final Exception e) {
analysis.setFinishQueryAfterAnalyze(true);
analysis.setFailStatus(
RpcUtils.getStatus(
@@ -4098,14 +4101,14 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
@Override
public Analysis visitShowLogicalView(
- ShowLogicalViewStatement showLogicalViewStatement, MPPQueryContext
context) {
+ final ShowLogicalViewStatement showLogicalViewStatement, final
MPPQueryContext context) {
context.setQueryType(QueryType.READ);
- Analysis analysis = new Analysis();
+ final Analysis analysis = new Analysis();
analysis.setStatement(showLogicalViewStatement);
- PathPatternTree patternTree = new PathPatternTree();
+ final PathPatternTree patternTree = new PathPatternTree();
patternTree.appendPathPattern(showLogicalViewStatement.getPathPattern());
- SchemaPartition schemaPartitionInfo =
partitionFetcher.getSchemaPartition(patternTree);
+ final SchemaPartition schemaPartitionInfo =
partitionFetcher.getSchemaPartition(patternTree);
analysis.setSchemaPartitionInfo(schemaPartitionInfo);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowLogicalViewHeader());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/lock/DataNodeSchemaLockManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/lock/DataNodeSchemaLockManager.java
index b57986ccdec..11478cf1f77 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/lock/DataNodeSchemaLockManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/lock/DataNodeSchemaLockManager.java
@@ -19,6 +19,8 @@
package org.apache.iotdb.db.queryengine.plan.analyze.lock;
+import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
+
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class DataNodeSchemaLockManager {
@@ -34,26 +36,32 @@ public class DataNodeSchemaLockManager {
}
private DataNodeSchemaLockManager() {
- int lockNum = SchemaLockType.values().length;
+ final int lockNum = SchemaLockType.values().length;
this.locks = new ReentrantReadWriteLock[lockNum];
for (int i = 0; i < lockNum; i++) {
locks[i] = new ReentrantReadWriteLock(false);
}
}
- public void takeReadLock(SchemaLockType lockType) {
- locks[lockType.ordinal()].readLock().lock();
+ public void takeReadLock(final MPPQueryContext context, final SchemaLockType
lockType) {
+ if (context.addAcquiredLock(lockType)) {
+ locks[lockType.ordinal()].readLock().lock();
+ }
}
- public void releaseReadLock(SchemaLockType lockType) {
- locks[lockType.ordinal()].readLock().unlock();
+ public void releaseReadLock(final MPPQueryContext queryContext) {
+ if (queryContext != null && !queryContext.getAcquiredLocks().isEmpty()) {
+ queryContext
+ .getAcquiredLocks()
+ .forEach(lockType -> locks[lockType.ordinal()].readLock().unlock());
+ }
}
- public void takeWriteLock(SchemaLockType lockType) {
+ public void takeWriteLock(final SchemaLockType lockType) {
locks[lockType.ordinal()].writeLock().lock();
}
- public void releaseWriteLock(SchemaLockType lockType) {
+ public void releaseWriteLock(final SchemaLockType lockType) {
locks[lockType.ordinal()].writeLock().unlock();
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
index 11c0979a2b7..13a9f5fc97a 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
@@ -181,17 +181,17 @@ public class ClusterSchemaFetcher implements
ISchemaFetcher {
@Override
public void fetchAndComputeSchemaWithAutoCreate(
- ISchemaComputationWithAutoCreation schemaComputationWithAutoCreation,
- MPPQueryContext context) {
+ final ISchemaComputationWithAutoCreation
schemaComputationWithAutoCreation,
+ final MPPQueryContext context) {
// The schema cache R/W and fetch operation must be locked together thus
the cache clean
// operation executed by delete timeseries will be effective.
-
DataNodeSchemaLockManager.getInstance().takeReadLock(SchemaLockType.VALIDATE_VS_DELETION);
- context.addAcquiredLockNum(SchemaLockType.VALIDATE_VS_DELETION);
+ DataNodeSchemaLockManager.getInstance()
+ .takeReadLock(context, SchemaLockType.VALIDATE_VS_DELETION);
schemaCache.takeReadLock();
try {
- Pair<Template, PartialPath> templateSetInfo =
+ final Pair<Template, PartialPath> templateSetInfo =
templateManager.checkTemplateSetInfo(schemaComputationWithAutoCreation.getDevicePath());
- List<Integer> indexOfMissingMeasurements;
+ final List<Integer> indexOfMissingMeasurements;
if (templateSetInfo == null) {
// normal timeseries
indexOfMissingMeasurements =
@@ -209,7 +209,7 @@ public class ClusterSchemaFetcher implements ISchemaFetcher
{
}
// offer null for the rest missing schema processing
- for (int index : indexOfMissingMeasurements) {
+ for (final int index : indexOfMissingMeasurements) {
schemaComputationWithAutoCreation.computeMeasurement(index, null);
}
} finally {
@@ -219,12 +219,13 @@ public class ClusterSchemaFetcher implements
ISchemaFetcher {
@Override
public void fetchAndComputeSchemaWithAutoCreate(
- List<? extends ISchemaComputationWithAutoCreation>
schemaComputationWithAutoCreationList,
- MPPQueryContext context) {
+ final List<? extends ISchemaComputationWithAutoCreation>
+ schemaComputationWithAutoCreationList,
+ final MPPQueryContext context) {
// The schema cache R/W and fetch operation must be locked together thus
the cache clean
- // operation executed by delete timeseries will be effective.
-
DataNodeSchemaLockManager.getInstance().takeReadLock(SchemaLockType.VALIDATE_VS_DELETION);
- context.addAcquiredLockNum(SchemaLockType.VALIDATE_VS_DELETION);
+ // operation executed by delete timeSeries will be effective.
+ DataNodeSchemaLockManager.getInstance()
+ .takeReadLock(context, SchemaLockType.VALIDATE_VS_DELETION);
schemaCache.takeReadLock();
try {
@@ -258,25 +259,26 @@ public class ClusterSchemaFetcher implements
ISchemaFetcher {
@Override
public ISchemaTree fetchSchemaListWithAutoCreate(
- List<PartialPath> devicePathList,
- List<String[]> measurementsList,
- List<TSDataType[]> tsDataTypesList,
- List<TSEncoding[]> encodingsList,
- List<CompressionType[]> compressionTypesList,
- List<Boolean> isAlignedList,
- MPPQueryContext context) {
+ final List<PartialPath> devicePathList,
+ final List<String[]> measurementsList,
+ final List<TSDataType[]> tsDataTypesList,
+ final List<TSEncoding[]> encodingsList,
+ final List<CompressionType[]> compressionTypesList,
+ final List<Boolean> isAlignedList,
+ final MPPQueryContext context) {
// The schema cache R/W and fetch operation must be locked together thus
the cache clean
- // operation executed by delete timeseries will be effective.
-
DataNodeSchemaLockManager.getInstance().takeReadLock(SchemaLockType.VALIDATE_VS_DELETION);
- context.addAcquiredLockNum(SchemaLockType.VALIDATE_VS_DELETION);
+ // operation executed by delete timeSeries will be effective.
+ DataNodeSchemaLockManager.getInstance()
+ .takeReadLock(context, SchemaLockType.VALIDATE_VS_DELETION);
schemaCache.takeReadLock();
try {
- ClusterSchemaTree schemaTree = new ClusterSchemaTree();
- List<List<Integer>> indexOfMissingMeasurementsList = new
ArrayList<>(devicePathList.size());
- List<Integer> indexOfDevicesWithMissingMeasurements = new ArrayList<>();
+ final ClusterSchemaTree schemaTree = new ClusterSchemaTree();
+ final List<List<Integer>> indexOfMissingMeasurementsList =
+ new ArrayList<>(devicePathList.size());
+ final List<Integer> indexOfDevicesWithMissingMeasurements = new
ArrayList<>();
for (int i = 0; i < devicePathList.size(); i++) {
schemaTree.mergeSchemaTree(schemaCache.get(devicePathList.get(i),
measurementsList.get(i)));
- List<Integer> indexOfMissingMeasurements =
+ final List<Integer> indexOfMissingMeasurements =
checkMissingMeasurements(schemaTree, devicePathList.get(i),
measurementsList.get(i));
if (!indexOfMissingMeasurements.isEmpty()) {
indexOfDevicesWithMissingMeasurements.add(i);
@@ -289,8 +291,8 @@ public class ClusterSchemaFetcher implements ISchemaFetcher
{
return schemaTree;
}
- // try fetch the missing schema from remote and cache fetched schema
- ClusterSchemaTree remoteSchemaTree =
+ // Try fetch the missing schema from remote and cache fetched schema
+ final ClusterSchemaTree remoteSchemaTree =
clusterSchemaFetchExecutor.fetchSchemaOfMultiDevices(
devicePathList,
measurementsList,
@@ -305,9 +307,9 @@ public class ClusterSchemaFetcher implements ISchemaFetcher
{
return schemaTree;
}
- // auto create the still missing schema and merge them into schemaTree
- List<Integer> indexOfDevicesNeedAutoCreateSchema = new ArrayList<>();
- List<List<Integer>> indexOfMeasurementsNeedAutoCreate = new
ArrayList<>();
+ // Auto create the still missing schema and merge them into schemaTree
+ final List<Integer> indexOfDevicesNeedAutoCreateSchema = new
ArrayList<>();
+ final List<List<Integer>> indexOfMeasurementsNeedAutoCreate = new
ArrayList<>();
List<Integer> indexOfMissingMeasurements;
int deviceIndex;
for (int i = 0, size = indexOfDevicesWithMissingMeasurements.size(); i <
size; i++) {