This is an automated email from the ASF dual-hosted git repository.
haonan 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 371b3b4d3c [IOTDB-3938] Fix SeriesSlotExecutor initialization logic
for insertion performance (#7007)
371b3b4d3c is described below
commit 371b3b4d3cd4cd6a9cac444baf90bd1c0d08fecd
Author: Marcos_Zyk <[email protected]>
AuthorDate: Tue Aug 16 15:24:27 2022 +0800
[IOTDB-3938] Fix SeriesSlotExecutor initialization logic for insertion
performance (#7007)
---
.../apache/iotdb/commons/partition/Partition.java | 2 ++
.../executor/SeriesPartitionExecutor.java | 37 +++++++++++++++-------
.../schemaregion/rocksdb/RSchemaRegion.java | 3 +-
.../db/metadata/idtable/IDTableHashmapImpl.java | 2 +-
.../schemaregion/SchemaRegionMemoryImpl.java | 3 +-
.../schemaregion/SchemaRegionSchemaFileImpl.java | 3 +-
.../org/apache/iotdb/db/mpp/plan/Coordinator.java | 2 +-
.../java/org/apache/iotdb/db/service/DataNode.java | 2 +-
.../java/org/apache/iotdb/db/service/IoTDB.java | 11 ++-----
.../apache/iotdb/db/service/IoTDBShutdownHook.java | 2 +-
10 files changed, 38 insertions(+), 29 deletions(-)
diff --git
a/node-commons/src/main/java/org/apache/iotdb/commons/partition/Partition.java
b/node-commons/src/main/java/org/apache/iotdb/commons/partition/Partition.java
index d2d03ce21c..b139c22596 100644
---
a/node-commons/src/main/java/org/apache/iotdb/commons/partition/Partition.java
+++
b/node-commons/src/main/java/org/apache/iotdb/commons/partition/Partition.java
@@ -23,10 +23,12 @@ import
org.apache.iotdb.commons.partition.executor.SeriesPartitionExecutor;
import java.util.List;
+// todo replace this data structure with PartitionTable
public abstract class Partition {
protected String seriesSlotExecutorName;
protected int seriesPartitionSlotNum;
+ // todo decouple this executor with Partition
private final SeriesPartitionExecutor executor;
public Partition(String seriesSlotExecutorName, int seriesPartitionSlotNum) {
diff --git
a/node-commons/src/main/java/org/apache/iotdb/commons/partition/executor/SeriesPartitionExecutor.java
b/node-commons/src/main/java/org/apache/iotdb/commons/partition/executor/SeriesPartitionExecutor.java
index 7a9de34825..413275f171 100644
---
a/node-commons/src/main/java/org/apache/iotdb/commons/partition/executor/SeriesPartitionExecutor.java
+++
b/node-commons/src/main/java/org/apache/iotdb/commons/partition/executor/SeriesPartitionExecutor.java
@@ -26,6 +26,10 @@ import java.lang.reflect.InvocationTargetException;
/** All SeriesPartitionExecutors must be subclasses of SeriesPartitionExecutor
*/
public abstract class SeriesPartitionExecutor {
+ // The params, executorName and seriesPartitionSlotNum, are global unique
during system running.
+ // Therefore, one executor instance is enough for usage.
+ protected static SeriesPartitionExecutor EXECUTOR;
+
protected final int seriesPartitionSlotNum;
public SeriesPartitionExecutor(int seriesPartitionSlotNum) {
@@ -36,17 +40,28 @@ public abstract class SeriesPartitionExecutor {
public static SeriesPartitionExecutor getSeriesPartitionExecutor(
String executorName, int seriesPartitionSlotNum) {
- try {
- Class<?> executor = Class.forName(executorName);
- Constructor<?> executorConstructor = executor.getConstructor(int.class);
- return (SeriesPartitionExecutor)
executorConstructor.newInstance(seriesPartitionSlotNum);
- } catch (ClassNotFoundException
- | NoSuchMethodException
- | InstantiationException
- | IllegalAccessException
- | InvocationTargetException e) {
- throw new IllegalArgumentException(
- String.format("Couldn't Constructor SeriesPartitionExecutor class:
%s", executorName));
+ if (EXECUTOR == null) {
+ initStaticSeriesPartitionExecutor(executorName, seriesPartitionSlotNum);
+ }
+ return EXECUTOR;
+ }
+
+ private static synchronized void initStaticSeriesPartitionExecutor(
+ String executorName, int seriesPartitionSlotNum) {
+ if (EXECUTOR == null) {
+ try {
+ Class<?> executor = Class.forName(executorName);
+ Constructor<?> executorConstructor =
executor.getConstructor(int.class);
+ EXECUTOR =
+ (SeriesPartitionExecutor)
executorConstructor.newInstance(seriesPartitionSlotNum);
+ } catch (ClassNotFoundException
+ | NoSuchMethodException
+ | InstantiationException
+ | IllegalAccessException
+ | InvocationTargetException e) {
+ throw new IllegalArgumentException(
+ String.format("Couldn't Constructor SeriesPartitionExecutor class:
%s", executorName));
+ }
}
}
}
diff --git
a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
index e289ec47d2..5bde0ccce4 100644
---
a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
+++
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
@@ -71,7 +71,6 @@ import org.apache.iotdb.db.qp.physical.sys.UnsetTemplatePlan;
import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
-import org.apache.iotdb.db.service.IoTDB;
import org.apache.iotdb.db.utils.EncodingInferenceUtils;
import org.apache.iotdb.db.utils.SchemaUtils;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -1898,7 +1897,7 @@ public class RSchemaRegion implements ISchemaRegion {
measurementList[i] = nodeMap.get(i).getName();
}
} catch (MetadataException e) {
- if (IoTDB.isClusterMode()) {
+ if (config.isClusterMode()) {
logger.debug(
"meet error when check {}.{}, message: {}",
devicePath,
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
index 8b454cdc01..94b82f5ccd 100644
---
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
+++
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
@@ -166,7 +166,7 @@ public class IDTableHashmapImpl implements IDTable {
}
}
} catch (MetadataException e) {
- if (IoTDB.isClusterMode()) {
+ if (config.isClusterMode()) {
logger.debug(
"meet error when check {}.{}, message: {}",
devicePath,
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
index 452f2c4a5b..71c6b3632e 100644
---
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
+++
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
@@ -78,7 +78,6 @@ import org.apache.iotdb.db.qp.physical.sys.UnsetTemplatePlan;
import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
-import org.apache.iotdb.db.service.IoTDB;
import org.apache.iotdb.db.sync.sender.manager.SchemaSyncManager;
import org.apache.iotdb.db.utils.SchemaUtils;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
@@ -1603,7 +1602,7 @@ public class SchemaRegionMemoryImpl implements
ISchemaRegion {
measurementList[i] = measurementMNode.getName();
}
} catch (MetadataException e) {
- if (IoTDB.isClusterMode()) {
+ if (config.isClusterMode()) {
logger.debug(
"meet error when check {}.{}, message: {}",
devicePath,
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
index 49fd1951b6..34c49106b3 100644
---
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
+++
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
@@ -75,7 +75,6 @@ import org.apache.iotdb.db.qp.physical.sys.UnsetTemplatePlan;
import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
-import org.apache.iotdb.db.service.IoTDB;
import org.apache.iotdb.db.sync.sender.manager.SchemaSyncManager;
import org.apache.iotdb.db.utils.SchemaUtils;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
@@ -1578,7 +1577,7 @@ public class SchemaRegionSchemaFileImpl implements
ISchemaRegion {
measurementList[i] = measurementMNode.getName();
}
} catch (MetadataException e) {
- if (IoTDB.isClusterMode()) {
+ if (config.isClusterMode()) {
logger.debug(
"meet error when check {}.{}, message: {}",
devicePath,
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/Coordinator.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/Coordinator.java
index d4f8ac8e9a..e406eadd97 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/Coordinator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/Coordinator.java
@@ -120,7 +120,7 @@ public class Coordinator {
QueryId globalQueryId = queryIdGenerator.createNextQueryId();
try (SetThreadName queryName = new SetThreadName(globalQueryId.getId())) {
if (sql != null && sql.length() > 0) {
- LOGGER.info("start executing sql: {}", sql);
+ LOGGER.debug("start executing sql: {}", sql);
}
MPPQueryContext queryContext =
new MPPQueryContext(
diff --git a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
index 6838d6f9fa..9053f16f01 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
@@ -138,7 +138,7 @@ public class DataNode implements DataNodeMBean {
/** initialize the current node and its services */
public boolean initLocalEngines() {
- IoTDB.setClusterMode();
+ config.setClusterMode(true);
return true;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
index c80222089a..a12aecd456 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
@@ -67,7 +67,6 @@ public class IoTDB implements IoTDBMBean {
public static LocalSchemaProcessor schemaProcessor =
LocalSchemaProcessor.getInstance();
public static LocalConfigNode configManager = LocalConfigNode.getInstance();
public static ServiceProvider serviceProvider;
- private static boolean clusterMode = false;
public static IoTDB getInstance() {
return IoTDBHolder.INSTANCE;
@@ -94,11 +93,7 @@ public class IoTDB implements IoTDBMBean {
}
public static void setClusterMode() {
- IoTDB.clusterMode = true;
- }
-
- public static boolean isClusterMode() {
- return IoTDB.clusterMode;
+ config.setClusterMode(true);
}
public void active() {
@@ -173,7 +168,7 @@ public class IoTDB implements IoTDBMBean {
initProtocols();
// in cluster mode, InfluxDBMManager has been initialized, so there is no
need to init again to
// avoid wasting time.
- if (!isClusterMode()
+ if (!config.isClusterMode()
&&
IoTDBDescriptor.getInstance().getConfig().isEnableInfluxDBRpcService()) {
initInfluxDBMManager();
}
@@ -207,7 +202,7 @@ public class IoTDB implements IoTDBMBean {
}
private void initServiceProvider() throws QueryProcessException {
- if (!clusterMode) {
+ if (!config.isClusterMode()) {
serviceProvider = new StandaloneServiceProvider();
}
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
b/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
index f1cd77b08a..895273ccc5 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
@@ -51,7 +51,7 @@ public class IoTDBShutdownHook extends Thread {
}
WALManager.getInstance().deleteOutdatedWALFiles();
- if (IoTDB.isClusterMode()) {
+ if (IoTDBDescriptor.getInstance().getConfig().isClusterMode()) {
// This setting ensures that compaction work is not discarded
// even if there are frequent restarts
DataRegionConsensusImpl.getInstance()