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 2022/04/19 01:41:10 UTC
[iotdb] branch master updated: [IOTDB-2588] Triggers support any tree level, such as storage groups, devices, measurements, and so on (#5495)
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 3cc7eb2519 [IOTDB-2588] Triggers support any tree level, such as storage groups, devices, measurements, and so on (#5495)
3cc7eb2519 is described below
commit 3cc7eb2519123ad42a04596c4f8c556ca1625ca3
Author: gongning <is...@gmail.com>
AuthorDate: Tue Apr 19 09:41:04 2022 +0800
[IOTDB-2588] Triggers support any tree level, such as storage groups, devices, measurements, and so on (#5495)
Co-authored-by: wenhua.gongwh <we...@alibaba-inc.com>
Co-authored-by: Steve Yurong Su <ro...@apache.org>
---
.../db/integration/IoTDBTriggerExecutionIT.java | 188 ++++++++++++++-------
.../db/engine/trigger/executor/TriggerEngine.java | 20 ++-
.../engine/trigger/executor/TriggerExecutor.java | 29 ++--
.../service/TriggerRegistrationService.java | 52 +++---
.../iotdb/db/metadata/LocalSchemaProcessor.java | 11 +-
.../idtable/entry/InsertMeasurementMNode.java | 20 +++
.../org/apache/iotdb/db/metadata/mnode/IMNode.java | 8 +
.../org/apache/iotdb/db/metadata/mnode/MNode.java | 29 ++++
.../iotdb/db/metadata/mnode/MeasurementMNode.java | 2 -
.../mnode/estimator/BasicMNodSizeEstimator.java | 6 +-
.../db/metadata/schemaregion/ISchemaRegion.java | 5 +-
.../db/metadata/schemaregion/SchemaRegion.java | 11 +-
.../schemaregion/rocksdb/RSchemaRegion.java | 6 +-
.../schemaregion/rocksdb/mnode/RMNode.java | 20 +++
14 files changed, 277 insertions(+), 130 deletions(-)
diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTriggerExecutionIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTriggerExecutionIT.java
index 695af46494..c57d35fd75 100644
--- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTriggerExecutionIT.java
+++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTriggerExecutionIT.java
@@ -73,7 +73,7 @@ public class IoTDBTriggerExecutionIT {
++count;
statement.execute(
String.format(
- "insert into root.vehicle.d1(timestamp,s1,s2,s3,s4,s5,s6) values(%d,%d,%d,%d,%d,%s,'%d')",
+ "insert into root.vehicle.a.b.c.d1(timestamp,s1,s2,s3,s4,s5,s6) values(%d,%d,%d,%d,%d,%s,'%d')",
count, count, count, count, count, count % 2 == 0 ? "true" : "false", count));
} while (!isInterrupted());
} catch (Exception e) {
@@ -102,37 +102,37 @@ public class IoTDBTriggerExecutionIT {
private void createTimeseries() throws MetadataException {
IoTDB.schemaProcessor.createTimeseries(
- new PartialPath("root.vehicle.d1.s1"),
+ new PartialPath("root.vehicle.a.b.c.d1.s1"),
TSDataType.INT32,
TSEncoding.PLAIN,
CompressionType.UNCOMPRESSED,
null);
IoTDB.schemaProcessor.createTimeseries(
- new PartialPath("root.vehicle.d1.s2"),
+ new PartialPath("root.vehicle.a.b.c.d1.s2"),
TSDataType.INT64,
TSEncoding.PLAIN,
CompressionType.UNCOMPRESSED,
null);
IoTDB.schemaProcessor.createTimeseries(
- new PartialPath("root.vehicle.d1.s3"),
+ new PartialPath("root.vehicle.a.b.c.d1.s3"),
TSDataType.FLOAT,
TSEncoding.PLAIN,
CompressionType.UNCOMPRESSED,
null);
IoTDB.schemaProcessor.createTimeseries(
- new PartialPath("root.vehicle.d1.s4"),
+ new PartialPath("root.vehicle.a.b.c.d1.s4"),
TSDataType.DOUBLE,
TSEncoding.PLAIN,
CompressionType.UNCOMPRESSED,
null);
IoTDB.schemaProcessor.createTimeseries(
- new PartialPath("root.vehicle.d1.s5"),
+ new PartialPath("root.vehicle.a.b.c.d1.s5"),
TSDataType.BOOLEAN,
TSEncoding.PLAIN,
CompressionType.UNCOMPRESSED,
null);
IoTDB.schemaProcessor.createTimeseries(
- new PartialPath("root.vehicle.d1.s6"),
+ new PartialPath("root.vehicle.a.b.c.d1.s6"),
TSDataType.TEXT,
TSEncoding.PLAIN,
CompressionType.UNCOMPRESSED,
@@ -158,17 +158,17 @@ public class IoTDBTriggerExecutionIT {
Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
statement.execute(
- "create trigger trigger_1 before insert on root.vehicle.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_2 after insert on root.vehicle.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_2 after insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_3 before insert on root.vehicle.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_4 after insert on root.vehicle.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_4 after insert on root.vehicle.a.b.c.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_5 before insert on root.vehicle.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_5 before insert on root.vehicle.a.b.c.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_6 after insert on root.vehicle.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_6 after insert on root.vehicle.a.b.c.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
int[] counters1 = getCounters(6);
LOGGER.info(Arrays.toString(counters1));
@@ -209,11 +209,11 @@ public class IoTDBTriggerExecutionIT {
waitCountIncreaseBy(500);
statement.execute(
- "create trigger trigger_1 before insert on root.vehicle.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_2 after insert on root.vehicle.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_2 after insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_3 before insert on root.vehicle.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
waitCountIncreaseBy(500);
@@ -230,11 +230,11 @@ public class IoTDBTriggerExecutionIT {
waitCountIncreaseBy(500);
statement.execute(
- "create trigger trigger_4 after insert on root.vehicle.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_4 after insert on root.vehicle.a.b.c.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_5 before insert on root.vehicle.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_5 before insert on root.vehicle.a.b.c.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_6 after insert on root.vehicle.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_6 after insert on root.vehicle.a.b.c.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
// IOTDB-1825: if the background data generator's connection is closed, the following checks
// will be meaningless, in which case we ignore the checks
@@ -264,11 +264,11 @@ public class IoTDBTriggerExecutionIT {
waitCountIncreaseBy(500);
statement.execute(
- "create trigger trigger_1 before insert on root.vehicle.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_2 after insert on root.vehicle.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_2 after insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_3 before insert on root.vehicle.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
waitCountIncreaseBy(500);
@@ -289,22 +289,22 @@ public class IoTDBTriggerExecutionIT {
statement.execute("drop trigger trigger_3");
waitCountIncreaseBy(100);
statement.execute(
- "create trigger trigger_1 before insert on root.vehicle.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_2 after insert on root.vehicle.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_2 after insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_3 before insert on root.vehicle.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
waitCountIncreaseBy(100);
statement.execute("drop trigger trigger_1");
statement.execute("drop trigger trigger_2");
statement.execute("drop trigger trigger_3");
waitCountIncreaseBy(100);
statement.execute(
- "create trigger trigger_1 before insert on root.vehicle.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_2 after insert on root.vehicle.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_2 after insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_3 before insert on root.vehicle.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
waitCountIncreaseBy(500);
@@ -336,17 +336,17 @@ public class IoTDBTriggerExecutionIT {
waitCountIncreaseBy(500);
statement.execute(
- "create trigger trigger_1 before insert on root.vehicle.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_2 after insert on root.vehicle.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_2 after insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_3 before insert on root.vehicle.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_4 after insert on root.vehicle.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_4 after insert on root.vehicle.a.b.c.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_5 before insert on root.vehicle.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_5 before insert on root.vehicle.a.b.c.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_6 after insert on root.vehicle.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_6 after insert on root.vehicle.a.b.c.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
waitCountIncreaseBy(500);
@@ -460,17 +460,17 @@ public class IoTDBTriggerExecutionIT {
waitCountIncreaseBy(500);
statement.execute(
- "create trigger trigger_1 before insert on root.vehicle.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_2 after insert on root.vehicle.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_2 after insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_3 before insert on root.vehicle.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_4 after insert on root.vehicle.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_4 after insert on root.vehicle.a.b.c.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_5 before insert on root.vehicle.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_5 before insert on root.vehicle.a.b.c.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_6 after insert on root.vehicle.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_6 after insert on root.vehicle.a.b.c.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
waitCountIncreaseBy(500);
@@ -487,12 +487,12 @@ public class IoTDBTriggerExecutionIT {
stopDataGenerator();
- IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.d1.s1"));
- IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.d1.s2"));
- IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.d1.s3"));
- IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.d1.s4"));
- IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.d1.s5"));
- IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.d1.s6"));
+ IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.a.b.c.d1.s1"));
+ IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.a.b.c.d1.s2"));
+ IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.a.b.c.d1.s3"));
+ IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.a.b.c.d1.s4"));
+ IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.a.b.c.d1.s5"));
+ IoTDB.schemaProcessor.deleteTimeseries(new PartialPath("root.vehicle.a.b.c.d1.s6"));
for (int i = 0; i < 6; ++i) {
try {
@@ -515,17 +515,17 @@ public class IoTDBTriggerExecutionIT {
}
statement.execute(
- "create trigger trigger_1 before insert on root.vehicle.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_2 after insert on root.vehicle.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_2 after insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_3 before insert on root.vehicle.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_4 after insert on root.vehicle.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_4 after insert on root.vehicle.a.b.c.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_5 before insert on root.vehicle.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_5 before insert on root.vehicle.a.b.c.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_6 after insert on root.vehicle.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_6 after insert on root.vehicle.a.b.c.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
Thread.sleep(500);
@@ -550,17 +550,17 @@ public class IoTDBTriggerExecutionIT {
Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
statement.execute(
- "create trigger trigger_1 before insert on root.vehicle.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_2 after insert on root.vehicle.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_2 after insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_3 before insert on root.vehicle.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_4 after insert on root.vehicle.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_4 after insert on root.vehicle.a.b.c.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_5 before insert on root.vehicle.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_5 before insert on root.vehicle.a.b.c.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_6 after insert on root.vehicle.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_6 after insert on root.vehicle.a.b.c.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
waitCountIncreaseBy(500);
@@ -590,17 +590,17 @@ public class IoTDBTriggerExecutionIT {
}
statement.execute(
- "create trigger trigger_1 before insert on root.vehicle.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_2 after insert on root.vehicle.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_2 after insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_3 before insert on root.vehicle.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_4 after insert on root.vehicle.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_4 after insert on root.vehicle.a.b.c.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_5 before insert on root.vehicle.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_5 before insert on root.vehicle.a.b.c.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
statement.execute(
- "create trigger trigger_6 after insert on root.vehicle.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ "create trigger trigger_6 after insert on root.vehicle.a.b.c.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
Thread.sleep(500);
@@ -615,4 +615,64 @@ public class IoTDBTriggerExecutionIT {
stopDataGenerator();
}
}
+
+ @Test
+ public void testCreateMultipleLevelTriggersMultipleTimesWhileInserting()
+ throws InterruptedException {
+
+ try (Connection connection =
+ DriverManager.getConnection(
+ Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+ statement.execute(
+ "create trigger trigger_1 before insert on root.vehicle.a.b.c.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ statement.execute(
+ "create trigger trigger_2 before insert on root.vehicle.a.b.c.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ statement.execute(
+ "create trigger trigger_3 before insert on root.vehicle.a.b.c.d1.s3 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ statement.execute(
+ "create trigger trigger_4 before insert on root.vehicle.a.b.c.d1.s4 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ statement.execute(
+ "create trigger trigger_5 before insert on root.vehicle.a.b.c.d1.s5 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ statement.execute(
+ "create trigger trigger_6 before insert on root.vehicle.a.b.c.d1.s6 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+
+ statement.execute(
+ "create trigger trigger_7 before insert on root.vehicle.a.b.c.d1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ statement.execute(
+ "create trigger trigger_8 before insert on root.vehicle.a.b.c as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ statement.execute(
+ "create trigger trigger_9 after insert on root.vehicle.a.b as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ statement.execute(
+ "create trigger trigger_10 before insert on root.vehicle.a as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+ statement.execute(
+ "create trigger trigger_11 after insert on root.vehicle as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
+
+ startDataGenerator();
+ waitCountIncreaseBy(500);
+ stopDataGenerator();
+ int[] counters = getCounters(11);
+ assertEquals(counters[0], counters[1]);
+ assertEquals(counters[3], counters[4]);
+ int sumCount =
+ counters[0]
+ + counters[1]
+ + counters[2]
+ + counters[3]
+ + counters[4]
+ + counters[5]
+ - 6 * Counter.BASE;
+ assertEquals(sumCount, (counters[6] - Counter.BASE));
+ assertEquals(sumCount, (counters[7] - Counter.BASE));
+ assertEquals(sumCount, (counters[8] - Counter.BASE));
+ assertEquals(sumCount, (counters[9] - Counter.BASE));
+ assertEquals(sumCount, (counters[10] - Counter.BASE));
+ LOGGER.info(Arrays.toString(counters));
+
+ } catch (SQLException | TriggerManagementException e) {
+ fail(e.getMessage());
+ } finally {
+ stopDataGenerator();
+ }
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerEngine.java b/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerEngine.java
index 458ae3e240..fcf17622ce 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerEngine.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerEngine.java
@@ -40,6 +40,10 @@ public class TriggerEngine {
public static void fire(TriggerEvent event, InsertRowPlan insertRowPlan)
throws TriggerExecutionException {
+ if (TriggerRegistrationService.getInstance().executorSize() == 0) {
+ return;
+ }
+
IMeasurementMNode[] mNodes = insertRowPlan.getMeasurementMNodes();
int size = mNodes.length;
@@ -51,16 +55,18 @@ public class TriggerEngine {
if (mNode == null) {
continue;
}
- TriggerExecutor executor = mNode.getTriggerExecutor();
- if (executor == null) {
- continue;
+ for (TriggerExecutor executor : mNode.getUpperTriggerExecutorList()) {
+ executor.fireIfActivated(event, timestamp, values[i], mNode.getSchema().getType());
}
- executor.fireIfActivated(event, timestamp, values[i]);
}
}
public static void fire(TriggerEvent event, InsertTabletPlan insertTabletPlan, int firePosition)
throws TriggerExecutionException {
+ if (TriggerRegistrationService.getInstance().executorSize() == 0) {
+ return;
+ }
+
IMeasurementMNode[] mNodes = insertTabletPlan.getMeasurementMNodes();
int size = mNodes.length;
@@ -76,11 +82,9 @@ public class TriggerEngine {
if (mNode == null) {
continue;
}
- TriggerExecutor executor = mNode.getTriggerExecutor();
- if (executor == null) {
- continue;
+ for (TriggerExecutor executor : mNode.getUpperTriggerExecutorList()) {
+ executor.fireIfActivated(event, timestamps, columns[i], mNode.getSchema().getType());
}
- executor.fireIfActivated(event, timestamps, columns[i]);
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerExecutor.java b/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerExecutor.java
index 513e813db5..ea26758559 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerExecutor.java
@@ -26,7 +26,7 @@ import org.apache.iotdb.db.engine.trigger.service.TriggerClassLoader;
import org.apache.iotdb.db.engine.trigger.service.TriggerRegistrationInformation;
import org.apache.iotdb.db.exception.TriggerExecutionException;
import org.apache.iotdb.db.exception.TriggerManagementException;
-import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
+import org.apache.iotdb.db.metadata.mnode.IMNode;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.Binary;
@@ -39,23 +39,21 @@ public class TriggerExecutor {
private final TriggerClassLoader classLoader;
- private final IMeasurementMNode measurementMNode;
- private final TSDataType seriesDataType;
+ private final IMNode imNode;
private final Trigger trigger;
public TriggerExecutor(
TriggerRegistrationInformation registrationInformation,
TriggerClassLoader classLoader,
- IMeasurementMNode measurementMNode)
+ IMNode imNode)
throws TriggerManagementException {
this.registrationInformation = registrationInformation;
attributes = new TriggerAttributes(registrationInformation.getAttributes());
this.classLoader = classLoader;
- this.measurementMNode = measurementMNode;
- seriesDataType = measurementMNode.getSchema().getType();
+ this.imNode = imNode;
trigger = constructTriggerInstance();
}
@@ -137,14 +135,16 @@ public class TriggerExecutor {
}
}
- public void fireIfActivated(TriggerEvent event, long timestamp, Object value)
+ public void fireIfActivated(
+ TriggerEvent event, long timestamp, Object value, TSDataType seriesDataType)
throws TriggerExecutionException {
if (!registrationInformation.isStopped() && event.equals(registrationInformation.getEvent())) {
- fire(timestamp, value);
+ fire(timestamp, value, seriesDataType);
}
}
- private synchronized void fire(long timestamp, Object value) throws TriggerExecutionException {
+ private synchronized void fire(long timestamp, Object value, TSDataType seriesDataType)
+ throws TriggerExecutionException {
Thread.currentThread().setContextClassLoader(classLoader);
try {
@@ -177,14 +177,15 @@ public class TriggerExecutor {
}
}
- public void fireIfActivated(TriggerEvent event, long[] timestamps, Object values)
+ public void fireIfActivated(
+ TriggerEvent event, long[] timestamps, Object values, TSDataType seriesDataType)
throws TriggerExecutionException {
if (!registrationInformation.isStopped() && event.equals(registrationInformation.getEvent())) {
- fire(timestamps, values);
+ fire(timestamps, values, seriesDataType);
}
}
- private synchronized void fire(long[] timestamps, Object values)
+ private synchronized void fire(long[] timestamps, Object values, TSDataType seriesDataType)
throws TriggerExecutionException {
Thread.currentThread().setContextClassLoader(classLoader);
@@ -231,8 +232,8 @@ public class TriggerExecutor {
return registrationInformation;
}
- public IMeasurementMNode getMeasurementMNode() {
- return measurementMNode;
+ public IMNode getIMNode() {
+ return imNode;
}
@TestOnly
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/trigger/service/TriggerRegistrationService.java b/server/src/main/java/org/apache/iotdb/db/engine/trigger/service/TriggerRegistrationService.java
index 5f8e39661b..7f6c44928c 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/trigger/service/TriggerRegistrationService.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/trigger/service/TriggerRegistrationService.java
@@ -33,6 +33,7 @@ import org.apache.iotdb.db.exception.TriggerManagementException;
import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.metadata.idtable.IDTable;
import org.apache.iotdb.db.metadata.idtable.IDTableManager;
+import org.apache.iotdb.db.metadata.mnode.IMNode;
import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.qp.physical.PhysicalPlan;
@@ -95,15 +96,15 @@ public class TriggerRegistrationService implements IService {
public synchronized void register(CreateTriggerPlan plan)
throws TriggerManagementException, TriggerExecutionException {
- IMeasurementMNode measurementMNode = tryGetMeasurementMNode(plan);
- checkIfRegistered(plan, measurementMNode);
+ IMNode imNode = tryGetMNode(plan);
+ checkIfRegistered(plan, imNode);
tryAppendRegistrationLog(plan);
- doRegister(plan, measurementMNode);
+ doRegister(plan, imNode);
}
- private void checkIfRegistered(CreateTriggerPlan plan, IMeasurementMNode measurementMNode)
+ private void checkIfRegistered(CreateTriggerPlan plan, IMNode imNode)
throws TriggerManagementException {
- TriggerExecutor executor = measurementMNode.getTriggerExecutor();
+ TriggerExecutor executor = imNode.getTriggerExecutor();
if (executor != null) {
TriggerRegistrationInformation information = executor.getRegistrationInformation();
throw new TriggerManagementException(
@@ -113,7 +114,7 @@ public class TriggerRegistrationService implements IService {
plan.getClassName(),
information.getTriggerName(),
information.getClassName(),
- measurementMNode.getFullPath()));
+ imNode.getFullPath()));
}
executor = executors.get(plan.getTriggerName());
@@ -133,10 +134,14 @@ public class TriggerRegistrationService implements IService {
}
}
- private IMeasurementMNode tryGetMeasurementMNode(CreateTriggerPlan plan)
- throws TriggerManagementException {
+ private IMNode tryGetMNode(CreateTriggerPlan plan) throws TriggerManagementException {
try {
- return IoTDB.schemaProcessor.getMeasurementMNodeForTrigger(plan.getFullPath());
+ IMNode imNode = IoTDB.schemaProcessor.getMNodeForTrigger(plan.getFullPath());
+ if (imNode == null) {
+ throw new TriggerManagementException(
+ String.format("Path [%s] does not exist", plan.getFullPath().getFullPath()));
+ }
+ return imNode;
} catch (MetadataException e) {
throw new TriggerManagementException(e.getMessage(), e);
}
@@ -153,7 +158,7 @@ public class TriggerRegistrationService implements IService {
}
}
- private void doRegister(CreateTriggerPlan plan, IMeasurementMNode measurementMNode)
+ private void doRegister(CreateTriggerPlan plan, IMNode imNode)
throws TriggerManagementException, TriggerExecutionException {
TriggerRegistrationInformation information = new TriggerRegistrationInformation(plan);
TriggerClassLoader classLoader =
@@ -161,7 +166,7 @@ public class TriggerRegistrationService implements IService {
TriggerExecutor executor;
try {
- executor = new TriggerExecutor(information, classLoader, measurementMNode);
+ executor = new TriggerExecutor(information, classLoader, imNode);
executor.onCreate();
} catch (TriggerManagementException | TriggerExecutionException e) {
TriggerClassLoaderManager.getInstance().deregister(plan.getClassName());
@@ -169,14 +174,16 @@ public class TriggerRegistrationService implements IService {
}
executors.put(plan.getTriggerName(), executor);
- measurementMNode.setTriggerExecutor(executor);
+ imNode.setTriggerExecutor(executor);
// update id table
if (CONFIG.isEnableIDTable()) {
try {
IDTable idTable =
IDTableManager.getInstance().getIDTable(plan.getFullPath().getDevicePath());
- idTable.registerTrigger(plan.getFullPath(), measurementMNode);
+ if (executor.getIMNode().isMeasurement()) {
+ idTable.registerTrigger(plan.getFullPath(), (IMeasurementMNode) imNode);
+ }
} catch (MetadataException e) {
throw new TriggerManagementException(e.getMessage(), e);
}
@@ -214,10 +221,11 @@ public class TriggerRegistrationService implements IService {
private void doDeregister(DropTriggerPlan plan) throws TriggerManagementException {
TriggerExecutor executor = executors.remove(plan.getTriggerName());
- IMeasurementMNode measurementMNode = executor.getMeasurementMNode();
+
+ IMNode imNode = executor.getIMNode();
try {
- measurementMNode.setTriggerExecutor(null);
- IoTDB.schemaProcessor.releaseMeasurementMNodeAfterDropTrigger(executor.getMeasurementMNode());
+ imNode.setTriggerExecutor(null);
+ IoTDB.schemaProcessor.releaseMNodeAfterDropTrigger(imNode);
} catch (MetadataException e) {
throw new TriggerManagementException(e.getMessage(), e);
}
@@ -234,9 +242,11 @@ public class TriggerRegistrationService implements IService {
// update id table
if (CONFIG.isEnableIDTable()) {
try {
- PartialPath fullPath = executor.getMeasurementMNode().getPartialPath();
+ PartialPath fullPath = executor.getIMNode().getPartialPath();
IDTable idTable = IDTableManager.getInstance().getIDTable(fullPath.getDevicePath());
- idTable.deregisterTrigger(fullPath, executor.getMeasurementMNode());
+ if (executor.getIMNode().isMeasurement()) {
+ idTable.deregisterTrigger(fullPath, (IMeasurementMNode) executor.getIMNode());
+ }
} catch (MetadataException e) {
throw new TriggerManagementException(e.getMessage(), e);
}
@@ -373,7 +383,7 @@ public class TriggerRegistrationService implements IService {
private void doRecoveryFromLogFile(File logFile) throws IOException, TriggerManagementException {
for (CreateTriggerPlan createTriggerPlan : recoverCreateTriggerPlans(logFile)) {
try {
- doRegister(createTriggerPlan, tryGetMeasurementMNode(createTriggerPlan));
+ doRegister(createTriggerPlan, tryGetMNode(createTriggerPlan));
if (createTriggerPlan.isStopped()) {
executors.get(createTriggerPlan.getTriggerName()).onStop();
}
@@ -477,6 +487,10 @@ public class TriggerRegistrationService implements IService {
return ServiceType.TRIGGER_REGISTRATION_SERVICE;
}
+ public int executorSize() {
+ return executors.size();
+ }
+
public static TriggerRegistrationService getInstance() {
return TriggerRegistrationService.TriggerRegistrationServiceHelper.INSTANCE;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/LocalSchemaProcessor.java b/server/src/main/java/org/apache/iotdb/db/metadata/LocalSchemaProcessor.java
index 1f43b14070..0ad80d68a5 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/LocalSchemaProcessor.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/LocalSchemaProcessor.java
@@ -1387,19 +1387,16 @@ public class LocalSchemaProcessor {
// region Interfaces for Trigger
- public IMeasurementMNode getMeasurementMNodeForTrigger(PartialPath fullPath)
- throws MetadataException {
+ public IMNode getMNodeForTrigger(PartialPath fullPath) throws MetadataException {
try {
- return getBelongedSchemaRegion(fullPath).getMeasurementMNodeForTrigger(fullPath);
+ return getBelongedSchemaRegion(fullPath).getMNodeForTrigger(fullPath);
} catch (StorageGroupNotSetException e) {
throw new PathNotExistException(fullPath.getFullPath());
}
}
- public void releaseMeasurementMNodeAfterDropTrigger(IMeasurementMNode measurementMNode)
- throws MetadataException {
- getBelongedSchemaRegion(measurementMNode.getPartialPath())
- .releaseMeasurementMNodeAfterDropTrigger(measurementMNode);
+ public void releaseMNodeAfterDropTrigger(IMNode imNode) throws MetadataException {
+ getBelongedSchemaRegion(imNode.getPartialPath()).releaseMNodeAfterDropTrigger(imNode);
}
// endregion
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java
index 4199e43bac..48b9b16275 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.metadata.idtable.entry;
+import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.db.engine.trigger.executor.TriggerExecutor;
import org.apache.iotdb.db.metadata.lastCache.container.ILastCacheContainer;
import org.apache.iotdb.db.metadata.logfile.MLogWriter;
@@ -35,6 +36,9 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Generated entity implements IMeasurementMNode interface to unify insert logic through id table
* and SchemaProcessor
@@ -63,6 +67,22 @@ public class InsertMeasurementMNode implements IMeasurementMNode {
}
// region support methods
+
+ @Override
+ public List<TriggerExecutor> getUpperTriggerExecutorList() {
+ IMNode currentNode = this;
+ List<TriggerExecutor> results = new ArrayList<>();
+ while (currentNode != null && !IoTDBConstant.PATH_ROOT.equals(currentNode.getName())) {
+ TriggerExecutor executor = currentNode.getTriggerExecutor();
+ currentNode = currentNode.getParent();
+ if (executor == null) {
+ continue;
+ }
+ results.add(executor);
+ }
+ return results;
+ }
+
@Override
public TriggerExecutor getTriggerExecutor() {
return triggerExecutor;
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java
index 079d096e44..4167cc5c9b 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java
@@ -18,6 +18,7 @@
*/
package org.apache.iotdb.db.metadata.mnode;
+import org.apache.iotdb.db.engine.trigger.executor.TriggerExecutor;
import org.apache.iotdb.db.metadata.logfile.MLogWriter;
import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer;
import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry;
@@ -26,6 +27,7 @@ import org.apache.iotdb.db.metadata.template.Template;
import java.io.IOException;
import java.io.Serializable;
+import java.util.List;
/** This interface defines a MNode's operation interfaces. */
public interface IMNode extends Serializable {
@@ -87,6 +89,12 @@ public interface IMNode extends Serializable {
IMeasurementMNode getAsMeasurementMNode();
+ List<TriggerExecutor> getUpperTriggerExecutorList();
+
+ TriggerExecutor getTriggerExecutor();
+
+ void setTriggerExecutor(TriggerExecutor triggerExecutor);
+
void serializeTo(MLogWriter logWriter) throws IOException;
CacheEntry getCacheEntry();
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java
index 1e275710c0..1728f09097 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.metadata.mnode;
import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.db.engine.trigger.executor.TriggerExecutor;
import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry;
import org.apache.iotdb.db.metadata.path.PartialPath;
@@ -36,6 +37,9 @@ public abstract class MNode implements IMNode {
/** from root to this node, only be set when used once for InternalMNode */
protected String fullPath;
+ /** registered trigger */
+ protected TriggerExecutor triggerExecutor;
+
protected CacheEntry cacheEntry;
/** Constructor of MNode. */
@@ -158,6 +162,31 @@ public abstract class MNode implements IMNode {
}
}
+ @Override
+ public List<TriggerExecutor> getUpperTriggerExecutorList() {
+ IMNode currentNode = this;
+ List<TriggerExecutor> results = new ArrayList<>();
+ while (currentNode != null && !IoTDBConstant.PATH_ROOT.equals(currentNode.getName())) {
+ TriggerExecutor executor = currentNode.getTriggerExecutor();
+ currentNode = currentNode.getParent();
+ if (executor == null) {
+ continue;
+ }
+ results.add(executor);
+ }
+ return results;
+ }
+
+ @Override
+ public TriggerExecutor getTriggerExecutor() {
+ return triggerExecutor;
+ }
+
+ @Override
+ public void setTriggerExecutor(TriggerExecutor triggerExecutor) {
+ this.triggerExecutor = triggerExecutor;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java
index f1826c1829..3909f0a471 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java
@@ -47,8 +47,6 @@ public class MeasurementMNode extends MNode implements IMeasurementMNode {
private IMeasurementSchema schema;
/** last value cache */
private volatile ILastCacheContainer lastCacheContainer = null;
- /** registered trigger */
- private TriggerExecutor triggerExecutor = null;
/**
* MeasurementMNode factory method. The type of returned MeasurementMNode is according to the
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java
index 7d6b2884d4..7c18ac1bb4 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java
@@ -34,6 +34,7 @@ public class BasicMNodSizeEstimator implements IMNodeSizeEstimator {
* <li>parent reference, 8B
* <li>fullPath reference, 8B
* <li>cacheEntry reference, 8B
+ * <li>trigger reference, 8B
* </ol>
* <li>MapEntry in parent
* <ol>
@@ -43,7 +44,7 @@ public class BasicMNodSizeEstimator implements IMNodeSizeEstimator {
* </ol>
* </ol>
*/
- protected static final int NODE_BASE_SIZE = 92;
+ protected static final int NODE_BASE_SIZE = 100;
/**
* The basic extra memory occupied by an InternalMNode based on MNode occupation
@@ -85,10 +86,9 @@ public class BasicMNodSizeEstimator implements IMNodeSizeEstimator {
* <li>tagOffset, 8B
* <li>estimated schema size, 32B
* <li>lastCache, 8B
- * <li>trigger, 8B
* </ol>
*/
- protected static final int MEASUREMENT_NODE_BASE_SIZE = 64;
+ protected static final int MEASUREMENT_NODE_BASE_SIZE = 56;
// alias length, hashCode and occupation in aliasMap, 4 + 4 + 44 = 52B
protected static final int ALIAS_BASE_SIZE = 52;
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
index 9008224310..73359b8b53 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
@@ -186,8 +186,7 @@ public interface ISchemaRegion {
void setUsingSchemaTemplate(ActivateTemplatePlan plan) throws MetadataException;
- IMeasurementMNode getMeasurementMNodeForTrigger(PartialPath fullPath) throws MetadataException;
+ IMNode getMNodeForTrigger(PartialPath fullPath) throws MetadataException;
- void releaseMeasurementMNodeAfterDropTrigger(IMeasurementMNode measurementMNode)
- throws MetadataException;
+ void releaseMNodeAfterDropTrigger(IMNode imNode) throws MetadataException;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegion.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegion.java
index 7599a45942..93f048ae7b 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegion.java
@@ -1158,6 +1158,7 @@ public class SchemaRegion implements ISchemaRegion {
// endregion
// region Interfaces and methods for MNode query
+
public IMNode getDeviceNode(PartialPath path) throws MetadataException {
IMNode node;
try {
@@ -1847,14 +1848,12 @@ public class SchemaRegion implements ISchemaRegion {
// region Interfaces for Trigger
- public IMeasurementMNode getMeasurementMNodeForTrigger(PartialPath fullPath)
- throws MetadataException {
- return mtree.getMeasurementMNode(fullPath);
+ public IMNode getMNodeForTrigger(PartialPath fullPath) throws MetadataException {
+ return mtree.getNodeByPath(fullPath);
}
- public void releaseMeasurementMNodeAfterDropTrigger(IMeasurementMNode measurementMNode)
- throws MetadataException {
- mtree.unPinMNode(measurementMNode);
+ public void releaseMNodeAfterDropTrigger(IMNode imNode) throws MetadataException {
+ mtree.unPinMNode(imNode);
}
// endregion
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
index 5026693ee1..57afaeb8dd 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
@@ -1894,14 +1894,12 @@ public class RSchemaRegion implements ISchemaRegion {
}
@Override
- public IMeasurementMNode getMeasurementMNodeForTrigger(PartialPath fullPath)
- throws MetadataException {
+ public IMNode getMNodeForTrigger(PartialPath fullPath) throws MetadataException {
throw new UnsupportedOperationException();
}
@Override
- public void releaseMeasurementMNodeAfterDropTrigger(IMeasurementMNode measurementMNode)
- throws MetadataException {
+ public void releaseMNodeAfterDropTrigger(IMNode imNode) throws MetadataException {
throw new UnsupportedOperationException();
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java
index ee9d9983c3..b1e5bb6c86 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode;
+import org.apache.iotdb.db.engine.trigger.executor.TriggerExecutor;
import org.apache.iotdb.db.exception.metadata.IllegalPathException;
import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.metadata.mnode.IEntityMNode;
@@ -36,6 +37,7 @@ import org.rocksdb.RocksDBException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.List;
import java.util.Objects;
public abstract class RMNode implements IMNode {
@@ -50,6 +52,9 @@ public abstract class RMNode implements IMNode {
protected static final Logger logger = LoggerFactory.getLogger(RMNode.class);
+ /** registered trigger */
+ protected TriggerExecutor triggerExecutor;
+
/** Constructor of MNode. */
public RMNode(String fullPath, RSchemaReadWriteHandler readWriteHandler) {
this.fullPath = fullPath.intern();
@@ -189,6 +194,21 @@ public abstract class RMNode implements IMNode {
}
}
+ @Override
+ public List<TriggerExecutor> getUpperTriggerExecutorList() {
+ throw new UnsupportedOperationException("Temporarily unsupported");
+ }
+
+ @Override
+ public TriggerExecutor getTriggerExecutor() {
+ return triggerExecutor;
+ }
+
+ @Override
+ public void setTriggerExecutor(TriggerExecutor triggerExecutor) {
+ this.triggerExecutor = triggerExecutor;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {