You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by yo...@apache.org on 2025/09/28 01:44:56 UTC
(iotdb) branch revert-recent-updates-of-audit-log created (now 2cb5df8360d)
This is an automated email from the ASF dual-hosted git repository.
yongzao pushed a change to branch revert-recent-updates-of-audit-log
in repository https://gitbox.apache.org/repos/asf/iotdb.git
at 2cb5df8360d Revert "Implement audit log for tree model (#16475)"
This branch includes the following new commits:
new e41ecde2e6a Revert "Audit log patch for both tree and table models (#16497)"
new ed4868275ae Revert "Move password history under __audit (#16496)"
new 2cb5df8360d Revert "Implement audit log for tree model (#16475)"
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(iotdb) 01/03: Revert "Audit log patch for both tree and table models (#16497)"
Posted by yo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yongzao pushed a commit to branch revert-recent-updates-of-audit-log
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit e41ecde2e6a4d23b67063187c3b868c86c03ee8d
Author: Yongzao <53...@qq.com>
AuthorDate: Sun Sep 28 09:44:18 2025 +0800
Revert "Audit log patch for both tree and table models (#16497)"
This reverts commit 2ed021362c7068f6cf710e850f5db50cbcd36db8.
---
.../iotdb/db/it/audit/IoTDBAuditLogBasicIT.java | 579 +--------------------
.../org/apache/iotdb/db/audit/DNAuditLogger.java | 20 +-
.../org/apache/iotdb/db/auth/AuthorityChecker.java | 24 +-
.../protocol/thrift/IoTDBDataNodeReceiver.java | 8 +-
.../sink/protocol/writeback/WriteBackSink.java | 7 +-
.../PipePlanTreePrivilegeParseVisitor.java | 5 +-
.../db/protocol/client/DataNodeInternalClient.java | 7 +-
.../iotdb/db/protocol/mqtt/MPPPublishHandler.java | 7 +-
.../rest/handler/AuthorizationHandler.java | 12 +-
.../protocol/thrift/impl/ClientRPCServiceImpl.java | 219 +-------
.../analyze/schema/AutoCreateSchemaExecutor.java | 3 +-
.../relational/analyzer/StatementAnalyzer.java | 37 +-
.../plan/relational/security/AccessControl.java | 3 +-
.../relational/security/AccessControlImpl.java | 86 +--
.../relational/security/AllowAllAccessControl.java | 4 +-
.../security/TreeAccessCheckContext.java | 21 +-
.../security/TreeAccessCheckVisitor.java | 39 +-
.../iotdb/commons/audit/AbstractAuditLogger.java | 2 +-
18 files changed, 157 insertions(+), 926 deletions(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java
index 4d96a41406c..0f831ad8a74 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java
@@ -27,9 +27,9 @@ import org.apache.iotdb.it.framework.IoTDBTestRunner;
import org.apache.iotdb.itbase.category.LocalStandaloneIT;
import org.apache.iotdb.itbase.env.BaseEnv;
-import org.junit.After;
+import org.junit.AfterClass;
import org.junit.Assert;
-import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
@@ -43,20 +43,18 @@ import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Set;
import java.util.StringJoiner;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-/**
- * This test class ensures the audit log behave exactly the same as we expected, including the
- * number, sequence and content of the audit logs.
- */
@RunWith(IoTDBTestRunner.class)
@Category({LocalStandaloneIT.class})
public class IoTDBAuditLogBasicIT {
private static final Logger LOGGER = LoggerFactory.getLogger(IoTDBAuditLogBasicIT.class);
+
+ /**
+ * Ensure the Audit log behave exactly the same as we expected, including number, sequence and
+ * content.
+ */
private static final List<String> AUDIT_TABLE_COLUMNS =
Arrays.asList(
AbstractAuditLogger.AUDIT_LOG_NODE_ID,
@@ -95,8 +93,8 @@ public class IoTDBAuditLogBasicIT {
private static final String AUDITABLE_OPERATION_RESULT = "SUCCESS,FAIL";
- @Before
- public void setUp() throws SQLException {
+ @BeforeClass
+ public static void setUp() throws SQLException {
EnvFactory.getEnv()
.getConfig()
.getCommonConfig()
@@ -132,8 +130,8 @@ public class IoTDBAuditLogBasicIT {
}
}
- @After
- public void tearDown() {
+ @AfterClass
+ public static void tearDown() {
EnvFactory.getEnv().cleanClusterEnvironment();
}
@@ -147,22 +145,13 @@ public class IoTDBAuditLogBasicIT {
"SHOW TABLES",
"DESC table1",
"ALTER TABLE table1 set properties TTL='INF'",
- "CREATE USER user1 'IoTDB@2021abc'",
- "CREATE role role1",
- "GRANT SELECT, ALTER, INSERT, DELETE ON test.table1 TO ROLE role1",
- "GRANT ROLE role1 TO user1",
- "LIST USER",
- "LIST ROLE",
- "DROP ROLE role1",
- "DROP USER user1",
"INSERT INTO table1(time, t1, a1, s1) values(1, 't1', 'a1', 's1')",
- "SELECT * FROM table1",
"DELETE FROM table1",
"DROP TABLE table1",
"DROP DATABASE IF EXISTS test");
private static final List<List<String>> TABLE_MODEL_AUDIT_FIELDS =
Arrays.asList(
- // Start audit service
+ // Start DataNode
Arrays.asList(
"node_1",
"u_none",
@@ -176,7 +165,7 @@ public class IoTDBAuditLogBasicIT {
"null",
"null",
"Successfully start the Audit service with configurations (auditableOperationType [DDL, DML, QUERY, CONTROL], auditableOperationLevel GLOBAL, auditableOperationResult SUCCESS,FAIL)"),
- // Show audit database
+ // Show audit database TODO: Fix typo in tree model
Arrays.asList(
"node_1",
"u_0",
@@ -185,10 +174,10 @@ public class IoTDBAuditLogBasicIT {
"OBJECT_AUTHENTICATION",
"QUERY",
"[MANAGE_DATABASE]",
- "OBJECT",
+ "GLOBAL",
"true",
"[root.__audit]",
- "SHOW DATABASES root.__audit",
+ "null",
"User root (ID=0) requests authority on object root.__audit with result true"),
// Desc audit table
Arrays.asList(
@@ -273,7 +262,7 @@ public class IoTDBAuditLogBasicIT {
"test",
"ALTER DATABASE test SET PROPERTIES TTL='INF'",
"User root (ID=0) requests authority on object test with result true"),
- // Use database, twice for both read and write connections
+ // Use database TODO: Find out why twice
Arrays.asList(
"node_1",
"u_0",
@@ -308,8 +297,8 @@ public class IoTDBAuditLogBasicIT {
"127.0.0.1",
"OBJECT_AUTHENTICATION",
"DDL",
- "[CREATE]",
- "OBJECT",
+ "[SYSTEM]",
+ "GLOBAL",
"true",
"test",
"CREATE TABLE table1(t1 STRING TAG, a1 STRING ATTRIBUTE, s1 TEXT FIELD)",
@@ -342,118 +331,6 @@ public class IoTDBAuditLogBasicIT {
"test",
"DESC table1",
"User root (ID=0) requests authority on object table1 with result true"),
- // Create user
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[SECURITY]",
- "GLOBAL",
- "true",
- "null",
- "CREATE USER user1 ...",
- "User root (ID=0) requests authority on object user1 with result true"),
- // Create role
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[SECURITY]",
- "GLOBAL",
- "true",
- "null",
- "CREATE role role1",
- "User root (ID=0) requests authority on object role1 with result true"),
- // Grant privileges to role
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[SECURITY]",
- "GLOBAL",
- "true",
- "test",
- "GRANT SELECT, ALTER, INSERT, DELETE ON test.table1 TO ROLE role1",
- "User root (ID=0) requests authority on object role1 with result true"),
- // Grant role to user
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[SECURITY]",
- "GLOBAL",
- "true",
- "null",
- "GRANT ROLE role1 TO user1",
- "User root (ID=0) requests authority on object user: user1, role: role1 with result true"),
- // List user TODO: whether to include user object?
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[SECURITY]",
- "GLOBAL",
- "true",
- "null",
- "LIST USER",
- "User root (ID=0) requests authority on object null with result true"),
- // List role TODO: whether to include role object?
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[SECURITY]",
- "GLOBAL",
- "true",
- "null",
- "LIST ROLE",
- "User root (ID=0) requests authority on object null with result true"),
- // Drop role
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[SECURITY]",
- "GLOBAL",
- "true",
- "null",
- "DROP ROLE role1",
- "User root (ID=0) requests authority on object role1 with result true"),
- // Drop user
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[SECURITY]",
- "GLOBAL",
- "true",
- "null",
- "DROP USER user1",
- "User root (ID=0) requests authority on object user1 with result true"),
// Insert into table
Arrays.asList(
"node_1",
@@ -466,36 +343,9 @@ public class IoTDBAuditLogBasicIT {
"OBJECT",
"true",
"test",
- "INSERT INTO table1(time, t1, a1, s1) values(...)",
+ "INSERT INTO table1(time, t1, a1, s1) values(1, 't1', 'a1', 's1')",
"User root (ID=0) requests authority on object table1 with result true"),
- // Select from table, including fetch device
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[SELECT]",
- "OBJECT",
- "true",
- "test",
- "SELECT * FROM table1",
- "User root (ID=0) requests authority on object table1 with result true"),
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[SELECT]",
- "OBJECT",
- "true",
- "test",
- "fetch device for query",
- "User root (ID=0) requests authority on object table1 with result true"),
- // Delete table
+ // Delete table TODO: find the delete SQL
Arrays.asList(
"node_1",
"u_0",
@@ -507,21 +357,7 @@ public class IoTDBAuditLogBasicIT {
"OBJECT",
"true",
"test",
- "DELETE FROM table1",
- "User root (ID=0) requests authority on object table1 with result true"),
- // Drop table
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[DROP]",
- "OBJECT",
- "true",
- "test",
- "DROP TABLE table1",
+ "null",
"User root (ID=0) requests authority on object table1 with result true"),
// Drop database
Arrays.asList(
@@ -537,7 +373,7 @@ public class IoTDBAuditLogBasicIT {
"test",
"DROP DATABASE IF EXISTS test",
"User root (ID=0) requests authority on object test with result true"),
- // Select audit log
+ // Select audit log TODO: find out why twice
Arrays.asList(
"node_1",
"u_0",
@@ -549,7 +385,7 @@ public class IoTDBAuditLogBasicIT {
"OBJECT",
"true",
"__audit",
- "SELECT * FROM __audit.audit_log ORDER BY TIME",
+ "null",
"User root (ID=0) requests authority on object __audit with result true"),
Arrays.asList(
"node_1",
@@ -562,10 +398,8 @@ public class IoTDBAuditLogBasicIT {
"OBJECT",
"true",
"__audit",
- "fetch device for query",
+ "null",
"User root (ID=0) requests authority on object __audit with result true"));
- private static final Set<Integer> TABLE_INDEX_FOR_CONTAIN =
- Stream.of(11, 12).collect(Collectors.toSet());
@Test
public void basicAuditLogTestForTableModel() throws SQLException {
@@ -575,7 +409,7 @@ public class IoTDBAuditLogBasicIT {
statement.execute(sql);
}
int count = 0;
- ResultSet resultSet = statement.executeQuery("SELECT * FROM __audit.audit_log ORDER BY TIME");
+ ResultSet resultSet = statement.executeQuery("SELECT * FROM __audit.audit_log");
while (resultSet.next()) {
LOGGER.info("Expected audit log: {}", TABLE_MODEL_AUDIT_FIELDS.get(count));
List<String> actualFields = new ArrayList<>();
@@ -584,372 +418,13 @@ public class IoTDBAuditLogBasicIT {
}
LOGGER.info("Actual audit log: {}", actualFields);
List<String> expectedFields = TABLE_MODEL_AUDIT_FIELDS.get(count);
- for (int i = 1; i <= 12; i++) {
- if (TABLE_INDEX_FOR_CONTAIN.contains(i)) {
- Assert.assertTrue(resultSet.getString(i + 1).contains(expectedFields.get(i - 1)));
- continue;
- }
- Assert.assertEquals(expectedFields.get(i - 1), resultSet.getString(i + 1));
- }
-
- count++;
- }
- Assert.assertEquals(TABLE_MODEL_AUDIT_FIELDS.size(), count);
- }
- }
-
- private static final List<String> TREE_MODEL_AUDIT_SQLS =
- Arrays.asList(
- "CREATE DATABASE root.test",
- "CREATE TIMESERIES root.test.d1.s2 WITH DATATYPE=INT64",
- "CREATE ALIGNED TIMESERIES root.test.d2(s1 BOOLEAN, s2 INT64)",
- "ALTER TIMESERIES root.test.d2.s1 ADD TAGS tag3=v3, tag4=v4",
- "CREATE USER user1 'IoTDB@2021abc'",
- "CREATE role role1",
- "GRANT READ_DATA, WRITE_DATA ON root.test TO ROLE role1",
- "GRANT ROLE role1 TO user1",
- "LIST USER",
- "LIST ROLE",
- "DROP ROLE role1",
- "DROP USER user1",
- "INSERT INTO root.test.d1(timestamp,s2) VALUES(1,1)",
- "INSERT INTO root.test.d2(timestamp,s1,s2) ALIGNED VALUES(1,true,1)",
- "SELECT ** FROM root.test",
- "DELETE FROM root.test.d2",
- "DROP TIMESERIES root.test.d1.s2",
- "set ttl to root.test.** 360000",
- "DELETE DATABASE root.test");
- private static final List<List<String>> TREE_MODEL_AUDIT_FIELDS =
- Arrays.asList(
- // Start audit service
- Arrays.asList(
- "root.__audit.log.node_1.u_none",
- "true",
- "GLOBAL",
- "[AUDIT]",
- "null",
- "CONTROL",
- "Successfully start the Audit service with configurations (auditableOperationType [DDL, DML, QUERY, CONTROL], auditableOperationLevel GLOBAL, auditableOperationResult SUCCESS,FAIL)",
- "null",
- "CHANGE_AUDIT_OPTION",
- "null",
- "null"),
- // Show audit database
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[MANAGE_DATABASE]",
- "[root.__audit]",
- "QUERY",
- "User root (ID=0) requests authority on object root.__audit with result true",
- "SHOW DATABASES root.__audit",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Desc audit table
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[READ_SCHEMA]",
- "__audit",
- "QUERY",
- "User root (ID=0) requests authority on object audit_log with result true",
- "DESC __audit.audit_log",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Create database
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[MANAGE_DATABASE]",
- "root.test",
- "DDL",
- "User root (ID=0) requests authority on object root.test with result true",
- "CREATE DATABASE root.test",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Create (aligned) timeseries TODO: fill database if necessary, same as follows
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[WRITE_SCHEMA]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object [root.test.d1.s2] with result true",
- "CREATE TIMESERIES root.test.d1.s2 WITH DATATYPE=INT64",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[WRITE_SCHEMA]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object [root.test.d2.s1, root.test.d2.s2] with result true",
- "CREATE ALIGNED TIMESERIES root.test.d2(s1 BOOLEAN, s2 INT64)",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Alter timeseries
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[WRITE_SCHEMA]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object [root.test.d2.s1] with result true",
- "ALTER TIMESERIES root.test.d2.s1 ADD TAGS tag3=v3, tag4=v4",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Create user
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "GLOBAL",
- "[MANAGE_USER]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object user1 with result true",
- "CREATE USER user1 ...",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Create role
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "GLOBAL",
- "[MANAGE_ROLE]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object role1 with result true",
- "CREATE role role1",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Grant privileges to role
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "GLOBAL",
- "[SECURITY]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object role1 with result true",
- "GRANT READ_DATA, WRITE_DATA ON root.test TO ROLE role1",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Grant role to user
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "GLOBAL",
- "[MANAGE_ROLE]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object user: user1, role: role1 with result true",
- "GRANT ROLE role1 TO user1",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // List user TODO: whether to include user object?
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "GLOBAL",
- "[MANAGE_USER]",
- "null",
- "QUERY",
- "User root (ID=0) requests authority on object null with result true",
- "LIST USER",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // List role TODO: whether to include role object?
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "GLOBAL",
- "[MANAGE_ROLE]",
- "null",
- "QUERY",
- "User root (ID=0) requests authority on object null with result true",
- "LIST ROLE",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Drop role
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "GLOBAL",
- "[MANAGE_ROLE]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object role1 with result true",
- "DROP ROLE role1",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Drop user
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "GLOBAL",
- "[MANAGE_USER]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object user1 with result true",
- "DROP USER user1",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Insert into (aligned) timeseries
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[WRITE_DATA]",
- "null",
- "DML",
- "User root (ID=0) requests authority on object [root.test.d1.s2] with result true",
- "INSERT INTO root.test.d1(timestamp,s2) VALUES(...)",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[WRITE_DATA]",
- "null",
- "DML",
- "User root (ID=0) requests authority on object [root.test.d2.s1, root.test.d2.s2] with result true",
- "INSERT INTO root.test.d2(timestamp,s1,s2) ALIGNED VALUES(...)",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Select all timeseries
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[READ_DATA]",
- "null",
- "QUERY",
- "User root (ID=0) requests authority on object [root.test.**] with result true",
- "SELECT ** FROM root.test",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Delete timeseries data
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[WRITE_DATA]",
- "null",
- "DML",
- "User root (ID=0) requests authority on object [root.test.d2] with result true",
- "DELETE FROM root.test.d2",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Drop timeseries
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[WRITE_SCHEMA]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object [root.test.d1.s2] with result true",
- "DROP TIMESERIES root.test.d1.s2",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Set TTL to devices
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "GLOBAL",
- "[SYSTEM]",
- "null",
- "DDL",
- "User root (ID=0) requests authority on object [root.test.**] with result true",
- "set ttl to root.test.** 360000",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Delete database
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[MANAGE_DATABASE]",
- "[root.test]",
- "DDL",
- "User root (ID=0) requests authority on object [root.test] with result true",
- "DELETE DATABASE root.test",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"),
- // Select audit log
- Arrays.asList(
- "root.__audit.log.node_1.u_0",
- "true",
- "OBJECT",
- "[READ_DATA]",
- "null",
- "QUERY",
- "User root (ID=0) requests authority on object [root.__audit.log.**.*] with result true",
- "SELECT * FROM root.__audit.log.** ORDER BY TIME ALIGN BY DEVICE",
- "OBJECT_AUTHENTICATION",
- "127.0.0.1",
- "root"));
- private static final Set<Integer> TREE_INDEX_FOR_CONTAIN =
- Stream.of(7).collect(Collectors.toSet());
-
- @Test
- public void basicAuditLogTestForTreeModel() throws SQLException {
- try (Connection connection = EnvFactory.getEnv().getConnection(BaseEnv.TREE_SQL_DIALECT);
- Statement statement = connection.createStatement()) {
- for (String sql : TREE_MODEL_AUDIT_SQLS) {
- statement.execute(sql);
- }
- int count = 0;
- ResultSet resultSet =
- statement.executeQuery("SELECT * FROM root.__audit.log.** ORDER BY TIME ALIGN BY DEVICE");
- while (resultSet.next()) {
- LOGGER.info("Expected audit log: {}", TREE_MODEL_AUDIT_FIELDS.get(count));
- List<String> actualFields = new ArrayList<>();
- for (int i = 1; i <= 11; i++) {
- actualFields.add(resultSet.getString(i + 1));
- }
- LOGGER.info("Actual audit log: {}", actualFields);
- List<String> expectedFields = TREE_MODEL_AUDIT_FIELDS.get(count);
for (int i = 1; i <= 11; i++) {
- if (TREE_INDEX_FOR_CONTAIN.contains(i)) {
- Assert.assertTrue(resultSet.getString(i + 1).contains(expectedFields.get(i - 1)));
- continue;
- }
Assert.assertEquals(expectedFields.get(i - 1), resultSet.getString(i + 1));
}
-
+ Assert.assertTrue(resultSet.getString(13).contains(expectedFields.get(11)));
count++;
}
- Assert.assertEquals(TREE_MODEL_AUDIT_FIELDS.size(), count);
+ Assert.assertEquals(TABLE_MODEL_AUDIT_FIELDS.size(), count);
}
}
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
index 1fdb138592f..c26bbb1a38d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
@@ -77,8 +77,6 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Supplier;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import static org.apache.iotdb.db.pipe.receiver.protocol.legacy.loader.ILoader.SCHEMA_FETCHER;
@@ -161,20 +159,6 @@ public class DNAuditLogger extends AbstractAuditLogger {
AUDIT_LOG_LOG
});
insertStatement.setAligned(false);
- String sqlString = auditLogFields.getSqlString();
- if (sqlString != null) {
- if (sqlString.toUpperCase().startsWith("CREATE USER")) {
- sqlString = String.join(" ", Arrays.asList(sqlString.split(" ")).subList(0, 3)) + " ...";
- }
- Pattern pattern = Pattern.compile("(?i)(values)\\([^)]*\\)");
- Matcher matcher = pattern.matcher(sqlString);
- StringBuffer sb = new StringBuffer();
- while (matcher.find()) {
- matcher.appendReplacement(sb, matcher.group(1) + "(...)");
- }
- matcher.appendTail(sb);
- sqlString = sb.toString();
- }
insertStatement.setValues(
new Object[] {
new Binary(username == null ? "null" : username, TSFileConfig.STRING_CHARSET),
@@ -194,7 +178,9 @@ public class DNAuditLogger extends AbstractAuditLogger {
new Binary(
auditLogFields.getDatabase() == null ? "null" : auditLogFields.getDatabase(),
TSFileConfig.STRING_CHARSET),
- new Binary(sqlString == null ? "null" : sqlString, TSFileConfig.STRING_CHARSET),
+ new Binary(
+ auditLogFields.getSqlString() == null ? "null" : auditLogFields.getSqlString(),
+ TSFileConfig.STRING_CHARSET),
new Binary(log == null ? "null" : log, TSFileConfig.STRING_CHARSET)
});
insertStatement.setDataTypes(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
index bbd9ada2b9e..31a7ffe3a11 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
@@ -45,7 +45,6 @@ import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult;
import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControlImpl;
import org.apache.iotdb.db.queryengine.plan.relational.security.ITableAuthCheckerImpl;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckContext;
import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckVisitor;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RelationalAuthorStatement;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -177,21 +176,22 @@ public class AuthorityChecker {
}
}
- public static TSStatus checkAuthority(Statement statement, IAuditEntity auditEntity) {
+ /** Check whether specific Session has the authorization to given plan. */
+ public static TSStatus checkAuthority(Statement statement, IClientSession session) {
long startTime = System.nanoTime();
try {
- if (auditEntity instanceof TreeAccessCheckContext) {
- return accessControl.checkPermissionBeforeProcess(
- statement, (TreeAccessCheckContext) auditEntity);
- }
return accessControl.checkPermissionBeforeProcess(
statement,
- (TreeAccessCheckContext)
- new TreeAccessCheckContext(
- auditEntity.getUserId(),
- auditEntity.getUsername(),
- auditEntity.getCliHostname())
- .setSqlString(auditEntity.getSqlString()));
+ new UserEntity(session.getUserId(), session.getUsername(), session.getClientAddress()));
+ } finally {
+ PERFORMANCE_OVERVIEW_METRICS.recordAuthCost(System.nanoTime() - startTime);
+ }
+ }
+
+ public static TSStatus checkAuthority(Statement statement, UserEntity userEntity) {
+ long startTime = System.nanoTime();
+ try {
+ return accessControl.checkPermissionBeforeProcess(statement, userEntity);
} finally {
PERFORMANCE_OVERVIEW_METRICS.recordAuthCost(System.nanoTime() - startTime);
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
index 1511933ad35..3544e6736f6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
@@ -86,7 +86,6 @@ import org.apache.iotdb.db.queryengine.plan.execution.config.executor.ClusterCon
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.CreateDBTask;
import org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanner;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.view.AlterLogicalViewNode;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckContext;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PipeEnriched;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -881,12 +880,7 @@ public class IoTDBDataNodeReceiver extends IoTDBFileReceiver {
// For table model, the authority check is done in inner execution. No need to check here
if (!isTableModelStatement) {
final TSStatus permissionCheckStatus =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ AuthorityChecker.checkAuthority(statement, clientSession);
if (permissionCheckStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
PipeLogger.log(
LOGGER::warn,
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java
index fddb9f2f1a9..53af1bed26a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java
@@ -45,7 +45,6 @@ import org.apache.iotdb.db.queryengine.plan.execution.config.executor.ClusterCon
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.CreateDBTask;
import org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanner;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertNode;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckContext;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
@@ -482,11 +481,7 @@ public class WriteBackSink implements PipeConnector {
if (useEventUserName && userName != null) {
session.setUsername(userName);
}
- final TSStatus permissionCheckStatus =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- session.getUserId(), session.getUsername(), session.getClientAddress()));
+ final TSStatus permissionCheckStatus = AuthorityChecker.checkAuthority(statement, session);
if (permissionCheckStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
PipeLogger.log(
LOGGER::warn,
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/PipePlanTreePrivilegeParseVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/PipePlanTreePrivilegeParseVisitor.java
index 5967097418d..260f6bd1d37 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/PipePlanTreePrivilegeParseVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/PipePlanTreePrivilegeParseVisitor.java
@@ -20,6 +20,7 @@
package org.apache.iotdb.db.pipe.source.schemaregion;
import org.apache.iotdb.commons.audit.IAuditEntity;
+import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
import org.apache.iotdb.commons.path.MeasurementPath;
@@ -327,9 +328,7 @@ public class PipePlanTreePrivilegeParseVisitor
final DeleteDataNode node, final IAuditEntity auditEntity) {
final List<MeasurementPath> intersectedPaths =
TreeAccessCheckVisitor.getIntersectedPaths4Pipe(
- node.getPathList(),
- new TreeAccessCheckContext(
- auditEntity.getUserId(), auditEntity.getUsername(), auditEntity.getCliHostname()));
+ node.getPathList(), new TreeAccessCheckContext((UserEntity) auditEntity));
if (!skip && !intersectedPaths.equals(node.getPathList())) {
throw new AccessDeniedException("Not has privilege to transfer plan: " + node);
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/DataNodeInternalClient.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/DataNodeInternalClient.java
index 227f8731cae..d96151b2e93 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/DataNodeInternalClient.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/DataNodeInternalClient.java
@@ -38,7 +38,6 @@ 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.planner.LocalExecutionPlanner;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckContext;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertMultiTabletsStatement;
@@ -99,11 +98,7 @@ public class DataNodeInternalClient {
public TSStatus insertTablets(InsertMultiTabletsStatement statement) {
try {
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- session.getUserId(), session.getUsername(), session.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, session);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/MPPPublishHandler.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/MPPPublishHandler.java
index c993da93b73..a6464a56c49 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/MPPPublishHandler.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/MPPPublishHandler.java
@@ -37,7 +37,6 @@ 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.planner.LocalExecutionPlanner;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckContext;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
@@ -280,11 +279,7 @@ public class MPPPublishHandler extends AbstractInterceptHandler {
}
statement.setAligned(false);
- tsStatus =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- session.getUserId(), session.getUsername(), session.getClientAddress()));
+ tsStatus = AuthorityChecker.checkAuthority(statement, session);
if (tsStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
LOG.warn(tsStatus.message);
} else {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/handler/AuthorizationHandler.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/handler/AuthorizationHandler.java
index 3c30e3e95a9..989f5211670 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/handler/AuthorizationHandler.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/handler/AuthorizationHandler.java
@@ -19,19 +19,29 @@ package org.apache.iotdb.db.protocol.rest.handler;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.audit.UserEntity;
+import org.apache.iotdb.commons.auth.entity.User;
import org.apache.iotdb.db.auth.AuthorityChecker;
+import org.apache.iotdb.db.auth.BasicAuthorityCache;
+import org.apache.iotdb.db.auth.ClusterAuthorityFetcher;
+import org.apache.iotdb.db.auth.IAuthorityFetcher;
import org.apache.iotdb.db.protocol.rest.model.ExecutionStatus;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.rpc.TSStatusCode;
+import org.apache.ratis.util.MemoizedSupplier;
+
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
public class AuthorizationHandler {
+ private static final MemoizedSupplier<IAuthorityFetcher> authorityFetcher =
+ MemoizedSupplier.valueOf(() -> new ClusterAuthorityFetcher(new BasicAuthorityCache()));
+
public Response checkAuthority(SecurityContext securityContext, Statement statement) {
String userName = securityContext.getUserPrincipal().getName();
- long userId = AuthorityChecker.getUserId(userName).orElse(-1L);
+ User user = authorityFetcher.get().getUser(userName);
+ long userId = user == null ? -1 : user.getUserId();
TSStatus status =
AuthorityChecker.checkAuthority(statement, new UserEntity(userId, userName, ""));
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index 74c2f6eda6b..fb7a0813002 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -88,7 +88,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.Ta
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TableDeviceSchemaCache;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TableId;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TreeDeviceSchemaCacheManager;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckContext;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetSqlDialect;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.ParsingException;
@@ -347,14 +346,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
false);
} else {
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- s,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress())
- .setSqlString(statement));
+ TSStatus status = AuthorityChecker.checkAuthority(s, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return RpcUtils.getTSExecuteStatementResp(status);
}
@@ -529,13 +521,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
Statement s = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- s,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(s, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return RpcUtils.getTSExecuteStatementResp(status);
}
@@ -624,13 +610,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
try {
Statement s = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- s,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(s, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return RpcUtils.getTSExecuteStatementResp(status);
}
@@ -721,13 +701,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
try {
Statement s = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- s,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(s, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return RpcUtils.getTSExecuteStatementResp(status);
}
@@ -1171,13 +1145,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// cache miss
Statement s = StatementGenerator.createStatement(convert(req));
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- s,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(s, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return RpcUtils.getTSExecuteStatementResp(status);
}
@@ -1572,13 +1540,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: Create SetStorageGroupStatement
DatabaseSchemaStatement statement = StatementGenerator.createStatement(storageGroup);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -1616,13 +1578,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: transfer from TSCreateTimeseriesReq to Statement
CreateTimeSeriesStatement statement = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -1666,13 +1622,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: transfer from CreateAlignedTimeSeriesReq to Statement
CreateAlignedTimeSeriesStatement statement = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -1716,13 +1666,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: transfer from CreateMultiTimeSeriesReq to Statement
CreateMultiTimeSeriesStatement statement = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -1762,13 +1706,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
StatementGenerator.createDeleteTimeSeriesStatement(path);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -1807,13 +1745,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
DeleteDatabaseStatement statement = StatementGenerator.createStatement(storageGroups);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -1893,14 +1825,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
false);
} else {
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- s,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress())
- .setSqlString(statement));
+ TSStatus status = AuthorityChecker.checkAuthority(s, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2090,13 +2015,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
}
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2156,13 +2075,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
}
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2224,13 +2137,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
}
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2294,13 +2201,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
}
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2369,13 +2270,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
}
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2438,13 +2333,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// permission check for tree model, table model does this in the analysis stage
if (!req.isWriteToTable()) {
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2515,13 +2404,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
}
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2611,13 +2494,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
DeleteDataStatement statement = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2677,13 +2554,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
CreateSchemaTemplateStatement statement = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2846,13 +2717,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
try {
IClientSession clientSession = SESSION_MANAGER.getCurrSessionAndUpdateIdleTime();
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
resp.setStatus(status);
return resp;
@@ -2931,13 +2796,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
SetSchemaTemplateStatement statement = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -2978,13 +2837,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
UnsetSchemaTemplateStatement statement = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -3025,13 +2878,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
DropSchemaTemplateStatement statement = StatementGenerator.createStatement(req);
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -3070,13 +2917,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
StatementGenerator.createBatchActivateTemplateStatement(req.getDevicePathList());
// permission check
- TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -3166,13 +3007,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
final InsertRowStatement statement = StatementGenerator.createStatement(req);
// Permission check
- final TSStatus status =
- AuthorityChecker.checkAuthority(
- statement,
- new TreeAccessCheckContext(
- clientSession.getUserId(),
- clientSession.getUsername(),
- clientSession.getClientAddress()));
+ final TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
index 6806b224778..37be5691ee5 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
@@ -495,7 +495,8 @@ class AutoCreateSchemaExecutor {
// Auto create timeseries and return the existing timeseries info
private List<MeasurementPath> executeInternalCreateTimeseriesStatement(
final Statement statement, final MPPQueryContext context) {
- final TSStatus status = AuthorityChecker.checkAuthority(statement, context);
+ final TSStatus status =
+ AuthorityChecker.checkAuthority(statement, context.getSession().getUserEntity());
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
throw new IoTDBRuntimeException(status.getMessage(), status.getCode());
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
index 408c52909e7..58e3e510418 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
+import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
@@ -502,7 +503,10 @@ public class StatementAnalyzer {
accessControl.checkCanInsertIntoTable(
sessionContext.getUserName(),
new QualifiedObjectName(node.getDatabase(), node.getTableName()),
- queryContext);
+ new UserEntity(
+ sessionContext.getUserId(),
+ sessionContext.getUserName(),
+ sessionContext.getCliHostname()));
final TranslationMap translationMap = analyzeTraverseDevice(node, context, true);
final TsTable table =
DataNodeTableCache.getInstance().getTable(node.getDatabase(), node.getTableName());
@@ -563,7 +567,10 @@ public class StatementAnalyzer {
accessControl.checkCanDeleteFromTable(
sessionContext.getUserName(),
new QualifiedObjectName(node.getDatabase(), node.getTableName()),
- queryContext);
+ new UserEntity(
+ sessionContext.getUserId(),
+ sessionContext.getUserName(),
+ sessionContext.getCliHostname()));
final TsTable table =
DataNodeTableCache.getInstance().getTable(node.getDatabase(), node.getTableName());
DataNodeTreeViewSchemaUtils.checkTableInWrite(node.getDatabase(), table);
@@ -638,7 +645,12 @@ public class StatementAnalyzer {
}
// verify access privileges
accessControl.checkCanInsertIntoTable(
- sessionContext.getUserName(), targetTable, queryContext);
+ sessionContext.getUserName(),
+ targetTable,
+ new UserEntity(
+ sessionContext.getUserId(),
+ sessionContext.getUserName(),
+ sessionContext.getCliHostname()));
// verify the insert destination columns match the query
Optional<TableSchema> tableSchema = metadata.getTableSchema(sessionContext, targetTable);
@@ -761,7 +773,10 @@ public class StatementAnalyzer {
new QualifiedObjectName(
AnalyzeUtils.getDatabaseName(node, queryContext),
node.getTable().getName().getSuffix()),
- queryContext);
+ new UserEntity(
+ sessionContext.getUserId(),
+ sessionContext.getUserName(),
+ sessionContext.getCliHostname()));
AnalyzeUtils.analyzeDelete(node, queryContext);
analysis.setScope(node, ret);
@@ -3056,10 +3071,17 @@ public class StatementAnalyzer {
return resultScope;
}
}
+
QualifiedObjectName name = createQualifiedObjectName(sessionContext, table.getName());
// access control
- accessControl.checkCanSelectFromTable(sessionContext.getUserName(), name, queryContext);
+ accessControl.checkCanSelectFromTable(
+ sessionContext.getUserName(),
+ name,
+ new UserEntity(
+ sessionContext.getUserId(),
+ sessionContext.getUserName(),
+ sessionContext.getCliHostname()));
analysis.setRelationName(
table, QualifiedName.of(name.getDatabaseName(), name.getObjectName()));
@@ -4483,7 +4505,10 @@ public class StatementAnalyzer {
accessControl.checkCanSelectFromTable(
sessionContext.getUserName(),
new QualifiedObjectName(node.getDatabase(), node.getTableName()),
- queryContext);
+ new UserEntity(
+ sessionContext.getUserId(),
+ sessionContext.getUserName(),
+ sessionContext.getCliHostname()));
analyzeTraverseDevice(node, context, node.getWhere().isPresent());
final TsTable table =
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
index 35c04bf4c18..6a1cf27d98a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.security;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.audit.IAuditEntity;
+import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
import org.apache.iotdb.commons.path.PartialPath;
@@ -217,7 +218,7 @@ public interface AccessControl {
// ====================================== TREE =============================================
- TSStatus checkPermissionBeforeProcess(Statement statement, TreeAccessCheckContext context);
+ TSStatus checkPermissionBeforeProcess(Statement statement, UserEntity userEntity);
/** called by load */
TSStatus checkFullPathWriteDataPermission(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
index af1dec2f68a..bfffb794335 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.security;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.audit.AuditLogOperation;
import org.apache.iotdb.commons.audit.IAuditEntity;
+import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
@@ -106,9 +107,7 @@ public class AccessControlImpl implements AccessControl {
@Override
public void checkCanCreateTable(
String userName, QualifiedObjectName tableName, IAuditEntity auditEntity) {
- auditEntity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setDatabase(tableName.getDatabaseName());
+ auditEntity.setAuditLogOperation(AuditLogOperation.DDL);
InformationSchemaUtils.checkDBNameInWrite(tableName.getDatabaseName());
if (userName.equals(AuthorityChecker.INTERNAL_AUDIT_USER)
&& tableName.getDatabaseName().equals(TABLE_MODEL_AUDIT_DATABASE)) {
@@ -118,7 +117,7 @@ public class AccessControlImpl implements AccessControl {
checkAuditDatabase(tableName.getDatabaseName());
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SYSTEM)) {
ITableAuthCheckerImpl.recordAuditLog(
- auditEntity.setPrivilegeType(PrivilegeType.CREATE).setResult(true),
+ auditEntity.setPrivilegeType(PrivilegeType.SYSTEM).setResult(true),
tableName::getObjectName);
return;
}
@@ -128,15 +127,10 @@ public class AccessControlImpl implements AccessControl {
@Override
public void checkCanDropTable(
String userName, QualifiedObjectName tableName, IAuditEntity auditEntity) {
- auditEntity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setDatabase(tableName.getDatabaseName());
InformationSchemaUtils.checkDBNameInWrite(tableName.getDatabaseName());
checkAuditDatabase(tableName.getDatabaseName());
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SYSTEM)) {
- ITableAuthCheckerImpl.recordAuditLog(
- auditEntity.setPrivilegeType(PrivilegeType.DROP).setResult(true),
- tableName::getObjectName);
+ ITableAuthCheckerImpl.recordAuditLog(auditEntity, tableName::getObjectName);
return;
}
authChecker.checkTablePrivilege(userName, tableName, TableModelPrivilege.DROP, auditEntity);
@@ -252,82 +246,58 @@ public class AccessControlImpl implements AccessControl {
switch (type) {
case CREATE_USER:
case DROP_USER:
- case UPDATE_USER:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity.setResult(true), statement::getUserName);
+ ITableAuthCheckerImpl.recordAuditLog(auditEntity, statement::getUserName);
return;
}
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_USER, auditEntity);
return;
+ case UPDATE_USER:
case LIST_USER_PRIV:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()
|| statement.getUserName().equals(userName)) {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity.setResult(true), statement::getUserName);
+ ITableAuthCheckerImpl.recordAuditLog(auditEntity, statement::getUserName);
return;
}
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_USER, auditEntity);
return;
case LIST_USER:
- auditEntity.setAuditLogOperation(AuditLogOperation.QUERY);
if (!hasGlobalPrivilege(auditEntity, PrivilegeType.MANAGE_USER)) {
statement.setUserName(userName);
- } else {
- auditEntity.setPrivilegeType(PrivilegeType.SECURITY);
- ITableAuthCheckerImpl.recordAuditLog(auditEntity.setResult(true), statement::getUserName);
}
return;
case CREATE_ROLE:
case DROP_ROLE:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity.setResult(true), statement::getRoleName);
+ ITableAuthCheckerImpl.recordAuditLog(auditEntity, statement::getRoleName);
return;
}
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_ROLE, auditEntity);
return;
case GRANT_USER_ROLE:
case REVOKE_USER_ROLE:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
ITableAuthCheckerImpl.recordAuditLog(
- auditEntity.setResult(true),
+ auditEntity,
() -> "user: " + statement.getUserName() + ", role: " + statement.getRoleName());
return;
}
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_ROLE, auditEntity);
return;
case LIST_ROLE:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (statement.getUserName() != null && !statement.getUserName().equals(userName)) {
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_ROLE, auditEntity);
- ITableAuthCheckerImpl.recordAuditLog(auditEntity.setResult(true), statement::getRoleName);
+ ITableAuthCheckerImpl.recordAuditLog(auditEntity, statement::getRoleName);
return;
}
if (!hasGlobalPrivilege(auditEntity, PrivilegeType.MANAGE_ROLE)) {
statement.setUserName(userName);
- } else {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity.setResult(true), statement::getRoleName);
}
return;
case LIST_ROLE_PRIV:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()
|| AuthorityChecker.checkRole(userName, statement.getRoleName())) {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity.setResult(true), statement::getRoleName);
+ ITableAuthCheckerImpl.recordAuditLog(auditEntity, statement::getRoleName);
return;
}
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_ROLE, auditEntity);
@@ -336,13 +306,9 @@ public class AccessControlImpl implements AccessControl {
case GRANT_USER_ANY:
case REVOKE_ROLE_ANY:
case REVOKE_USER_ANY:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY)
- .setDatabase(statement.getDatabase());
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SECURITY)) {
ITableAuthCheckerImpl.recordAuditLog(
- auditEntity.setResult(true), () -> statement.getUserName() + statement.getRoleName());
+ auditEntity, () -> statement.getUserName() + statement.getRoleName());
return;
}
for (PrivilegeType privilegeType : statement.getPrivilegeTypes()) {
@@ -354,13 +320,9 @@ public class AccessControlImpl implements AccessControl {
case REVOKE_ROLE_ALL:
case GRANT_USER_ALL:
case REVOKE_USER_ALL:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY)
- .setDatabase(statement.getDatabase());
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SECURITY)) {
ITableAuthCheckerImpl.recordAuditLog(
- auditEntity.setResult(true), () -> statement.getUserName() + statement.getRoleName());
+ auditEntity, () -> statement.getUserName() + statement.getRoleName());
return;
}
for (TableModelPrivilege privilege : TableModelPrivilege.values()) {
@@ -377,13 +339,9 @@ public class AccessControlImpl implements AccessControl {
case GRANT_ROLE_DB:
case REVOKE_USER_DB:
case REVOKE_ROLE_DB:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY)
- .setDatabase(statement.getDatabase());
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SECURITY)) {
ITableAuthCheckerImpl.recordAuditLog(
- auditEntity.setResult(true), () -> statement.getUserName() + statement.getRoleName());
+ auditEntity, () -> statement.getUserName() + statement.getRoleName());
return;
}
for (PrivilegeType privilegeType : statement.getPrivilegeTypes()) {
@@ -398,13 +356,9 @@ public class AccessControlImpl implements AccessControl {
case GRANT_ROLE_TB:
case REVOKE_USER_TB:
case REVOKE_ROLE_TB:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY)
- .setDatabase(statement.getDatabase());
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SECURITY)) {
ITableAuthCheckerImpl.recordAuditLog(
- auditEntity.setResult(true), () -> statement.getUserName() + statement.getRoleName());
+ auditEntity, () -> statement.getUserName() + statement.getRoleName());
return;
}
for (PrivilegeType privilegeType : statement.getPrivilegeTypes()) {
@@ -420,12 +374,9 @@ public class AccessControlImpl implements AccessControl {
case GRANT_ROLE_SYS:
case REVOKE_USER_SYS:
case REVOKE_ROLE_SYS:
- auditEntity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SECURITY)) {
ITableAuthCheckerImpl.recordAuditLog(
- auditEntity.setResult(true), () -> statement.getUserName() + statement.getRoleName());
+ auditEntity, () -> statement.getUserName() + statement.getRoleName());
return;
}
for (PrivilegeType privilegeType : statement.getPrivilegeTypes()) {
@@ -469,9 +420,8 @@ public class AccessControlImpl implements AccessControl {
}
@Override
- public TSStatus checkPermissionBeforeProcess(
- Statement statement, TreeAccessCheckContext context) {
- return treeAccessCheckVisitor.process(statement, context);
+ public TSStatus checkPermissionBeforeProcess(Statement statement, UserEntity userEntity) {
+ return treeAccessCheckVisitor.process(statement, new TreeAccessCheckContext(userEntity));
}
@Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java
index 11b20883dbb..3ce14c2fd47 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.security;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.audit.IAuditEntity;
+import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
@@ -115,8 +116,7 @@ public class AllowAllAccessControl implements AccessControl {
String username, Collection<PrivilegeType> privilegeTypes, IAuditEntity auditEntity) {}
@Override
- public TSStatus checkPermissionBeforeProcess(
- Statement statement, TreeAccessCheckContext context) {
+ public TSStatus checkPermissionBeforeProcess(Statement statement, UserEntity userEntity) {
return SUCCEED;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java
index 5dbb91cdbe6..dc92249a0bb 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.security;
import org.apache.iotdb.commons.audit.AuditEventType;
import org.apache.iotdb.commons.audit.AuditLogOperation;
import org.apache.iotdb.commons.audit.IAuditEntity;
+import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import java.util.Collections;
@@ -29,29 +30,25 @@ import java.util.List;
public class TreeAccessCheckContext implements IAuditEntity {
- private final long userId;
- private final String username;
- private final String cliHostname;
+ private final UserEntity userEntity;
- public TreeAccessCheckContext(long userId, String username, String cliHostname) {
- this.userId = userId;
- this.username = username;
- this.cliHostname = cliHostname;
+ public TreeAccessCheckContext(UserEntity userEntity) {
+ this.userEntity = userEntity;
}
@Override
public long getUserId() {
- return userId;
+ return userEntity.getUserId();
}
@Override
public String getUsername() {
- return username;
+ return userEntity.getUsername();
}
@Override
public String getCliHostname() {
- return cliHostname;
+ return userEntity.getCliHostname();
}
private AuditEventType auditEventType;
@@ -137,4 +134,8 @@ public class TreeAccessCheckContext implements IAuditEntity {
this.sqlString = sqlString;
return this;
}
+
+ public UserEntity getUserEntity() {
+ return userEntity;
+ }
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
index 6d8a63d6a83..76761aab42f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
@@ -530,13 +530,9 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitAuthor(AuthorStatement statement, TreeAccessCheckContext context) {
AuthorType authorType = statement.getAuthorType();
- Supplier<String> auditObject;
switch (authorType) {
case CREATE_USER:
case DROP_USER:
- context
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY);
return checkGlobalAuth(
context.setAuditLogOperation(AuditLogOperation.DDL),
PrivilegeType.MANAGE_USER,
@@ -546,31 +542,22 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
if (statement.getUserName().equals(context.getUsername())) {
return RpcUtils.SUCCESS_STATUS;
}
- context
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY);
return checkGlobalAuth(
context.setAuditLogOperation(AuditLogOperation.DDL),
PrivilegeType.MANAGE_USER,
statement::getUserName);
case LIST_USER:
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (checkHasGlobalAuth(
context.setAuditLogOperation(AuditLogOperation.QUERY),
PrivilegeType.MANAGE_USER,
- statement::getUserName)) {
+ null)) {
return RpcUtils.SUCCESS_STATUS;
}
statement.setUserName(context.getUsername());
return RpcUtils.SUCCESS_STATUS;
case LIST_USER_PRIVILEGE:
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (context.getUsername().equals(statement.getUserName())) {
return RpcUtils.SUCCESS_STATUS;
}
@@ -580,9 +567,6 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
statement::getUserName);
case LIST_ROLE_PRIVILEGE:
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (!AuthorityChecker.checkRole(context.getUsername(), statement.getRoleName())) {
return checkGlobalAuth(
context.setAuditLogOperation(AuditLogOperation.QUERY),
@@ -593,13 +577,10 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
}
case LIST_ROLE:
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.SECURITY);
if (checkHasGlobalAuth(
context.setAuditLogOperation(AuditLogOperation.QUERY),
PrivilegeType.MANAGE_ROLE,
- statement::getRoleName)) {
+ null)) {
return SUCCEED;
}
// list roles of other user is not allowed
@@ -614,27 +595,17 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
case DROP_ROLE:
case GRANT_USER_ROLE:
case REVOKE_USER_ROLE:
- context
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY);
- auditObject =
- authorType == AuthorType.CREATE_ROLE || authorType == AuthorType.DROP_ROLE
- ? statement::getRoleName
- : () -> "user: " + statement.getUserName() + ", role: " + statement.getRoleName();
return checkGlobalAuth(
context.setAuditLogOperation(AuditLogOperation.DDL),
PrivilegeType.MANAGE_ROLE,
- auditObject);
+ statement::getRoleName);
case REVOKE_USER:
case GRANT_USER:
case GRANT_ROLE:
case REVOKE_ROLE:
- context
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.SECURITY);
context.setAuditLogOperation(AuditLogOperation.DDL);
- auditObject =
+ Supplier<String> auditObject =
() ->
authorType == AuthorType.REVOKE_USER || authorType == AuthorType.GRANT_USER
? statement.getUserName()
@@ -1412,7 +1383,6 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitAlterTimeSeries(
AlterTimeSeriesStatement statement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.DDL);
// audit db is read-only
if (includeByAuditTreeDB(statement.getPath())
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
@@ -1428,7 +1398,6 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitDeleteTimeSeries(
DeleteTimeSeriesStatement statement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.DDL);
// audit db is read-only
for (PartialPath path : statement.getPathPatternList()) {
if (includeByAuditTreeDB(path)
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/audit/AbstractAuditLogger.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/audit/AbstractAuditLogger.java
index d2d8ce6046c..82eac3606d0 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/audit/AbstractAuditLogger.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/audit/AbstractAuditLogger.java
@@ -94,7 +94,6 @@ public abstract class AbstractAuditLogger {
case DELETE:
case INSERT:
case SELECT:
- case MANAGE_DATABASE:
case WRITE_DATA:
case READ_SCHEMA:
case WRITE_SCHEMA:
@@ -107,6 +106,7 @@ public abstract class AbstractAuditLogger {
case MANAGE_ROLE:
case MANAGE_USER:
case USE_TRIGGER:
+ case MANAGE_DATABASE:
case EXTEND_TEMPLATE:
default:
return PrivilegeLevel.GLOBAL;
(iotdb) 03/03: Revert "Implement audit log for tree model (#16475)"
Posted by yo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yongzao pushed a commit to branch revert-recent-updates-of-audit-log
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 2cb5df8360d4635aefca09747242e6470b93cd02
Author: Yongzao <53...@qq.com>
AuthorDate: Sun Sep 28 09:44:43 2025 +0800
Revert "Implement audit log for tree model (#16475)"
This reverts commit 5ea679f3af3c0ea15694187852cbc8145a582cc6.
---
.../java/org/apache/iotdb/CountPointProcessor.java | 3 +-
.../it/env/cluster/config/MppCommonConfig.java | 24 -
.../env/cluster/config/MppSharedCommonConfig.java | 28 -
.../it/env/remote/config/RemoteCommonConfig.java | 20 -
.../org/apache/iotdb/itbase/env/CommonConfig.java | 8 -
.../iotdb/db/it/audit/IoTDBAuditLogBasicIT.java | 444 ------------
.../iotdb/pipe/it/single/IoTDBPipeAggregateIT.java | 14 +-
.../pipe/it/single/IoTDBPipePermissionIT.java | 3 +-
.../event/dml/insertion/TabletInsertionEvent.java | 6 +-
.../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 38 +-
.../iotdb/confignode/audit/CNAuditLogger.java | 18 +-
.../pipe/payload/PipeDeactivateTemplatePlan.java | 2 +-
.../write/template/CreateSchemaTemplatePlan.java | 2 +-
.../response/template/TemplateInfoResp.java | 2 +-
.../response/template/TemplateSetInfoResp.java | 2 +-
.../iotdb/confignode/manager/ConfigManager.java | 8 +-
.../confignode/manager/PermissionManager.java | 9 +-
.../iotdb/confignode/manager/ProcedureManager.java | 2 +-
.../iotdb/confignode/manager/node/NodeManager.java | 15 +-
.../pipe/source/IoTDBConfigRegionSource.java | 64 +-
...onfigPhysicalPlanTablePatternParseVisitor.java} | 2 +-
...figPhysicalPlanTablePrivilegeParseVisitor.java} | 2 +-
...eConfigPhysicalPlanTableScopeParseVisitor.java} | 2 +-
...ConfigPhysicalPlanTreePatternParseVisitor.java} | 8 +-
...peConfigPhysicalPlanTreeScopeParseVisitor.java} | 2 +-
.../PipeConfigTreePrivilegeParseVisitor.java | 385 ----------
.../manager/schema/ClusterSchemaManager.java | 2 +-
.../confignode/persistence/auth/AuthorInfo.java | 7 -
.../persistence/auth/AuthorPlanExecutor.java | 27 -
.../persistence/auth/IAuthorPlanExecutor.java | 5 -
.../schema/CNPhysicalPlanGenerator.java | 2 +-
.../persistence/schema/ClusterSchemaInfo.java | 2 +-
.../persistence/schema/ConfigMTreeStore.java | 2 +-
.../persistence/schema/TemplateTable.java | 2 +-
.../impl/schema/DeactivateTemplateProcedure.java | 2 +-
.../procedure/impl/schema/SchemaUtils.java | 2 +-
.../impl/schema/SetTemplateProcedure.java | 2 +-
.../impl/schema/UnsetTemplateProcedure.java | 2 +-
.../request/ConfigPhysicalPlanSerDeTest.java | 2 +-
...peConfigPhysicalPlanScopeParseVisitorTest.java} | 2 +-
...gPhysicalPlanTablePatternParseVisitorTest.java} | 2 +-
...igPhysicalPlanTreePatternParseVisitorTest.java} | 4 +-
.../persistence/CNPhysicalPlanGeneratorTest.java | 2 +-
.../persistence/schema/ClusterSchemaInfoTest.java | 2 +-
.../persistence/schema/TemplateTableTest.java | 2 +-
.../pipe/receiver/PipeEnrichedProcedureTest.java | 2 +-
.../schema/DeactivateTemplateProcedureTest.java | 2 +-
.../impl/schema/UnsetTemplateProcedureTest.java | 2 +-
.../AuditLogStorage.java} | 21 +-
.../org/apache/iotdb/db/audit/AuditLogger.java | 278 +++++++
.../org/apache/iotdb/db/audit/DNAuditLogger.java | 198 ++---
.../org/apache/iotdb/db/auth/AuthorityChecker.java | 5 +-
.../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 48 ++
.../schemaregion/SchemaExecutionVisitor.java | 2 +-
.../agent/task/connection/PipeEventCollector.java | 22 +-
.../db/pipe/event/common/PipeInsertionEvent.java | 1 -
.../tablet/PipeInsertNodeTabletInsertionEvent.java | 75 +-
.../common/tablet/PipeRawTabletInsertionEvent.java | 27 +-
.../tablet/parser/TabletInsertionEventParser.java | 3 +-
.../TabletInsertionEventTablePatternParser.java | 4 +-
.../TabletInsertionEventTreePatternParser.java | 38 +-
.../common/tsfile/PipeTsFileInsertionEvent.java | 120 +---
.../tsfile/parser/TsFileInsertionEventParser.java | 8 +-
.../parser/TsFileInsertionEventParserProvider.java | 25 +-
.../query/TsFileInsertionEventQueryParser.java | 59 +-
.../scan/TsFileInsertionEventScanParser.java | 49 +-
.../table/TsFileInsertionEventTableParser.java | 29 +-
...leStatementDataTypeConvertExecutionVisitor.java | 2 +-
.../batch/PipeTabletEventTsFileBatch.java | 6 +-
.../sink/protocol/legacy/IoTDBLegacyPipeSink.java | 7 +-
.../sink/protocol/writeback/WriteBackSink.java | 66 +-
...istoricalDataRegionTsFileAndDeletionSource.java | 7 +-
.../matcher/CachedSchemaPatternMatcher.java | 8 +-
.../schemaregion/IoTDBSchemaRegionSource.java | 10 +-
.../PipePlanTreePrivilegeParseVisitor.java | 344 ---------
.../iotdb/db/protocol/session/SessionManager.java | 44 +-
.../protocol/thrift/impl/ClientRPCServiceImpl.java | 121 ++++
.../impl/DataNodeInternalRPCServiceImpl.java | 2 +-
.../db/queryengine/common/MPPQueryContext.java | 27 +-
.../common/schematree/ClusterSchemaTree.java | 2 +-
.../queryengine/common/schematree/ISchemaTree.java | 2 +-
.../schematree/visitor/SchemaTreeVisitor.java | 2 +-
.../SchemaTreeVisitorWithLimitOffsetWrapper.java | 2 +-
.../execution/executor/RegionWriteExecutor.java | 2 +-
.../operator/schema/SchemaFetchScanOperator.java | 2 +-
.../schema/source/SchemaSourceFactory.java | 2 +-
.../schema/source/TimeSeriesSchemaSource.java | 2 +-
.../db/queryengine/plan/analyze/Analysis.java | 2 +-
.../queryengine/plan/analyze/AnalyzeVisitor.java | 4 +-
.../plan/analyze/TemplatedAggregationAnalyze.java | 2 +-
.../queryengine/plan/analyze/TemplatedAnalyze.java | 2 +-
.../analyze/schema/AutoCreateSchemaExecutor.java | 10 +-
.../analyze/schema/ClusterSchemaFetchExecutor.java | 2 +-
.../plan/analyze/schema/ClusterSchemaFetcher.java | 2 +-
.../plan/analyze/schema/ISchemaFetcher.java | 2 +-
.../plan/analyze/schema/TemplateSchemaFetcher.java | 2 +-
.../execution/config/TableConfigTaskVisitor.java | 33 +-
.../execution/config/TreeConfigTaskVisitor.java | 29 +-
.../config/executor/ClusterConfigTaskExecutor.java | 57 +-
.../template/ShowNodesInSchemaTemplateTask.java | 2 +-
.../metadata/template/ShowSchemaTemplateTask.java | 2 +-
.../execution/config/sys/pipe/AlterPipeTask.java | 10 +-
.../execution/config/sys/pipe/CreatePipeTask.java | 8 +-
.../db/queryengine/plan/parser/ASTVisitor.java | 86 +--
.../plan/planner/LogicalPlanBuilder.java | 2 +-
.../plan/planner/LogicalPlanVisitor.java | 2 +-
.../metadata/read/LevelTimeSeriesCountNode.java | 2 +-
.../metadata/read/SeriesSchemaFetchScanNode.java | 2 +-
.../node/metadata/read/TimeSeriesCountNode.java | 2 +-
.../metadata/read/TimeSeriesSchemaScanNode.java | 2 +-
.../cache/TreeDeviceSchemaCacheManager.java | 2 +-
.../plan/relational/security/AccessControl.java | 5 +-
.../relational/security/AccessControlImpl.java | 89 +--
.../relational/security/AllowAllAccessControl.java | 5 +-
.../relational/security/ITableAuthCheckerImpl.java | 127 ++--
.../security/TreeAccessCheckContext.java | 22 +-
.../security/TreeAccessCheckVisitor.java | 796 +++++----------------
.../plan/relational/sql/ast/CreatePipe.java | 37 +-
.../plan/relational/sql/util/SqlFormatter.java | 8 +-
.../plan/statement/StatementVisitor.java | 6 +-
.../InternalBatchActivateTemplateStatement.java | 2 +-
.../internal/SeriesSchemaFetchStatement.java | 2 +-
.../statement/metadata/CountDatabaseStatement.java | 2 +-
.../metadata/DeleteDatabaseStatement.java | 2 +-
.../statement/metadata/ShowDatabaseStatement.java | 2 +-
.../metadata/pipe/AlterPipeStatement.java | 40 +-
.../metadata/pipe/CreatePipeStatement.java | 28 +-
.../template/ActivateTemplateStatement.java | 11 +-
.../template/BatchActivateTemplateStatement.java | 2 +-
.../template/DeactivateTemplateStatement.java | 2 +-
.../rescon/MemSchemaRegionStatistics.java | 2 +-
.../schemaengine/schemaregion/ISchemaRegion.java | 2 +-
.../schemaregion/impl/SchemaRegionMemoryImpl.java | 2 +-
.../schemaregion/impl/SchemaRegionPBTreeImpl.java | 2 +-
.../schemaregion/mtree/IMTreeStore.java | 2 +-
.../mtree/impl/mem/MTreeBelowSGMemoryImpl.java | 2 +-
.../schemaregion/mtree/impl/mem/MemMTreeStore.java | 2 +-
.../mnode/iterator/AbstractTraverserIterator.java | 2 +-
.../mnode/iterator/MemoryTraverserIterator.java | 2 +-
.../mtree/impl/pbtree/CachedMTreeStore.java | 2 +-
.../mtree/impl/pbtree/MTreeBelowSGCachedImpl.java | 2 +-
.../pbtree/ReentrantReadOnlyCachedMTreeStore.java | 2 +-
.../mnode/iterator/CachedTraverserIterator.java | 2 +-
.../schemaregion/mtree/traverser/Traverser.java | 2 +-
.../schemaregion/read/req/IShowTimeSeriesPlan.java | 2 +-
.../read/req/SchemaRegionReadPlanFactory.java | 2 +-
.../read/req/impl/ShowTimeSeriesPlanImpl.java | 2 +-
.../schemaregion/utils/MNodeUtils.java | 2 +-
.../template/ClusterTemplateManager.java | 1 -
.../db/schemaengine/template/ITemplateManager.java | 1 -
.../iotdb/db/schemaengine}/template/Template.java | 2 +-
.../template/TemplateInternalRPCUtil.java | 2 -
.../java/org/apache/iotdb/db/service/DataNode.java | 9 +-
.../iotdb/db/service/DataNodeShutdownHook.java | 4 +-
...leStatementDataTypeConvertExecutionVisitor.java | 2 +-
.../apache/iotdb/db/utils/DataNodeAuthUtils.java | 20 +-
.../cache/TreeDeviceSchemaCacheManagerTest.java | 2 +-
.../schemaRegion/SchemaRegionManagementTest.java | 2 +-
.../SchemaRegionSimpleRecoverTest.java | 2 +-
.../schemaRegion/SchemaRegionTemplateTest.java | 2 +-
.../schemaRegion/SchemaRegionTestUtil.java | 2 +-
.../schemaRegion/SchemaStatisticsTest.java | 2 +-
.../pipe/event/PipeTabletInsertionEventTest.java | 18 +-
.../pipe/event/TsFileInsertionEventParserTest.java | 30 +-
.../common/schematree/ClusterSchemaTreeTest.java | 2 +-
.../plan/analyze/FakeSchemaFetcherImpl.java | 2 +-
.../plan/planner/distribution/Util.java | 2 +-
.../plan/planner/distribution/Util2.java | 2 +-
.../statement/sys/pipe/PipeStatementTest.java | 8 +-
.../db/utils/SchemaRegionSnapshotParserTest.java | 2 +-
.../iotdb/commons/audit/AbstractAuditLogger.java | 71 +-
.../apache/iotdb/commons/audit/AuditEventType.java | 1 -
.../apache/iotdb/commons/audit/AuditLogFields.java | 102 +--
.../apache/iotdb/commons/audit/IAuditEntity.java | 8 +-
.../org/apache/iotdb/commons/audit/UserEntity.java | 21 +-
.../iotdb/commons/auth/user/BasicUserManager.java | 41 ++
.../apache/iotdb/commons/conf/CommonConfig.java | 13 -
.../iotdb/commons/conf/CommonDescriptor.java | 10 -
.../apache/iotdb/commons/conf/IoTDBConstant.java | 4 +
.../pipe/config/constant/SystemConstant.java | 2 +
.../datastructure/pattern/IoTDBTreePattern.java | 14 -
.../src/main/thrift/confignode.thrift | 8 -
182 files changed, 1507 insertions(+), 3264 deletions(-)
diff --git a/example/pipe-count-point-processor/src/main/java/org/apache/iotdb/CountPointProcessor.java b/example/pipe-count-point-processor/src/main/java/org/apache/iotdb/CountPointProcessor.java
index cc64e42c9f6..53cc4f02a96 100644
--- a/example/pipe-count-point-processor/src/main/java/org/apache/iotdb/CountPointProcessor.java
+++ b/example/pipe-count-point-processor/src/main/java/org/apache/iotdb/CountPointProcessor.java
@@ -59,8 +59,7 @@ public class CountPointProcessor implements PipeProcessor {
@Override
public void process(
- final TabletInsertionEvent tabletInsertionEvent, final EventCollector eventCollector)
- throws Exception {
+ final TabletInsertionEvent tabletInsertionEvent, final EventCollector eventCollector) {
tabletInsertionEvent.processTablet(
(tablet, rowCollector) -> writePointCount.addAndGet(tablet.getRowSize()));
}
diff --git a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppCommonConfig.java b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppCommonConfig.java
index f9120ddb131..b84414eba8c 100644
--- a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppCommonConfig.java
+++ b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppCommonConfig.java
@@ -627,30 +627,6 @@ public class MppCommonConfig extends MppBaseConfig implements CommonConfig {
return this;
}
- @Override
- public CommonConfig setEnableAuditLog(boolean enableAuditLog) {
- setProperty("enable_audit_log", String.valueOf(enableAuditLog));
- return this;
- }
-
- @Override
- public CommonConfig setAuditableOperationType(String auditableOperationType) {
- setProperty("auditable_operation_type", auditableOperationType);
- return this;
- }
-
- @Override
- public CommonConfig setAuditableOperationLevel(String auditableOperationLevel) {
- setProperty("auditable_operation_level", auditableOperationLevel);
- return this;
- }
-
- @Override
- public CommonConfig setAuditableOperationResult(String auditableOperationResult) {
- setProperty("auditable_operation_result", auditableOperationResult);
- return this;
- }
-
// For part of the log directory
public String getClusterConfigStr() {
return fromConsensusFullNameToAbbr(properties.getProperty(CONFIG_NODE_CONSENSUS_PROTOCOL_CLASS))
diff --git a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppSharedCommonConfig.java b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppSharedCommonConfig.java
index 504b1ae60e2..2599aa3854a 100644
--- a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppSharedCommonConfig.java
+++ b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppSharedCommonConfig.java
@@ -656,32 +656,4 @@ public class MppSharedCommonConfig implements CommonConfig {
cnConfig.setDatanodeMemoryProportion(datanodeMemoryProportion);
return this;
}
-
- @Override
- public CommonConfig setEnableAuditLog(boolean enableAuditLog) {
- dnConfig.setEnableAuditLog(enableAuditLog);
- cnConfig.setEnableAuditLog(enableAuditLog);
- return this;
- }
-
- @Override
- public CommonConfig setAuditableOperationType(String auditableOperationType) {
- dnConfig.setAuditableOperationType(auditableOperationType);
- cnConfig.setAuditableOperationType(auditableOperationType);
- return this;
- }
-
- @Override
- public CommonConfig setAuditableOperationLevel(String auditableOperationLevel) {
- dnConfig.setAuditableOperationLevel(auditableOperationLevel);
- cnConfig.setAuditableOperationLevel(auditableOperationLevel);
- return this;
- }
-
- @Override
- public CommonConfig setAuditableOperationResult(String auditableOperationResult) {
- dnConfig.setAuditableOperationResult(auditableOperationResult);
- cnConfig.setAuditableOperationResult(auditableOperationResult);
- return this;
- }
}
diff --git a/integration-test/src/main/java/org/apache/iotdb/it/env/remote/config/RemoteCommonConfig.java b/integration-test/src/main/java/org/apache/iotdb/it/env/remote/config/RemoteCommonConfig.java
index fdcff20dbc8..7b093f4804e 100644
--- a/integration-test/src/main/java/org/apache/iotdb/it/env/remote/config/RemoteCommonConfig.java
+++ b/integration-test/src/main/java/org/apache/iotdb/it/env/remote/config/RemoteCommonConfig.java
@@ -457,24 +457,4 @@ public class RemoteCommonConfig implements CommonConfig {
public CommonConfig setDatanodeMemoryProportion(String datanodeMemoryProportion) {
return this;
}
-
- @Override
- public CommonConfig setEnableAuditLog(boolean enableAuditLog) {
- return this;
- }
-
- @Override
- public CommonConfig setAuditableOperationType(String auditableOperationType) {
- return this;
- }
-
- @Override
- public CommonConfig setAuditableOperationLevel(String auditableOperationLevel) {
- return this;
- }
-
- @Override
- public CommonConfig setAuditableOperationResult(String auditableOperationResult) {
- return this;
- }
}
diff --git a/integration-test/src/main/java/org/apache/iotdb/itbase/env/CommonConfig.java b/integration-test/src/main/java/org/apache/iotdb/itbase/env/CommonConfig.java
index 9767e1c089e..0d11b05b0bf 100644
--- a/integration-test/src/main/java/org/apache/iotdb/itbase/env/CommonConfig.java
+++ b/integration-test/src/main/java/org/apache/iotdb/itbase/env/CommonConfig.java
@@ -203,12 +203,4 @@ public interface CommonConfig {
CommonConfig setTrustStorePwd(String trustStorePwd);
CommonConfig setDatanodeMemoryProportion(String datanodeMemoryProportion);
-
- CommonConfig setEnableAuditLog(boolean enableAuditLog);
-
- CommonConfig setAuditableOperationType(String auditableOperationType);
-
- CommonConfig setAuditableOperationLevel(String auditableOperationLevel);
-
- CommonConfig setAuditableOperationResult(String auditableOperationResult);
}
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java
deleted file mode 100644
index a956b2033e0..00000000000
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.it.audit;
-
-import org.apache.iotdb.commons.audit.AbstractAuditLogger;
-import org.apache.iotdb.commons.audit.AuditLogOperation;
-import org.apache.iotdb.commons.audit.PrivilegeLevel;
-import org.apache.iotdb.it.env.EnvFactory;
-import org.apache.iotdb.it.framework.IoTDBTestRunner;
-import org.apache.iotdb.itbase.category.LocalStandaloneIT;
-import org.apache.iotdb.itbase.env.BaseEnv;
-
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.StringJoiner;
-
-@RunWith(IoTDBTestRunner.class)
-@Category({LocalStandaloneIT.class})
-public class IoTDBAuditLogBasicIT {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(IoTDBAuditLogBasicIT.class);
-
- /**
- * Ensure the Audit log behave exactly the same as we expected, including number, sequence and
- * content.
- */
- private static final List<String> AUDIT_TABLE_COLUMNS =
- Arrays.asList(
- AbstractAuditLogger.AUDIT_LOG_NODE_ID,
- AbstractAuditLogger.AUDIT_LOG_USER_ID,
- AbstractAuditLogger.AUDIT_LOG_USERNAME,
- AbstractAuditLogger.AUDIT_LOG_CLI_HOSTNAME,
- AbstractAuditLogger.AUDIT_LOG_AUDIT_EVENT_TYPE,
- AbstractAuditLogger.AUDIT_LOG_OPERATION_TYPE,
- AbstractAuditLogger.AUDIT_LOG_PRIVILEGE_TYPE,
- AbstractAuditLogger.AUDIT_LOG_PRIVILEGE_LEVEL,
- AbstractAuditLogger.AUDIT_LOG_RESULT,
- AbstractAuditLogger.AUDIT_LOG_DATABASE,
- AbstractAuditLogger.AUDIT_LOG_SQL_STRING,
- AbstractAuditLogger.AUDIT_LOG_LOG);
-
- private static final List<String> AUDIT_TABLE_DATA_TYPES =
- Arrays.asList(
- "STRING", "STRING", "STRING", "STRING", "STRING", "STRING", "STRING", "STRING", "BOOLEAN",
- "STRING", "STRING", "STRING");
-
- private static final List<String> AUDIT_TABLE_CATEGORIES =
- Arrays.asList(
- "TAG", "TAG", "FIELD", "FIELD", "FIELD", "FIELD", "FIELD", "FIELD", "FIELD", "FIELD",
- "FIELD", "FIELD");
-
- private static final boolean ENABLE_AUDIT_LOG = true;
- private static final String AUDITABLE_OPERATION_TYPE =
- new StringJoiner(",")
- .add(AuditLogOperation.DDL.toString())
- .add(AuditLogOperation.DML.toString())
- .add(AuditLogOperation.QUERY.toString())
- .add(AuditLogOperation.CONTROL.toString())
- .toString();
-
- private static final String AUDITABLE_OPERATION_LEVEL = PrivilegeLevel.GLOBAL.toString();
-
- private static final String AUDITABLE_OPERATION_RESULT = "SUCCESS,FAIL";
-
- @BeforeClass
- public static void setUp() throws SQLException {
- EnvFactory.getEnv()
- .getConfig()
- .getCommonConfig()
- .setEnableAuditLog(ENABLE_AUDIT_LOG)
- .setAuditableOperationType(AUDITABLE_OPERATION_TYPE)
- .setAuditableOperationLevel(AUDITABLE_OPERATION_LEVEL)
- .setAuditableOperationResult(AUDITABLE_OPERATION_RESULT);
-
- // Init 1C1D cluster environment
- EnvFactory.getEnv().initClusterEnvironment(1, 1);
-
- try (Connection connection = EnvFactory.getEnv().getConnection(BaseEnv.TREE_SQL_DIALECT);
- Statement statement = connection.createStatement()) {
- // Ensure there exists audit database in tree model
- ResultSet resultSet = statement.executeQuery("SHOW DATABASES root.__audit");
- Assert.assertTrue(resultSet.next());
- Assert.assertEquals("root.__audit", resultSet.getString(1));
- }
-
- try (Connection connection = EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT);
- Statement statement = connection.createStatement()) {
- // Ensure there exists audit table
- ResultSet resultSet = statement.executeQuery("DESC __audit.audit_log");
- resultSet.next(); // Skip time column
- int cnt = 0;
- while (resultSet.next()) {
- Assert.assertEquals(AUDIT_TABLE_COLUMNS.get(cnt), resultSet.getString(1));
- Assert.assertEquals(AUDIT_TABLE_DATA_TYPES.get(cnt), resultSet.getString(2));
- Assert.assertEquals(AUDIT_TABLE_CATEGORIES.get(cnt), resultSet.getString(3));
- cnt++;
- }
- Assert.assertEquals(AUDIT_TABLE_COLUMNS.size(), cnt);
- }
- }
-
- @AfterClass
- public static void tearDown() {
- EnvFactory.getEnv().cleanClusterEnvironment();
- }
-
- private static final List<String> TABLE_MODEL_AUDIT_SQLS =
- Arrays.asList(
- "CREATE DATABASE test",
- // "SHOW DATABASES",
- "ALTER DATABASE test SET PROPERTIES TTL='INF'",
- "USE test",
- "CREATE TABLE table1(t1 STRING TAG, a1 STRING ATTRIBUTE, s1 TEXT FIELD)",
- "SHOW TABLES",
- "DESC table1",
- "ALTER TABLE table1 set properties TTL='INF'",
- "INSERT INTO table1(time, t1, a1, s1) values(1, 't1', 'a1', 's1')",
- "DELETE FROM table1",
- "DROP TABLE table1",
- "DROP DATABASE IF EXISTS test");
- private static final List<List<String>> TABLE_MODEL_AUDIT_FIELDS =
- Arrays.asList(
- // Start DataNode
- Arrays.asList(
- "node_1",
- "u_none",
- "null",
- "null",
- "CHANGE_AUDIT_OPTION",
- "CONTROL",
- "[AUDIT]",
- "GLOBAL",
- "true",
- "null",
- "null",
- "Successfully start the Audit service with configurations (auditableOperationType [DDL, DML, QUERY, CONTROL], auditableOperationLevel GLOBAL, auditableOperationResult SUCCESS,FAIL)"),
- // Create password history TODO: @Hongzhi Gao move password history under __audit
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "null",
- "null",
- "true",
- "root.__system",
- "null",
- "User root (ID=0) requests authority on object root.__system with result true"),
- // Show audit database TODO: Fix typo in tree model
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[MANAGE_DATABASE]",
- "GLOBAL",
- "true",
- "[root.__audit]",
- "null",
- "User root (ID=0) requests authority on object root.__audit with result true"),
- // Desc audit table
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[READ_SCHEMA]",
- "OBJECT",
- "true",
- "__audit",
- "DESC __audit.audit_log",
- "User root (ID=0) requests authority on object audit_log with result true"),
- // Create database
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[CREATE]",
- "OBJECT",
- "true",
- "test",
- "CREATE DATABASE test",
- "User root (ID=0) requests authority on object test with result true"),
- // Show database TODO: Enable only when the order of show databases authentication fixed
- // Arrays.asList(
- // "node_1",
- // "u_0",
- // "root",
- // "127.0.0.1",
- // "OBJECT_AUTHENTICATION",
- // "QUERY",
- // "[READ_SCHEMA]",
- // "OBJECT",
- // "true",
- // "test",
- // "SHOW DATABASES",
- // "User root (ID=0) requests authority on object test with result true"),
- // Arrays.asList(
- // "node_1",
- // "u_0",
- // "root",
- // "127.0.0.1",
- // "OBJECT_AUTHENTICATION",
- // "QUERY",
- // "[READ_SCHEMA]",
- // "OBJECT",
- // "true",
- // "information_schema",
- // "SHOW DATABASES",
- // "User root (ID=0) requests authority on object information_schema with
- // result true"),
- // Arrays.asList(
- // "node_1",
- // "u_0",
- // "root",
- // "127.0.0.1",
- // "OBJECT_AUTHENTICATION",
- // "QUERY",
- // "[READ_SCHEMA]",
- // "OBJECT",
- // "true",
- // "__audit",
- // "SHOW DATABASES",
- // "User root (ID=0) requests authority on object test with result true"),
- // Alter database
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[ALTER]",
- "OBJECT",
- "true",
- "test",
- "ALTER DATABASE test SET PROPERTIES TTL='INF'",
- "User root (ID=0) requests authority on object test with result true"),
- // Use database TODO: Find out why twice
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[READ_SCHEMA]",
- "OBJECT",
- "true",
- "test",
- "USE test",
- "User root (ID=0) requests authority on object test with result true"),
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[READ_SCHEMA]",
- "OBJECT",
- "true",
- "test",
- "USE test",
- "User root (ID=0) requests authority on object test with result true"),
- // Create table
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[SYSTEM]",
- "GLOBAL",
- "true",
- "test",
- "CREATE TABLE table1(t1 STRING TAG, a1 STRING ATTRIBUTE, s1 TEXT FIELD)",
- "User root (ID=0) requests authority on object table1 with result true"),
- // Show table
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[READ_SCHEMA]",
- "OBJECT",
- "true",
- "test",
- "SHOW TABLES",
- "User root (ID=0) requests authority on object table1 with result true"),
- // Desc table
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[READ_SCHEMA]",
- "OBJECT",
- "true",
- "test",
- "DESC table1",
- "User root (ID=0) requests authority on object table1 with result true"),
- // Insert into table
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DML",
- "[INSERT]",
- "OBJECT",
- "true",
- "test",
- "INSERT INTO table1(time, t1, a1, s1) values(1, 't1', 'a1', 's1')",
- "User root (ID=0) requests authority on object table1 with result true"),
- // Delete table TODO: find the delete SQL
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DML",
- "[DELETE]",
- "OBJECT",
- "true",
- "test",
- "null",
- "User root (ID=0) requests authority on object table1 with result true"),
- // Drop database
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "DDL",
- "[DROP]",
- "OBJECT",
- "true",
- "test",
- "DROP DATABASE IF EXISTS test",
- "User root (ID=0) requests authority on object test with result true"),
- // Select audit log TODO: find out why twice
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[SELECT]",
- "OBJECT",
- "true",
- "__audit",
- "null",
- "User root (ID=0) requests authority on object __audit with result true"),
- Arrays.asList(
- "node_1",
- "u_0",
- "root",
- "127.0.0.1",
- "OBJECT_AUTHENTICATION",
- "QUERY",
- "[SELECT]",
- "OBJECT",
- "true",
- "__audit",
- "null",
- "User root (ID=0) requests authority on object __audit with result true"));
-
- @Test
- public void basicAuditLogTestForTableModel() throws SQLException {
- try (Connection connection = EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT);
- Statement statement = connection.createStatement()) {
- for (String sql : TABLE_MODEL_AUDIT_SQLS) {
- statement.execute(sql);
- }
- int count = 0;
- ResultSet resultSet = statement.executeQuery("SELECT * FROM __audit.audit_log");
- while (resultSet.next()) {
- LOGGER.info("Expected audit log: {}", TABLE_MODEL_AUDIT_FIELDS.get(count));
- List<String> actualFields = new ArrayList<>();
- for (int i = 1; i <= 12; i++) {
- actualFields.add(resultSet.getString(i + 1));
- }
- LOGGER.info("Actual audit log: {}", actualFields);
- List<String> expectedFields = TABLE_MODEL_AUDIT_FIELDS.get(count);
- for (int i = 1; i <= 11; i++) {
- Assert.assertEquals(expectedFields.get(i - 1), resultSet.getString(i + 1));
- }
- Assert.assertTrue(resultSet.getString(13).contains(expectedFields.get(11)));
- count++;
- }
- Assert.assertEquals(TABLE_MODEL_AUDIT_FIELDS.size(), count);
- }
- }
-}
diff --git a/integration-test/src/test/java/org/apache/iotdb/pipe/it/single/IoTDBPipeAggregateIT.java b/integration-test/src/test/java/org/apache/iotdb/pipe/it/single/IoTDBPipeAggregateIT.java
index 9430e0adbfa..8be50230144 100644
--- a/integration-test/src/test/java/org/apache/iotdb/pipe/it/single/IoTDBPipeAggregateIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/pipe/it/single/IoTDBPipeAggregateIT.java
@@ -28,7 +28,6 @@ import org.apache.iotdb.itbase.category.MultiClusterIT1;
import org.apache.iotdb.rpc.TSStatusCode;
import org.junit.Assert;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
@@ -42,7 +41,6 @@ import java.util.Map;
@Category({MultiClusterIT1.class})
public class IoTDBPipeAggregateIT extends AbstractPipeSingleIT {
@Test
- @Ignore
public void testAggregator() throws Exception {
try (final SyncConfigNodeIServiceClient client =
(SyncConfigNodeIServiceClient) env.getLeaderConfigNodeConnection()) {
@@ -57,11 +55,11 @@ public class IoTDBPipeAggregateIT extends AbstractPipeSingleIT {
"insert into root.ln.wf01.wt01(time, temperature, status) values (10000, 1, false)"),
null);
- final Map<String, String> sourceAttributes = new HashMap<>();
+ final Map<String, String> extractorAttributes = new HashMap<>();
final Map<String, String> processorAttributes = new HashMap<>();
- final Map<String, String> sinkAttributes = new HashMap<>();
+ final Map<String, String> connectorAttributes = new HashMap<>();
- sourceAttributes.put("pattern", "root.ln");
+ extractorAttributes.put("pattern", "root.ln");
processorAttributes.put("processor", "aggregate-processor");
processorAttributes.put("output.database", "root.testdb");
@@ -71,12 +69,12 @@ public class IoTDBPipeAggregateIT extends AbstractPipeSingleIT {
"operators", "avg, peak, rms, var, skew, kurt, ff, cf, pf, cE, max, min");
processorAttributes.put("sliding.seconds", "60");
- sinkAttributes.put("sink", "write-back-sink");
+ connectorAttributes.put("sink", "write-back-sink");
final TSStatus status =
client.createPipe(
- new TCreatePipeReq("testPipe", sinkAttributes)
- .setExtractorAttributes(sourceAttributes)
+ new TCreatePipeReq("testPipe", connectorAttributes)
+ .setExtractorAttributes(extractorAttributes)
.setProcessorAttributes(processorAttributes));
Assert.assertEquals(TSStatusCode.SUCCESS_STATUS.getStatusCode(), status.getCode());
diff --git a/integration-test/src/test/java/org/apache/iotdb/pipe/it/single/IoTDBPipePermissionIT.java b/integration-test/src/test/java/org/apache/iotdb/pipe/it/single/IoTDBPipePermissionIT.java
index eca7145dd34..33ab3d7a6a6 100644
--- a/integration-test/src/test/java/org/apache/iotdb/pipe/it/single/IoTDBPipePermissionIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/pipe/it/single/IoTDBPipePermissionIT.java
@@ -49,8 +49,7 @@ public class IoTDBPipePermissionIT extends AbstractPipeSingleIT {
// Shall fail if username is specified without password
try (final Connection connection = env.getConnection(BaseEnv.TABLE_SQL_DIALECT);
final Statement statement = connection.createStatement()) {
- statement.execute(
- "create pipe a2b with source ('capture.tree'='true') with sink ('user'='thulab', 'sink'='write-back-sink')");
+ statement.execute("create pipe a2b ('user'='thulab', 'sink'='write-back-sink')");
fail("When the 'user' or 'username' is specified, password must be specified too.");
} catch (final SQLException ignore) {
// Expected
diff --git a/iotdb-api/pipe-api/src/main/java/org/apache/iotdb/pipe/api/event/dml/insertion/TabletInsertionEvent.java b/iotdb-api/pipe-api/src/main/java/org/apache/iotdb/pipe/api/event/dml/insertion/TabletInsertionEvent.java
index 3ed7e166207..6e1575a464f 100644
--- a/iotdb-api/pipe-api/src/main/java/org/apache/iotdb/pipe/api/event/dml/insertion/TabletInsertionEvent.java
+++ b/iotdb-api/pipe-api/src/main/java/org/apache/iotdb/pipe/api/event/dml/insertion/TabletInsertionEvent.java
@@ -36,8 +36,7 @@ public interface TabletInsertionEvent extends Event {
* @return {@code Iterable<TabletInsertionEvent>} a list of new {@link TabletInsertionEvent}
* contains the results collected by the {@link RowCollector}
*/
- Iterable<TabletInsertionEvent> processRowByRow(BiConsumer<Row, RowCollector> consumer)
- throws Exception;
+ Iterable<TabletInsertionEvent> processRowByRow(BiConsumer<Row, RowCollector> consumer);
/**
* The consumer processes the Tablet directly and collects the results by {@link RowCollector}.
@@ -45,6 +44,5 @@ public interface TabletInsertionEvent extends Event {
* @return {@code Iterable<TabletInsertionEvent>} a list of new {@link TabletInsertionEvent}
* contains the results collected by the {@link RowCollector}
*/
- Iterable<TabletInsertionEvent> processTablet(BiConsumer<Tablet, RowCollector> consumer)
- throws Exception;
+ Iterable<TabletInsertionEvent> processTablet(BiConsumer<Tablet, RowCollector> consumer);
}
diff --git a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
index 31fa0a2556e..3095adba3f6 100644
--- a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
+++ b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
@@ -571,21 +571,21 @@ removeAINode
// Pipe Task =========================================================================================
createPipe
: CREATE PIPE (IF NOT EXISTS)? pipeName=identifier
- ((sourceAttributesClause?
+ ((extractorAttributesClause?
processorAttributesClause?
- sinkAttributesClause)
- |sinkAttributesWithoutWithSinkClause)
+ connectorAttributesClause)
+ |connectorAttributesWithoutWithSinkClause)
;
-sourceAttributesClause
+extractorAttributesClause
: WITH (EXTRACTOR | SOURCE)
LR_BRACKET
- (sourceAttributeClause COMMA)* sourceAttributeClause?
+ (extractorAttributeClause COMMA)* extractorAttributeClause?
RR_BRACKET
;
-sourceAttributeClause
- : sourceKey=STRING_LITERAL OPERATOR_SEQ sourceValue=STRING_LITERAL
+extractorAttributeClause
+ : extractorKey=STRING_LITERAL OPERATOR_SEQ extractorValue=STRING_LITERAL
;
processorAttributesClause
@@ -599,32 +599,32 @@ processorAttributeClause
: processorKey=STRING_LITERAL OPERATOR_SEQ processorValue=STRING_LITERAL
;
-sinkAttributesClause
+connectorAttributesClause
: WITH (CONNECTOR | SINK)
LR_BRACKET
- (sinkAttributeClause COMMA)* sinkAttributeClause?
+ (connectorAttributeClause COMMA)* connectorAttributeClause?
RR_BRACKET
;
-sinkAttributesWithoutWithSinkClause
- : LR_BRACKET (sinkAttributeClause COMMA)* sinkAttributeClause? RR_BRACKET
+connectorAttributesWithoutWithSinkClause
+ : LR_BRACKET (connectorAttributeClause COMMA)* connectorAttributeClause? RR_BRACKET
;
-sinkAttributeClause
- : sinkKey=STRING_LITERAL OPERATOR_SEQ sinkValue=STRING_LITERAL
+connectorAttributeClause
+ : connectorKey=STRING_LITERAL OPERATOR_SEQ connectorValue=STRING_LITERAL
;
alterPipe
: ALTER PIPE (IF EXISTS)? pipeName=identifier
- alterSourceAttributesClause?
+ alterExtractorAttributesClause?
alterProcessorAttributesClause?
- alterSinkAttributesClause?
+ alterConnectorAttributesClause?
;
-alterSourceAttributesClause
+alterExtractorAttributesClause
: (MODIFY | REPLACE) (EXTRACTOR | SOURCE)
LR_BRACKET
- (sourceAttributeClause COMMA)* sourceAttributeClause?
+ (extractorAttributeClause COMMA)* extractorAttributeClause?
RR_BRACKET
;
@@ -635,10 +635,10 @@ alterProcessorAttributesClause
RR_BRACKET
;
-alterSinkAttributesClause
+alterConnectorAttributesClause
: (MODIFY | REPLACE) (CONNECTOR | SINK)
LR_BRACKET
- (sinkAttributeClause COMMA)* sinkAttributeClause?
+ (connectorAttributeClause COMMA)* connectorAttributeClause?
RR_BRACKET
;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/audit/CNAuditLogger.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/audit/CNAuditLogger.java
index 9b14d7b8423..7c65372bb1b 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/audit/CNAuditLogger.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/audit/CNAuditLogger.java
@@ -24,7 +24,7 @@ import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.audit.AbstractAuditLogger;
-import org.apache.iotdb.commons.audit.IAuditEntity;
+import org.apache.iotdb.commons.audit.AuditLogFields;
import org.apache.iotdb.confignode.client.async.AsyncDataNodeHeartbeatClientPool;
import org.apache.iotdb.confignode.client.async.handlers.audit.DataNodeWriteAuditLogHandler;
import org.apache.iotdb.confignode.conf.ConfigNodeConfig;
@@ -37,7 +37,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
-import java.util.function.Supplier;
public class CNAuditLogger extends AbstractAuditLogger {
private static final Logger logger = LoggerFactory.getLogger(CNAuditLogger.class);
@@ -49,12 +48,11 @@ public class CNAuditLogger extends AbstractAuditLogger {
this.configManager = configManager;
}
- @Override
- public void log(IAuditEntity auditLogFields, Supplier<String> log) {
+ public void log(AuditLogFields auditLogFields, String log) {
if (!IS_AUDIT_LOG_ENABLED) {
return;
}
- if (noNeedInsertAuditLog(auditLogFields)) {
+ if (!checkBeforeLog(auditLogFields)) {
return;
}
// find database "__audit"'s data_region
@@ -74,13 +72,13 @@ public class CNAuditLogger extends AbstractAuditLogger {
auditLogFields.getUsername(),
auditLogFields.getUserId(),
auditLogFields.getCliHostname(),
- auditLogFields.getAuditEventType().toString(),
- auditLogFields.getAuditLogOperation().toString(),
- auditLogFields.getPrivilegeTypeString(),
- auditLogFields.getResult(),
+ auditLogFields.getAuditType().toString(),
+ auditLogFields.getOperationType().toString(),
+ auditLogFields.getPrivilegeType().toString(),
+ auditLogFields.isResult(),
auditLogFields.getDatabase(),
auditLogFields.getSqlString(),
- log.get(),
+ log,
CONF.getConfigNodeId());
// refer the implementation of HeartbeatService.pingRegisteredDataNode(). By appending a new
// writeAudtiLog() interface in AsyncDataNodeHeartbeatClientPool, the main thread is not
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeDeactivateTemplatePlan.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeDeactivateTemplatePlan.java
index 6b09f7c9fef..b91d7ab8c88 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeDeactivateTemplatePlan.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeDeactivateTemplatePlan.java
@@ -21,9 +21,9 @@ package org.apache.iotdb.confignode.consensus.request.write.pipe.payload;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathDeserializeUtil;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.utils.ReadWriteIOUtils;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/template/CreateSchemaTemplatePlan.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/template/CreateSchemaTemplatePlan.java
index fa27754eecd..bd8b5a7400f 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/template/CreateSchemaTemplatePlan.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/template/CreateSchemaTemplatePlan.java
@@ -19,9 +19,9 @@
package org.apache.iotdb.confignode.consensus.request.write.template;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.utils.ReadWriteIOUtils;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/template/TemplateInfoResp.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/template/TemplateInfoResp.java
index 5f98894be39..fdf4c805a10 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/template/TemplateInfoResp.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/template/TemplateInfoResp.java
@@ -20,8 +20,8 @@
package org.apache.iotdb.confignode.consensus.response.template;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.consensus.common.DataSet;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.List;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/template/TemplateSetInfoResp.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/template/TemplateSetInfoResp.java
index 2bd10ebabf4..08e64c2afd0 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/template/TemplateSetInfoResp.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/template/TemplateSetInfoResp.java
@@ -21,8 +21,8 @@ package org.apache.iotdb.confignode.consensus.response.template;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.consensus.common.DataSet;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.List;
import java.util.Map;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index 5c932fee4cb..60883d6dd94 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -63,7 +63,6 @@ import org.apache.iotdb.commons.schema.table.AlterOrDropTableOperationType;
import org.apache.iotdb.commons.schema.table.TreeViewSchema;
import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.TsTableInternalRPCUtil;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.ttl.TTLCache;
import org.apache.iotdb.commons.service.metric.MetricService;
import org.apache.iotdb.commons.utils.AuthUtils;
@@ -262,6 +261,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TUnsubscribeReq;
import org.apache.iotdb.confignode.rpc.thrift.TUpdateModelInfoReq;
import org.apache.iotdb.consensus.common.DataSet;
import org.apache.iotdb.consensus.exception.ConsensusException;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.TemplateAlterOperationType;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateAlterOperationUtil;
import org.apache.iotdb.rpc.RpcUtils;
@@ -286,7 +286,6 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -847,11 +846,8 @@ public class ConfigManager implements IManager {
final List<PartialPath> relatedPaths = patternTree.getAllPathPatterns();
final List<String> allDatabases = getClusterSchemaManager().getDatabaseNames(false);
final List<PartialPath> allDatabasePaths = new ArrayList<>();
- Iterator<String> iterator = allDatabases.iterator();
- while (iterator.hasNext()) {
- String database = iterator.next();
+ for (final String database : allDatabases) {
if (!needAuditDB && TREE_MODEL_AUDIT_DATABASE.equalsIgnoreCase(database)) {
- iterator.remove();
continue;
}
try {
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java
index 26a0732f4b2..1ef0bcf04f0 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java
@@ -22,9 +22,7 @@ package org.apache.iotdb.confignode.manager;
import org.apache.iotdb.common.rpc.thrift.TDataNodeConfiguration;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.auth.AuthException;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.auth.entity.PrivilegeUnion;
-import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
import org.apache.iotdb.confignode.consensus.request.write.auth.AuthorPlan;
import org.apache.iotdb.confignode.consensus.request.write.pipe.payload.PipeEnrichedPlan;
@@ -49,7 +47,7 @@ public class PermissionManager {
private final ConfigManager configManager;
private final AuthorInfo authorInfo;
- public PermissionManager(final ConfigManager configManager, final AuthorInfo authorInfo) {
+ public PermissionManager(ConfigManager configManager, AuthorInfo authorInfo) {
this.configManager = configManager;
this.authorInfo = authorInfo;
}
@@ -129,11 +127,6 @@ public class PermissionManager {
return authorInfo.generateAuthorizedPTree(username, permission);
}
- public PathPatternTree fetchRawAuthorizedPTree(final String userName, final PrivilegeType type)
- throws AuthException {
- return authorInfo.generateRawAuthorizedPTree(userName, type);
- }
-
public TPermissionInfoResp checkUserPrivilegeGrantOpt(String username, PrivilegeUnion union)
throws AuthException {
union.setGrantOption(true);
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
index 3b1765eb445..3dcb01de273 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
@@ -37,7 +37,6 @@ import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.pipe.agent.plugin.meta.PipePluginMeta;
import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchemaUtil;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
import org.apache.iotdb.commons.service.metric.MetricService;
import org.apache.iotdb.commons.trigger.TriggerInformation;
@@ -150,6 +149,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TSubscribeReq;
import org.apache.iotdb.confignode.rpc.thrift.TUnsubscribeReq;
import org.apache.iotdb.consensus.ConsensusFactory;
import org.apache.iotdb.db.exception.BatchProcessException;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.utils.constant.SqlConstant;
import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.rpc.TSStatusCode;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
index 4b650de9374..ab247fcad12 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
@@ -80,7 +80,6 @@ import org.apache.iotdb.confignode.rpc.thrift.TAINodeInfo;
import org.apache.iotdb.confignode.rpc.thrift.TAINodeRegisterReq;
import org.apache.iotdb.confignode.rpc.thrift.TAINodeRestartReq;
import org.apache.iotdb.confignode.rpc.thrift.TAINodeRestartResp;
-import org.apache.iotdb.confignode.rpc.thrift.TAuditConfig;
import org.apache.iotdb.confignode.rpc.thrift.TCQConfig;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeInfo;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeInfo4InformationSchema;
@@ -127,7 +126,7 @@ public class NodeManager {
private static final Logger LOGGER = LoggerFactory.getLogger(NodeManager.class);
private static final ConfigNodeConfig CONF = ConfigNodeDescriptor.getInstance().getConf();
- private static final CommonConfig COMMON_CONFIG = CommonDescriptor.getInstance().getConfig();
+ public static final long HEARTBEAT_INTERVAL = CONF.getHeartbeatIntervalInMs();
private final IManager configManager;
protected final NodeInfo nodeInfo;
@@ -252,17 +251,6 @@ public class NodeManager {
dataSet.setCqConfig(cqConfig);
}
- private TAuditConfig getAuditConfig() {
- TAuditConfig auditConfig = new TAuditConfig();
- auditConfig.setEnableAuditLog(COMMON_CONFIG.isEnableAuditLog());
- if (COMMON_CONFIG.isEnableAuditLog()) {
- auditConfig.setAuditableOperationType(COMMON_CONFIG.getAuditableOperationTypeInStr());
- auditConfig.setAuditableOperationLevel(COMMON_CONFIG.getAuditableOperationLevelInStr());
- auditConfig.setAuditableOperationResult(COMMON_CONFIG.getAuditableOperationResult());
- }
- return auditConfig;
- }
-
private TRuntimeConfiguration getRuntimeConfiguration() {
getPipeManager().getPipePluginCoordinator().lock();
try {
@@ -286,7 +274,6 @@ public class NodeManager {
runtimeConfiguration.setTableInfo(
getClusterSchemaManager().getAllTableInfoForDataNodeActivation());
runtimeConfiguration.setClusterId(getClusterManager().getClusterId());
- runtimeConfiguration.setAuditConfig(getAuditConfig());
return runtimeConfiguration;
} finally {
getUDFManager().getUdfInfo().releaseUDFTableLock();
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/IoTDBConfigRegionSource.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/IoTDBConfigRegionSource.java
index af6a024eeb5..fc965624c1d 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/IoTDBConfigRegionSource.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/IoTDBConfigRegionSource.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.auth.entity.PrivilegeUnion;
import org.apache.iotdb.commons.consensus.ConfigRegionId;
import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
-import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.pipe.agent.task.progress.PipeEventCommitManager;
import org.apache.iotdb.commons.pipe.config.PipeConfig;
import org.apache.iotdb.commons.pipe.datastructure.pattern.IoTDBTreePattern;
@@ -64,25 +63,21 @@ import java.util.Objects;
import java.util.Optional;
import java.util.Set;
-import static org.apache.iotdb.commons.conf.IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD;
-import static org.apache.iotdb.commons.conf.IoTDBConstant.PATH_ROOT;
-
@TreeModel
@TableModel
public class IoTDBConfigRegionSource extends IoTDBNonDataRegionSource {
- public static final PipeConfigTreePatternParseVisitor TREE_PATTERN_PARSE_VISITOR =
- new PipeConfigTreePatternParseVisitor();
- public static final PipeConfigTablePatternParseVisitor TABLE_PATTERN_PARSE_VISITOR =
- new PipeConfigTablePatternParseVisitor();
- public static final PipeConfigTreeScopeParseVisitor TREE_SCOPE_PARSE_VISITOR =
- new PipeConfigTreeScopeParseVisitor();
- public static final PipeConfigTableScopeParseVisitor TABLE_SCOPE_PARSE_VISITOR =
- new PipeConfigTableScopeParseVisitor();
- public static final PipeConfigTablePrivilegeParseVisitor TABLE_PRIVILEGE_PARSE_VISITOR =
- new PipeConfigTablePrivilegeParseVisitor();
- // Local for exception
- private PipeConfigTreePrivilegeParseVisitor treePrivilegeParseVisitor;
+ public static final PipeConfigPhysicalPlanTreePatternParseVisitor TREE_PATTERN_PARSE_VISITOR =
+ new PipeConfigPhysicalPlanTreePatternParseVisitor();
+ public static final PipeConfigPhysicalPlanTablePatternParseVisitor TABLE_PATTERN_PARSE_VISITOR =
+ new PipeConfigPhysicalPlanTablePatternParseVisitor();
+ public static final PipeConfigPhysicalPlanTreeScopeParseVisitor TREE_SCOPE_PARSE_VISITOR =
+ new PipeConfigPhysicalPlanTreeScopeParseVisitor();
+ public static final PipeConfigPhysicalPlanTableScopeParseVisitor TABLE_SCOPE_PARSE_VISITOR =
+ new PipeConfigPhysicalPlanTableScopeParseVisitor();
+ public static final PipeConfigPhysicalPlanTablePrivilegeParseVisitor
+ TABLE_PRIVILEGE_PARSE_VISITOR = new PipeConfigPhysicalPlanTablePrivilegeParseVisitor();
+
private Set<ConfigPhysicalPlanType> listenedTypeSet = new HashSet<>();
private CNPhysicalPlanGenerator parser;
@@ -101,7 +96,6 @@ public class IoTDBConfigRegionSource extends IoTDBNonDataRegionSource {
super.customize(parameters, configuration);
listenedTypeSet = ConfigRegionListeningFilter.parseListeningPlanTypeSet(parameters);
- treePrivilegeParseVisitor = new PipeConfigTreePrivilegeParseVisitor(skipIfNoPrivileges);
PipeConfigRegionSourceMetrics.getInstance().register(this);
PipeConfigNodeRemainingTimeMetrics.getInstance().register(this);
@@ -189,21 +183,6 @@ public class IoTDBConfigRegionSource extends IoTDBNonDataRegionSource {
case SCHEMA:
// Currently do not check tree model mTree
return Objects.nonNull(((PipeConfigRegionSnapshotEvent) event).getTemplateFile())
- && (permissionManager
- .checkUserPrivileges(
- userName,
- new PrivilegeUnion(
- new PartialPath(
- new String[] {PATH_ROOT, MULTI_LEVEL_PATH_WILDCARD}),
- PrivilegeType.READ_SCHEMA))
- .getStatus()
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode()
- || permissionManager
- .checkUserPrivileges(userName, new PrivilegeUnion(PrivilegeType.SYSTEM))
- .getStatus()
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode())
|| Objects.nonNull(userName)
&& permissionManager
.checkUserPrivileges(userName, new PrivilegeUnion(null, false, true))
@@ -244,20 +223,15 @@ public class IoTDBConfigRegionSource extends IoTDBNonDataRegionSource {
final ConfigPhysicalPlan plan =
((PipeConfigRegionWritePlanEvent) event).getConfigPhysicalPlan();
final Boolean isTableDatabasePlan = isTableDatabasePlan(plan);
- if (!Boolean.TRUE.equals(isTableDatabasePlan)) {
- final Optional<ConfigPhysicalPlan> result = treePrivilegeParseVisitor.process(plan, userName);
- if (result.isPresent()) {
- return Optional.of(
- new PipeConfigRegionWritePlanEvent(result.get(), event.isGeneratedByPipe()));
- }
+ if (Boolean.FALSE.equals(isTableDatabasePlan)) {
+ return Optional.of(event);
}
- if (!Boolean.FALSE.equals(isTableDatabasePlan)) {
- final Optional<ConfigPhysicalPlan> result =
- TABLE_PRIVILEGE_PARSE_VISITOR.process(plan, userName);
- if (result.isPresent()) {
- return Optional.of(
- new PipeConfigRegionWritePlanEvent(result.get(), event.isGeneratedByPipe()));
- }
+
+ final Optional<ConfigPhysicalPlan> result =
+ TABLE_PRIVILEGE_PARSE_VISITOR.process(plan, userName);
+ if (result.isPresent()) {
+ return Optional.of(
+ new PipeConfigRegionWritePlanEvent(result.get(), event.isGeneratedByPipe()));
}
if (skipIfNoPrivileges) {
return Optional.empty();
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTablePatternParseVisitor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTablePatternParseVisitor.java
similarity index 99%
rename from iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTablePatternParseVisitor.java
rename to iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTablePatternParseVisitor.java
index 6baf78f60ac..7d121a58422 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTablePatternParseVisitor.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTablePatternParseVisitor.java
@@ -40,7 +40,7 @@ import org.apache.iotdb.confignode.consensus.request.write.table.SetTablePropert
import java.util.Optional;
-public class PipeConfigTablePatternParseVisitor
+public class PipeConfigPhysicalPlanTablePatternParseVisitor
extends ConfigPhysicalPlanVisitor<Optional<ConfigPhysicalPlan>, TablePattern> {
@Override
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTablePrivilegeParseVisitor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTablePrivilegeParseVisitor.java
similarity index 99%
rename from iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTablePrivilegeParseVisitor.java
rename to iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTablePrivilegeParseVisitor.java
index bf0871f0032..40ab6d7a096 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTablePrivilegeParseVisitor.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTablePrivilegeParseVisitor.java
@@ -42,7 +42,7 @@ import org.apache.iotdb.rpc.TSStatusCode;
import java.util.Optional;
-public class PipeConfigTablePrivilegeParseVisitor
+public class PipeConfigPhysicalPlanTablePrivilegeParseVisitor
extends ConfigPhysicalPlanVisitor<Optional<ConfigPhysicalPlan>, String> {
@Override
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTableScopeParseVisitor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTableScopeParseVisitor.java
similarity index 98%
rename from iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTableScopeParseVisitor.java
rename to iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTableScopeParseVisitor.java
index c3f481781c5..e94511fd41e 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTableScopeParseVisitor.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTableScopeParseVisitor.java
@@ -32,7 +32,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
-public class PipeConfigTableScopeParseVisitor
+public class PipeConfigPhysicalPlanTableScopeParseVisitor
extends ConfigPhysicalPlanVisitor<Optional<ConfigPhysicalPlan>, Void> {
@Override
public Optional<ConfigPhysicalPlan> visitPlan(final ConfigPhysicalPlan plan, final Void context) {
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreePatternParseVisitor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTreePatternParseVisitor.java
similarity index 97%
rename from iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreePatternParseVisitor.java
rename to iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTreePatternParseVisitor.java
index 993407c4e2f..992b74ca0e5 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreePatternParseVisitor.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTreePatternParseVisitor.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.pipe.datastructure.pattern.IoTDBTreePattern;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanVisitor;
import org.apache.iotdb.confignode.consensus.request.write.auth.AuthorTreePlan;
@@ -39,6 +38,7 @@ import org.apache.iotdb.confignode.consensus.request.write.template.CreateSchema
import org.apache.iotdb.confignode.consensus.request.write.template.ExtendSchemaTemplatePlan;
import org.apache.iotdb.confignode.manager.pipe.event.PipeConfigRegionWritePlanEvent;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateExtendInfo;
import org.apache.tsfile.utils.Pair;
@@ -57,7 +57,7 @@ import java.util.stream.IntStream;
import java.util.stream.Stream;
/**
- * The {@link PipeConfigTreePatternParseVisitor} will transform the schema {@link
+ * The {@link PipeConfigPhysicalPlanTreePatternParseVisitor} will transform the schema {@link
* ConfigPhysicalPlan}s using {@link IoTDBTreePattern}. Rule:
*
* <p>1. All patterns in the output {@link ConfigPhysicalPlan} will be the intersection of the
@@ -71,10 +71,10 @@ import java.util.stream.Stream;
* <p>4. The output {@link PlanNode} shall be a copied form of the original one because the original
* one is used in the {@link PipeConfigRegionWritePlanEvent} in {@link ConfigRegionListeningQueue}.
*/
-public class PipeConfigTreePatternParseVisitor
+public class PipeConfigPhysicalPlanTreePatternParseVisitor
extends ConfigPhysicalPlanVisitor<Optional<ConfigPhysicalPlan>, IoTDBTreePattern> {
private static final Logger LOGGER =
- LoggerFactory.getLogger(PipeConfigTreePatternParseVisitor.class);
+ LoggerFactory.getLogger(PipeConfigPhysicalPlanTreePatternParseVisitor.class);
@Override
public Optional<ConfigPhysicalPlan> visitPlan(
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreeScopeParseVisitor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTreeScopeParseVisitor.java
similarity index 98%
rename from iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreeScopeParseVisitor.java
rename to iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTreeScopeParseVisitor.java
index d06f914b79e..a1459c0f596 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreeScopeParseVisitor.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTreeScopeParseVisitor.java
@@ -28,7 +28,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
-public class PipeConfigTreeScopeParseVisitor
+public class PipeConfigPhysicalPlanTreeScopeParseVisitor
extends ConfigPhysicalPlanVisitor<Optional<ConfigPhysicalPlan>, Void> {
@Override
public Optional<ConfigPhysicalPlan> visitPlan(final ConfigPhysicalPlan plan, final Void context) {
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreePrivilegeParseVisitor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreePrivilegeParseVisitor.java
deleted file mode 100644
index 0ad944048ca..00000000000
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreePrivilegeParseVisitor.java
+++ /dev/null
@@ -1,385 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.confignode.manager.pipe.source;
-
-import org.apache.iotdb.commons.auth.AuthException;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import org.apache.iotdb.commons.auth.entity.PrivilegeUnion;
-import org.apache.iotdb.commons.exception.IllegalPathException;
-import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
-import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
-import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanVisitor;
-import org.apache.iotdb.confignode.consensus.request.write.auth.AuthorTreePlan;
-import org.apache.iotdb.confignode.consensus.request.write.database.DatabaseSchemaPlan;
-import org.apache.iotdb.confignode.consensus.request.write.database.DeleteDatabasePlan;
-import org.apache.iotdb.confignode.consensus.request.write.database.SetTTLPlan;
-import org.apache.iotdb.confignode.consensus.request.write.pipe.payload.PipeDeactivateTemplatePlan;
-import org.apache.iotdb.confignode.consensus.request.write.pipe.payload.PipeDeleteLogicalViewPlan;
-import org.apache.iotdb.confignode.consensus.request.write.pipe.payload.PipeDeleteTimeSeriesPlan;
-import org.apache.iotdb.confignode.consensus.request.write.pipe.payload.PipeUnsetSchemaTemplatePlan;
-import org.apache.iotdb.confignode.consensus.request.write.template.CommitSetSchemaTemplatePlan;
-import org.apache.iotdb.confignode.consensus.request.write.template.CreateSchemaTemplatePlan;
-import org.apache.iotdb.confignode.consensus.request.write.template.ExtendSchemaTemplatePlan;
-import org.apache.iotdb.confignode.service.ConfigNode;
-import org.apache.iotdb.rpc.TSStatusCode;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-import static org.apache.iotdb.commons.conf.IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD;
-import static org.apache.iotdb.commons.schema.SchemaConstant.ALL_MATCH_SCOPE;
-
-public class PipeConfigTreePrivilegeParseVisitor
- extends ConfigPhysicalPlanVisitor<Optional<ConfigPhysicalPlan>, String> {
- private static final Logger LOGGER =
- LoggerFactory.getLogger(PipeConfigTreePrivilegeParseVisitor.class);
- private final boolean skip;
-
- PipeConfigTreePrivilegeParseVisitor(final boolean skip) {
- this.skip = skip;
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitPlan(
- final ConfigPhysicalPlan plan, final String context) {
- return Optional.of(plan);
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitCreateDatabase(
- final DatabaseSchemaPlan createDatabasePlan, final String userName) {
- return canReadSysSchema(createDatabasePlan.getSchema().getName(), userName, true)
- ? Optional.of(createDatabasePlan)
- : Optional.empty();
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitAlterDatabase(
- final DatabaseSchemaPlan alterDatabasePlan, final String userName) {
- return canReadSysSchema(alterDatabasePlan.getSchema().getName(), userName, true)
- ? Optional.of(alterDatabasePlan)
- : Optional.empty();
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitDeleteDatabase(
- final DeleteDatabasePlan deleteDatabasePlan, final String userName) {
- return canReadSysSchema(deleteDatabasePlan.getName(), userName, true)
- ? Optional.of(deleteDatabasePlan)
- : Optional.empty();
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitCreateSchemaTemplate(
- final CreateSchemaTemplatePlan createSchemaTemplatePlan, final String userName) {
- return canShowSchemaTemplate(createSchemaTemplatePlan.getTemplate().getName(), userName)
- ? Optional.of(createSchemaTemplatePlan)
- : Optional.empty();
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitCommitSetSchemaTemplate(
- final CommitSetSchemaTemplatePlan commitSetSchemaTemplatePlan, final String userName) {
- return canReadSysSchema(commitSetSchemaTemplatePlan.getPath(), userName, false)
- ? Optional.of(commitSetSchemaTemplatePlan)
- : Optional.empty();
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitPipeUnsetSchemaTemplate(
- final PipeUnsetSchemaTemplatePlan pipeUnsetSchemaTemplatePlan, final String userName) {
- return canReadSysSchema(pipeUnsetSchemaTemplatePlan.getPath(), userName, false)
- ? Optional.of(pipeUnsetSchemaTemplatePlan)
- : Optional.empty();
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitExtendSchemaTemplate(
- final ExtendSchemaTemplatePlan extendSchemaTemplatePlan, final String userName) {
- return canShowSchemaTemplate(
- extendSchemaTemplatePlan.getTemplateExtendInfo().getTemplateName(), userName)
- ? Optional.of(extendSchemaTemplatePlan)
- : Optional.empty();
- }
-
- public boolean canShowSchemaTemplate(final String templateName, final String userName) {
- try {
- return ConfigNode.getInstance()
- .getConfigManager()
- .getPermissionManager()
- .checkUserPrivileges(userName, new PrivilegeUnion(PrivilegeType.SYSTEM))
- .getStatus()
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode()
- || ConfigNode.getInstance()
- .getConfigManager()
- .getClusterSchemaManager()
- .getPathsSetTemplate(templateName, ALL_MATCH_SCOPE)
- .getPathList()
- .stream()
- .anyMatch(
- path -> {
- try {
- return ConfigNode.getInstance()
- .getConfigManager()
- .getPermissionManager()
- .checkUserPrivileges(
- userName,
- new PrivilegeUnion(
- new PartialPath(path).concatNode(MULTI_LEVEL_PATH_WILDCARD),
- PrivilegeType.READ_SCHEMA))
- .getStatus()
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode();
- } catch (final IllegalPathException e) {
- throw new RuntimeException(e);
- }
- });
- } catch (final Exception e) {
- LOGGER.warn(
- "Un-parse-able path name encountered during template privilege trimming, please check",
- e);
- return false;
- }
- }
-
- public boolean canReadSysSchema(
- final String path, final String userName, final boolean canSkipMulti) {
- try {
- return canSkipMulti
- && ConfigNode.getInstance()
- .getConfigManager()
- .getPermissionManager()
- .checkUserPrivileges(
- userName,
- new PrivilegeUnion(new PartialPath(path), PrivilegeType.READ_SCHEMA))
- .getStatus()
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode()
- || ConfigNode.getInstance()
- .getConfigManager()
- .getPermissionManager()
- .checkUserPrivileges(
- userName,
- new PrivilegeUnion(
- new PartialPath(path).concatNode(MULTI_LEVEL_PATH_WILDCARD),
- PrivilegeType.READ_SCHEMA))
- .getStatus()
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode()
- || ConfigNode.getInstance()
- .getConfigManager()
- .getPermissionManager()
- .checkUserPrivileges(userName, new PrivilegeUnion(PrivilegeType.SYSTEM))
- .getStatus()
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode();
- } catch (final IllegalPathException e) {
- LOGGER.warn("Un-parse-able path name encountered during privilege trimming, please check", e);
- return false;
- }
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitGrantUser(
- final AuthorTreePlan grantUserPlan, final String userName) {
- return visitUserPlan(grantUserPlan, userName);
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitRevokeUser(
- final AuthorTreePlan revokeUserPlan, final String userName) {
- return visitUserPlan(revokeUserPlan, userName);
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitGrantRole(
- final AuthorTreePlan revokeUserPlan, final String userName) {
- return visitRolePlan(revokeUserPlan, userName);
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitRevokeRole(
- final AuthorTreePlan revokeUserPlan, final String userName) {
- return visitRolePlan(revokeUserPlan, userName);
- }
-
- private Optional<ConfigPhysicalPlan> visitUserPlan(
- final AuthorTreePlan plan, final String userName) {
- return ConfigNode.getInstance()
- .getConfigManager()
- .getPermissionManager()
- .checkUserPrivileges(userName, new PrivilegeUnion(PrivilegeType.MANAGE_USER))
- .getStatus()
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode()
- ? Optional.of(plan)
- : Optional.empty();
- }
-
- private Optional<ConfigPhysicalPlan> visitRolePlan(
- final AuthorTreePlan plan, final String userName) {
- return ConfigNode.getInstance()
- .getConfigManager()
- .getPermissionManager()
- .checkUserPrivileges(userName, new PrivilegeUnion(PrivilegeType.MANAGE_ROLE))
- .getStatus()
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode()
- ? Optional.of(plan)
- : Optional.empty();
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitPipeDeleteTimeSeries(
- final PipeDeleteTimeSeriesPlan pipeDeleteTimeSeriesPlan, final String userName) {
- try {
- final PathPatternTree originalTree =
- PathPatternTree.deserialize(pipeDeleteTimeSeriesPlan.getPatternTreeBytes());
- final PathPatternTree intersectedTree =
- originalTree.intersectWithFullPathPrefixTree(getAuthorizedPTree(userName));
- if (!skip && !originalTree.equals(intersectedTree)) {
- throw new AccessDeniedException(
- "Not has privilege to transfer plan: " + pipeDeleteTimeSeriesPlan);
- }
- return !intersectedTree.isEmpty()
- ? Optional.of(new PipeDeleteTimeSeriesPlan(intersectedTree.serialize()))
- : Optional.empty();
- } catch (final IOException e) {
- LOGGER.warn(
- "Serialization failed for the delete time series plan in pipe transmission, skip transfer",
- e);
- return Optional.empty();
- } catch (final AuthException e) {
- if (skip) {
- return Optional.empty();
- } else {
- throw new AccessDeniedException(
- "Not has privilege to transfer plan: " + pipeDeleteTimeSeriesPlan);
- }
- }
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitPipeDeleteLogicalView(
- final PipeDeleteLogicalViewPlan pipeDeleteLogicalViewPlan, final String userName) {
- try {
- final PathPatternTree originalTree =
- PathPatternTree.deserialize(pipeDeleteLogicalViewPlan.getPatternTreeBytes());
- final PathPatternTree intersectedTree =
- originalTree.intersectWithFullPathPrefixTree(getAuthorizedPTree(userName));
- if (!skip && !originalTree.equals(intersectedTree)) {
- throw new AccessDeniedException(
- "Not has privilege to transfer plan: " + pipeDeleteLogicalViewPlan);
- }
- return !intersectedTree.isEmpty()
- ? Optional.of(new PipeDeleteLogicalViewPlan(intersectedTree.serialize()))
- : Optional.empty();
- } catch (final IOException e) {
- LOGGER.warn(
- "Serialization failed for the delete time series plan in pipe transmission, skip transfer",
- e);
- return Optional.empty();
- } catch (final AuthException e) {
- if (skip) {
- return Optional.empty();
- } else {
- throw new AccessDeniedException(
- "Not has privilege to transfer plan: " + pipeDeleteLogicalViewPlan);
- }
- }
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitPipeDeactivateTemplate(
- final PipeDeactivateTemplatePlan pipeDeactivateTemplatePlan, final String userName) {
- try {
- final Map<PartialPath, List<Template>> newTemplateSetInfo = new HashMap<>();
- for (final Map.Entry<PartialPath, List<Template>> templateEntry :
- pipeDeactivateTemplatePlan.getTemplateSetInfo().entrySet()) {
- for (final PartialPath intersectedPath :
- getAllIntersectedPatterns(
- templateEntry.getKey(), userName, pipeDeactivateTemplatePlan)) {
- newTemplateSetInfo.put(intersectedPath, templateEntry.getValue());
- }
- }
- return !newTemplateSetInfo.isEmpty()
- ? Optional.of(new PipeDeactivateTemplatePlan(newTemplateSetInfo))
- : Optional.empty();
- } catch (final AuthException e) {
- if (skip) {
- return Optional.empty();
- } else {
- throw new AccessDeniedException(
- "Not has privilege to transfer plan: " + pipeDeactivateTemplatePlan);
- }
- }
- }
-
- @Override
- public Optional<ConfigPhysicalPlan> visitTTL(final SetTTLPlan setTTLPlan, final String userName) {
- try {
- final List<PartialPath> paths =
- getAllIntersectedPatterns(
- new PartialPath(setTTLPlan.getPathPattern()), userName, setTTLPlan);
- // The intersectionList is either a singleton list or an empty list, because the pipe
- // pattern and TTL path are each either a prefix path or a full path
- return !paths.isEmpty()
- ? Optional.of(new SetTTLPlan(paths.get(0).getNodes(), setTTLPlan.getTTL()))
- : Optional.empty();
- } catch (final AuthException e) {
- if (skip) {
- return Optional.empty();
- } else {
- throw new AccessDeniedException("Not has privilege to transfer plan: " + setTTLPlan);
- }
- }
- }
-
- private List<PartialPath> getAllIntersectedPatterns(
- final PartialPath partialPath, final String userName, final ConfigPhysicalPlan plan)
- throws AuthException {
- final PathPatternTree thisPatternTree = new PathPatternTree();
- thisPatternTree.appendPathPattern(partialPath);
- thisPatternTree.constructTree();
- final PathPatternTree intersectedTree =
- thisPatternTree.intersectWithFullPathPrefixTree(getAuthorizedPTree(userName));
- if (!skip && !thisPatternTree.equals(intersectedTree)) {
- throw new AccessDeniedException("Not has privilege to transfer plan: " + plan);
- }
- return intersectedTree.getAllPathPatterns();
- }
-
- private PathPatternTree getAuthorizedPTree(final String userName) throws AuthException {
- return ConfigNode.getInstance()
- .getConfigManager()
- .getPermissionManager()
- .fetchRawAuthorizedPTree(userName, PrivilegeType.READ_SCHEMA);
- }
-}
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
index a0986782c5b..bfe6e830cba 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
@@ -33,7 +33,6 @@ import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.TsTableInternalRPCUtil;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.service.metric.MetricService;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.commons.utils.StatusUtils;
@@ -101,6 +100,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TShowDatabaseResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowTable4InformationSchemaResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowTableResp;
import org.apache.iotdb.consensus.exception.ConsensusException;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUpdateType;
import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUtil;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateExtendInfo;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/AuthorInfo.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/AuthorInfo.java
index ea66deadfb8..ecc04271481 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/AuthorInfo.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/AuthorInfo.java
@@ -24,11 +24,9 @@ import org.apache.iotdb.commons.auth.AuthException;
import org.apache.iotdb.commons.auth.authorizer.BasicAuthorizer;
import org.apache.iotdb.commons.auth.authorizer.IAuthorizer;
import org.apache.iotdb.commons.auth.entity.ModelType;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.auth.entity.PrivilegeUnion;
import org.apache.iotdb.commons.conf.CommonConfig;
import org.apache.iotdb.commons.conf.CommonDescriptor;
-import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.snapshot.SnapshotProcessor;
import org.apache.iotdb.commons.utils.FileUtils;
import org.apache.iotdb.commons.utils.TestOnly;
@@ -118,11 +116,6 @@ public class AuthorInfo implements SnapshotProcessor {
return authorPlanExecutor.generateAuthorizedPTree(username, permission);
}
- public PathPatternTree generateRawAuthorizedPTree(final String username, final PrivilegeType type)
- throws AuthException {
- return authorPlanExecutor.generateRawAuthorizedPTree(username, type);
- }
-
public TPermissionInfoResp checkRoleOfUser(String username, String roleName)
throws AuthException {
return authorPlanExecutor.checkRoleOfUser(username, roleName);
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/AuthorPlanExecutor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/AuthorPlanExecutor.java
index fec445e7bc1..69bb5779abc 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/AuthorPlanExecutor.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/AuthorPlanExecutor.java
@@ -673,33 +673,6 @@ public class AuthorPlanExecutor implements IAuthorPlanExecutor {
return resp;
}
- public PathPatternTree generateRawAuthorizedPTree(final String username, final PrivilegeType type)
- throws AuthException {
- final User user = authorizer.getUser(username);
- final PathPatternTree pPtree = new PathPatternTree();
- if (user == null) {
- return null;
- }
-
- constructAuthorityScope(pPtree, user, type);
-
- for (final String roleName : user.getRoleSet()) {
- Role role = authorizer.getRole(roleName);
- if (role != null) {
- constructAuthorityScope(pPtree, role, type);
- }
- }
- pPtree.constructTree();
- final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- final DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream);
- try {
- pPtree.serialize(dataOutputStream);
- } catch (final IOException e) {
- return null;
- }
- return pPtree;
- }
-
@Override
public TPermissionInfoResp checkRoleOfUser(String username, String roleName)
throws AuthException {
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/IAuthorPlanExecutor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/IAuthorPlanExecutor.java
index 24f0d8ceb0a..9f93dba165b 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/IAuthorPlanExecutor.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/auth/IAuthorPlanExecutor.java
@@ -22,9 +22,7 @@ package org.apache.iotdb.confignode.persistence.auth;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.auth.AuthException;
import org.apache.iotdb.commons.auth.entity.ModelType;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.auth.entity.PrivilegeUnion;
-import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.confignode.consensus.request.write.auth.AuthorPlan;
import org.apache.iotdb.confignode.consensus.request.write.auth.AuthorRelationalPlan;
import org.apache.iotdb.confignode.consensus.request.write.auth.AuthorTreePlan;
@@ -56,9 +54,6 @@ public interface IAuthorPlanExecutor {
TAuthizedPatternTreeResp generateAuthorizedPTree(String username, int permission)
throws AuthException;
- public PathPatternTree generateRawAuthorizedPTree(final String username, final PrivilegeType type)
- throws AuthException;
-
TPermissionInfoResp checkRoleOfUser(String username, String roleName) throws AuthException;
TPermissionInfoResp getUser(String username) throws AuthException;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/CNPhysicalPlanGenerator.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/CNPhysicalPlanGenerator.java
index 3a175de7e31..87b7f685096 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/CNPhysicalPlanGenerator.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/CNPhysicalPlanGenerator.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
import org.apache.iotdb.commons.schema.table.TsTable;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.utils.AuthUtils;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.commons.utils.ThriftConfigNodeSerDeUtils;
@@ -42,6 +41,7 @@ import org.apache.iotdb.confignode.consensus.request.write.template.CreateSchema
import org.apache.iotdb.confignode.persistence.schema.mnode.IConfigMNode;
import org.apache.iotdb.confignode.persistence.schema.mnode.factory.ConfigMNodeFactory;
import org.apache.iotdb.confignode.persistence.schema.mnode.impl.ConfigTableNode;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.commons.io.IOUtils;
import org.apache.tsfile.utils.Pair;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
index 62fe57fb0b7..1fc4b04c2b6 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
@@ -33,7 +33,6 @@ import org.apache.iotdb.commons.schema.table.TableType;
import org.apache.iotdb.commons.schema.table.TreeViewSchema;
import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.TsTableInternalRPCUtil;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.snapshot.SnapshotProcessor;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.commons.utils.StatusUtils;
@@ -97,6 +96,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TTableInfo;
import org.apache.iotdb.db.exception.metadata.DatabaseNotSetException;
import org.apache.iotdb.db.exception.metadata.SchemaQuotaExceededException;
import org.apache.iotdb.db.exception.sql.SemanticException;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUtil;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateExtendInfo;
import org.apache.iotdb.rpc.RpcUtils;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTreeStore.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTreeStore.java
index 529c2aed519..3a7786ffa9b 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTreeStore.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTreeStore.java
@@ -26,13 +26,13 @@ import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.persistence.schema.mnode.IConfigMNode;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.IMTreeStore;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.iterator.AbstractTraverserIterator;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.iterator.MNodeIterator;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.iterator.MemoryTraverserIterator;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.memory.ReleaseFlushMonitor;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.io.File;
import java.util.Map;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java
index 36682158808..734c858e8fe 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java
@@ -20,9 +20,9 @@
package org.apache.iotdb.confignode.persistence.schema;
import org.apache.iotdb.commons.exception.MetadataException;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.exception.metadata.template.UndefinedTemplateException;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateExtendInfo;
import org.apache.commons.io.IOUtils;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java
index bd3e623ec9d..1df9da1509d 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java
@@ -28,7 +28,6 @@ import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathDeserializeUtil;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.client.async.CnToDnAsyncRequestType;
import org.apache.iotdb.confignode.client.async.CnToDnInternalServiceAsyncRequestManager;
import org.apache.iotdb.confignode.client.async.handlers.DataNodeAsyncRequestContext;
@@ -40,6 +39,7 @@ import org.apache.iotdb.confignode.procedure.impl.StateMachineProcedure;
import org.apache.iotdb.confignode.procedure.state.schema.DeactivateTemplateState;
import org.apache.iotdb.confignode.procedure.store.ProcedureType;
import org.apache.iotdb.consensus.exception.ConsensusException;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.mpp.rpc.thrift.TConstructSchemaBlackListWithTemplateReq;
import org.apache.iotdb.mpp.rpc.thrift.TDeactivateTemplateReq;
import org.apache.iotdb.mpp.rpc.thrift.TDeleteDataForDeleteSchemaReq;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java
index e2ab08e9366..caa257faab8 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java
@@ -29,7 +29,6 @@ import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.TsTableInternalRPCType;
import org.apache.iotdb.commons.schema.table.TsTableInternalRPCUtil;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.client.async.CnToDnAsyncRequestType;
import org.apache.iotdb.confignode.client.async.CnToDnInternalServiceAsyncRequestManager;
import org.apache.iotdb.confignode.client.async.handlers.DataNodeAsyncRequestContext;
@@ -38,6 +37,7 @@ import org.apache.iotdb.confignode.manager.ConfigManager;
import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
import org.apache.iotdb.consensus.exception.ConsensusException;
import org.apache.iotdb.db.exception.metadata.PathNotExistException;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.mpp.rpc.thrift.TCheckSchemaRegionUsingTemplateReq;
import org.apache.iotdb.mpp.rpc.thrift.TCheckSchemaRegionUsingTemplateResp;
import org.apache.iotdb.mpp.rpc.thrift.TCountPathsUsingTemplateReq;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
index 5509037c6fa..a5463439f66 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
@@ -28,7 +28,6 @@ import org.apache.iotdb.commons.exception.IoTDBException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.client.async.CnToDnAsyncRequestType;
import org.apache.iotdb.confignode.client.async.CnToDnInternalServiceAsyncRequestManager;
import org.apache.iotdb.confignode.client.async.handlers.DataNodeAsyncRequestContext;
@@ -46,6 +45,7 @@ import org.apache.iotdb.confignode.procedure.store.ProcedureType;
import org.apache.iotdb.consensus.exception.ConsensusException;
import org.apache.iotdb.db.exception.metadata.template.TemplateIncompatibleException;
import org.apache.iotdb.db.exception.metadata.template.UndefinedTemplateException;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUpdateType;
import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUtil;
import org.apache.iotdb.mpp.rpc.thrift.TCheckTimeSeriesExistenceReq;
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
index 793e6fa6b18..464c6b7c21b 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathDeserializeUtil;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.client.async.CnToDnAsyncRequestType;
import org.apache.iotdb.confignode.client.async.CnToDnInternalServiceAsyncRequestManager;
import org.apache.iotdb.confignode.client.async.handlers.DataNodeAsyncRequestContext;
@@ -36,6 +35,7 @@ import org.apache.iotdb.confignode.procedure.impl.StateMachineProcedure;
import org.apache.iotdb.confignode.procedure.state.schema.UnsetTemplateState;
import org.apache.iotdb.confignode.procedure.store.ProcedureType;
import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUpdateType;
import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUtil;
import org.apache.iotdb.mpp.rpc.thrift.TUpdateTemplateReq;
diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
index 091d64af89a..6925fef09dc 100644
--- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
+++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
@@ -53,7 +53,6 @@ import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.column.AttributeColumnSchema;
import org.apache.iotdb.commons.schema.table.column.FieldColumnSchema;
import org.apache.iotdb.commons.schema.table.column.TagColumnSchema;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.subscription.meta.consumer.ConsumerGroupMeta;
import org.apache.iotdb.commons.subscription.meta.consumer.ConsumerMeta;
import org.apache.iotdb.commons.subscription.meta.topic.TopicMeta;
@@ -174,6 +173,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TCreateCQReq;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
import org.apache.iotdb.confignode.rpc.thrift.TPipeSinkInfo;
import org.apache.iotdb.confignode.rpc.thrift.TTriggerState;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateExtendInfo;
import org.apache.iotdb.trigger.api.enums.FailureStrategy;
import org.apache.iotdb.trigger.api.enums.TriggerEvent;
diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigScopeParseVisitorTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanScopeParseVisitorTest.java
similarity index 98%
rename from iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigScopeParseVisitorTest.java
rename to iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanScopeParseVisitorTest.java
index 67887d58a07..1a0ca3541ea 100644
--- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigScopeParseVisitorTest.java
+++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanScopeParseVisitorTest.java
@@ -33,7 +33,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.stream.Collectors;
-public class PipeConfigScopeParseVisitorTest {
+public class PipeConfigPhysicalPlanScopeParseVisitorTest {
@Test
public void testTreeScopeParsing() {
testTreeScopeParsing(ConfigPhysicalPlanType.GrantRole, false);
diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTablePatternParseVisitorTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTablePatternParseVisitorTest.java
similarity index 99%
rename from iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTablePatternParseVisitorTest.java
rename to iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTablePatternParseVisitorTest.java
index fea613bc47b..10bc2901272 100644
--- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTablePatternParseVisitorTest.java
+++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTablePatternParseVisitorTest.java
@@ -52,7 +52,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
-public class PipeConfigTablePatternParseVisitorTest {
+public class PipeConfigPhysicalPlanTablePatternParseVisitorTest {
private final TablePattern tablePattern = new TablePattern(true, "^db[0-9]", "a.*b");
@Test
diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreePatternParseVisitorTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTreePatternParseVisitorTest.java
similarity index 99%
rename from iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreePatternParseVisitorTest.java
rename to iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTreePatternParseVisitorTest.java
index aed87f72177..6893cfa5523 100644
--- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigTreePatternParseVisitorTest.java
+++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/source/PipeConfigPhysicalPlanTreePatternParseVisitorTest.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.pipe.datastructure.pattern.IoTDBTreePattern;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
import org.apache.iotdb.confignode.consensus.request.write.auth.AuthorTreePlan;
import org.apache.iotdb.confignode.consensus.request.write.database.DatabaseSchemaPlan;
@@ -37,6 +36,7 @@ import org.apache.iotdb.confignode.consensus.request.write.template.CommitSetSch
import org.apache.iotdb.confignode.consensus.request.write.template.CreateSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.ExtendSchemaTemplatePlan;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateExtendInfo;
import org.apache.tsfile.enums.TSDataType;
@@ -52,7 +52,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-public class PipeConfigTreePatternParseVisitorTest {
+public class PipeConfigPhysicalPlanTreePatternParseVisitorTest {
private final IoTDBTreePattern prefixPathPattern = new IoTDBTreePattern("root.db.device.**");
private final IoTDBTreePattern fullPathPattern = new IoTDBTreePattern("root.db.device.s1");
diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/CNPhysicalPlanGeneratorTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/CNPhysicalPlanGeneratorTest.java
index b1b5f569f42..b9d453d317c 100644
--- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/CNPhysicalPlanGeneratorTest.java
+++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/CNPhysicalPlanGeneratorTest.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.file.SystemFileFactory;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.utils.AuthUtils;
import org.apache.iotdb.commons.utils.FileUtils;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
@@ -40,6 +39,7 @@ import org.apache.iotdb.confignode.persistence.schema.CNPhysicalPlanGenerator;
import org.apache.iotdb.confignode.persistence.schema.CNSnapshotFileType;
import org.apache.iotdb.confignode.persistence.schema.ClusterSchemaInfo;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.tsfile.enums.TSDataType;
diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfoTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfoTest.java
index 12e80adb542..a921e39eabe 100644
--- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfoTest.java
+++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfoTest.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.confignode.persistence.schema;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
import org.apache.iotdb.confignode.consensus.request.read.database.GetDatabasePlan;
@@ -35,6 +34,7 @@ import org.apache.iotdb.confignode.consensus.response.template.AllTemplateSetInf
import org.apache.iotdb.confignode.consensus.response.template.TemplateInfoResp;
import org.apache.iotdb.confignode.consensus.response.template.TemplateSetInfoResp;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUtil;
import org.apache.commons.io.FileUtils;
diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/TemplateTableTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/TemplateTableTest.java
index 37a4c1321aa..c4b8aab849a 100644
--- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/TemplateTableTest.java
+++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/TemplateTableTest.java
@@ -21,7 +21,7 @@ package org.apache.iotdb.confignode.persistence.schema;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.MetadataException;
-import org.apache.iotdb.commons.schema.template.Template;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.commons.io.FileUtils;
import org.apache.tsfile.enums.TSDataType;
diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/pipe/receiver/PipeEnrichedProcedureTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/pipe/receiver/PipeEnrichedProcedureTest.java
index f4a8f519f17..53d025d6b2f 100644
--- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/pipe/receiver/PipeEnrichedProcedureTest.java
+++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/pipe/receiver/PipeEnrichedProcedureTest.java
@@ -27,7 +27,6 @@ import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.column.AttributeColumnSchema;
import org.apache.iotdb.commons.schema.table.column.FieldColumnSchema;
import org.apache.iotdb.commons.schema.table.column.TagColumnSchema;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
import org.apache.iotdb.commons.schema.view.viewExpression.leaf.ConstantViewOperand;
import org.apache.iotdb.commons.trigger.TriggerInformation;
@@ -64,6 +63,7 @@ import org.apache.iotdb.confignode.procedure.store.ProcedureFactory;
import org.apache.iotdb.confignode.procedure.store.ProcedureType;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
import org.apache.iotdb.confignode.rpc.thrift.TTriggerState;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.trigger.api.enums.FailureStrategy;
import org.apache.iotdb.trigger.api.enums.TriggerEvent;
diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedureTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedureTest.java
index a872b3a63d1..87efb7a9374 100644
--- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedureTest.java
+++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedureTest.java
@@ -21,8 +21,8 @@ package org.apache.iotdb.confignode.procedure.impl.schema;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.procedure.store.ProcedureType;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.enums.CompressionType;
diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedureTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedureTest.java
index be9900ee90c..b288418e1b5 100644
--- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedureTest.java
+++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedureTest.java
@@ -21,8 +21,8 @@ package org.apache.iotdb.confignode.procedure.impl.schema;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.confignode.procedure.store.ProcedureType;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.enums.CompressionType;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/IShowTimeSeriesPlan.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/AuditLogStorage.java
similarity index 68%
copy from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/IShowTimeSeriesPlan.java
copy to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/AuditLogStorage.java
index e05ee54f253..922839bb8ed 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/IShowTimeSeriesPlan.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/AuditLogStorage.java
@@ -15,21 +15,16 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
-package org.apache.iotdb.db.schemaengine.schemaregion.read.req;
-
-import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.commons.schema.template.Template;
-
-import java.util.Map;
-
-public interface IShowTimeSeriesPlan extends IShowSchemaPlan {
-
- boolean needViewDetail();
+package org.apache.iotdb.db.audit;
- SchemaFilter getSchemaFilter();
+public enum AuditLogStorage {
+ IOTDB,
+ LOGGER;
- Map<Integer, Template> getRelatedTemplate();
+ @Override
+ public String toString() {
+ return name();
+ }
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/AuditLogger.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/AuditLogger.java
new file mode 100644
index 00000000000..9d4eb188bfa
--- /dev/null
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/AuditLogger.java
@@ -0,0 +1,278 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.audit;
+
+import org.apache.iotdb.commons.audit.AuditLogOperation;
+import org.apache.iotdb.commons.audit.UserEntity;
+import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.commons.exception.IllegalPathException;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
+import org.apache.iotdb.db.auth.AuthorityChecker;
+import org.apache.iotdb.db.conf.IoTDBConfig;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.protocol.session.ClientSession;
+import org.apache.iotdb.db.protocol.session.IClientSession;
+import org.apache.iotdb.db.protocol.session.SessionManager;
+import org.apache.iotdb.db.queryengine.common.SessionInfo;
+import org.apache.iotdb.db.queryengine.plan.Coordinator;
+import org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher;
+import org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.DataNodeDevicePathCache;
+import org.apache.iotdb.db.queryengine.plan.statement.Statement;
+import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
+import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
+import org.apache.iotdb.rpc.IoTDBConnectionException;
+
+import org.apache.tsfile.common.conf.TSFileConfig;
+import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.utils.Binary;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.validation.constraints.NotNull;
+
+import java.time.ZoneId;
+import java.util.List;
+
+import static org.apache.iotdb.db.pipe.receiver.protocol.legacy.loader.ILoader.SCHEMA_FETCHER;
+
+public class AuditLogger {
+ private static final Logger logger = LoggerFactory.getLogger(AuditLogger.class);
+ private static final Logger AUDIT_LOGGER =
+ LoggerFactory.getLogger(IoTDBConstant.AUDIT_LOGGER_NAME);
+
+ private static final String LOG = "log";
+ private static final String USERNAME = "username";
+ private static final String ADDRESS = "address";
+ private static final String AUDIT_LOG_DEVICE = "root.__system.audit._%s";
+ private static final Coordinator COORDINATOR = Coordinator.getInstance();
+ private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
+ private static final List<AuditLogStorage> auditLogStorageList = config.getAuditLogStorage();
+ private static final SessionInfo sessionInfo =
+ new SessionInfo(
+ 0,
+ new UserEntity(
+ AuthorityChecker.SUPER_USER_ID,
+ AuthorityChecker.SUPER_USER,
+ IoTDBDescriptor.getInstance().getConfig().getInternalAddress()),
+ ZoneId.systemDefault());
+
+ private static final List<AuditLogOperation> auditLogOperationList =
+ config.getAuditableOperationType();
+
+ private static final SessionManager SESSION_MANAGER = SessionManager.getInstance();
+
+ private static final DataNodeDevicePathCache DEVICE_PATH_CACHE =
+ DataNodeDevicePathCache.getInstance();
+
+ private AuditLogger() {
+ // Empty constructor
+ }
+
+ @NotNull
+ private static InsertRowStatement generateInsertStatement(
+ String log, String address, String username)
+ throws IoTDBConnectionException, IllegalPathException, QueryProcessException {
+ InsertRowStatement insertStatement = new InsertRowStatement();
+ insertStatement.setDevicePath(
+ DEVICE_PATH_CACHE.getPartialPath(String.format(AUDIT_LOG_DEVICE, username)));
+ insertStatement.setTime(CommonDateTimeUtils.currentTime());
+ insertStatement.setMeasurements(new String[] {LOG, USERNAME, ADDRESS});
+ insertStatement.setAligned(false);
+ insertStatement.setValues(
+ new Object[] {
+ new Binary(log == null ? "null" : log, TSFileConfig.STRING_CHARSET),
+ new Binary(username == null ? "null" : username, TSFileConfig.STRING_CHARSET),
+ new Binary(address == null ? "null" : address, TSFileConfig.STRING_CHARSET)
+ });
+ insertStatement.setDataTypes(
+ new TSDataType[] {TSDataType.TEXT, TSDataType.TEXT, TSDataType.TEXT});
+ return insertStatement;
+ }
+
+ public static void log(String log, Statement statement) {
+ AuditLogOperation operation = judgeLogOperation(statement.getType());
+ IClientSession currSession = SessionManager.getInstance().getCurrSession();
+ String username = "";
+ String address = "";
+ if (currSession != null) {
+ ClientSession clientSession = (ClientSession) currSession;
+ String clientAddress = clientSession.getClientAddress();
+ int clientPort = ((ClientSession) currSession).getClientPort();
+ address = String.format("%s:%s", clientAddress, clientPort);
+ username = currSession.getUsername();
+ }
+
+ if (auditLogOperationList.contains(operation)) {
+ if (auditLogStorageList.contains(AuditLogStorage.IOTDB)) {
+ try {
+ COORDINATOR.executeForTreeModel(
+ generateInsertStatement(log, address, username),
+ SESSION_MANAGER.requestQueryId(),
+ sessionInfo,
+ "",
+ ClusterPartitionFetcher.getInstance(),
+ SCHEMA_FETCHER);
+ } catch (IllegalPathException | IoTDBConnectionException | QueryProcessException e) {
+ logger.error("write audit log series error,", e);
+ }
+ }
+ if (auditLogStorageList.contains(AuditLogStorage.LOGGER)) {
+ AUDIT_LOGGER.info("user:{},address:{},log:{}", username, address, log);
+ }
+ }
+ }
+
+ public static void log(String log, Statement statement, boolean isNativeApi) {
+ if (isNativeApi) {
+ if (config.isEnableAuditLogForNativeInsertApi()) {
+ log(log, statement);
+ }
+ } else {
+ log(log, statement);
+ }
+ }
+
+ private static AuditLogOperation judgeLogOperation(StatementType type) {
+ switch (type) {
+ case AUTHOR:
+ case CREATE_USER:
+ case DELETE_USER:
+ case MODIFY_PASSWORD:
+ case GRANT_USER_PRIVILEGE:
+ case REVOKE_USER_PRIVILEGE:
+ case GRANT_USER_ROLE:
+ case REVOKE_USER_ROLE:
+ case CREATE_ROLE:
+ case DELETE_ROLE:
+ case GRANT_ROLE_PRIVILEGE:
+ case REVOKE_ROLE_PRIVILEGE:
+ case GRANT_WATERMARK_EMBEDDING:
+ case REVOKE_WATERMARK_EMBEDDING:
+ case STORAGE_GROUP_SCHEMA:
+ case DELETE_STORAGE_GROUP:
+ case CREATE_TIME_SERIES:
+ case CREATE_ALIGNED_TIME_SERIES:
+ case CREATE_MULTI_TIME_SERIES:
+ case DELETE_TIME_SERIES:
+ case ALTER_TIME_SERIES:
+ case CHANGE_ALIAS:
+ case CHANGE_TAG_OFFSET:
+ case CREATE_FUNCTION:
+ case DROP_FUNCTION:
+ case CREATE_INDEX:
+ case DROP_INDEX:
+ case QUERY_INDEX:
+ case CREATE_TRIGGER:
+ case DROP_TRIGGER:
+ case CREATE_TEMPLATE:
+ case SET_TEMPLATE:
+ case MERGE:
+ case FULL_MERGE:
+ case MNODE:
+ case MEASUREMENT_MNODE:
+ case STORAGE_GROUP_MNODE:
+ case AUTO_CREATE_DEVICE_MNODE:
+ case TTL:
+ case FLUSH:
+ case CLEAR_CACHE:
+ case DELETE_PARTITION:
+ case LOAD_CONFIGURATION:
+ case CREATE_SCHEMA_SNAPSHOT:
+ case CREATE_CONTINUOUS_QUERY:
+ case DROP_CONTINUOUS_QUERY:
+ case SET_SYSTEM_MODE:
+ case UNSET_TEMPLATE:
+ case PRUNE_TEMPLATE:
+ case APPEND_TEMPLATE:
+ case DROP_TEMPLATE:
+ case CREATE_PIPESINK:
+ case DROP_PIPESINK:
+ case CREATE_PIPE:
+ case START_PIPE:
+ case STOP_PIPE:
+ case DROP_PIPE:
+ case DEACTIVATE_TEMPLATE:
+ case CREATE_PIPEPLUGIN:
+ case DROP_PIPEPLUGIN:
+ case CREATE_LOGICAL_VIEW:
+ case ALTER_LOGICAL_VIEW:
+ case DELETE_LOGICAL_VIEW:
+ case RENAME_LOGICAL_VIEW:
+ case CREATE_TOPIC:
+ case DROP_TOPIC:
+ case DROP_SUBSCRIPTION:
+ return AuditLogOperation.DDL;
+ case LOAD_DATA:
+ case INSERT:
+ case BATCH_INSERT:
+ case BATCH_INSERT_ROWS:
+ case BATCH_INSERT_ONE_DEVICE:
+ case MULTI_BATCH_INSERT:
+ case PIPE_ENRICHED:
+ case DELETE:
+ case SELECT_INTO:
+ case LOAD_FILES:
+ case REMOVE_FILE:
+ case UNLOAD_FILE:
+ case ACTIVATE_TEMPLATE:
+ case SETTLE:
+ case INTERNAL_CREATE_TIMESERIES:
+ case START_REPAIR_DATA:
+ case STOP_REPAIR_DATA:
+ case SET_CONFIGURATION:
+ return AuditLogOperation.DML;
+ case LIST_USER:
+ case LIST_ROLE:
+ case LIST_USER_PRIVILEGE:
+ case LIST_ROLE_PRIVILEGE:
+ case LIST_USER_ROLES:
+ case LIST_ROLE_USERS:
+ case QUERY:
+ case LAST:
+ case GROUP_BY_TIME:
+ case GROUP_BY_FILL:
+ case AGGREGATION:
+ case FILL:
+ case UDAF:
+ case UDTF:
+ case SHOW:
+ case SHOW_PIPES:
+ case SHOW_TOPICS:
+ case SHOW_SUBSCRIPTIONS:
+ case SHOW_MERGE_STATUS:
+ case KILL:
+ case TRACING:
+ case SHOW_CONTINUOUS_QUERIES:
+ case SHOW_SCHEMA_TEMPLATE:
+ case SHOW_NODES_IN_SCHEMA_TEMPLATE:
+ case SHOW_PATH_SET_SCHEMA_TEMPLATE:
+ case SHOW_PATH_USING_SCHEMA_TEMPLATE:
+ case SHOW_QUERY_RESOURCE:
+ case FETCH_SCHEMA:
+ case COUNT:
+ case SHOW_TRIGGERS:
+ case SHOW_PIPEPLUGINS:
+ return AuditLogOperation.QUERY;
+ default:
+ return AuditLogOperation.CONTROL;
+ }
+ }
+}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
index e2f2abd4901..b21fe2057ef 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.commons.audit.AbstractAuditLogger;
import org.apache.iotdb.commons.audit.AuditEventType;
import org.apache.iotdb.commons.audit.AuditLogFields;
import org.apache.iotdb.commons.audit.AuditLogOperation;
-import org.apache.iotdb.commons.audit.IAuditEntity;
import org.apache.iotdb.commons.audit.PrivilegeLevel;
import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
@@ -74,23 +73,25 @@ import java.io.IOException;
import java.time.ZoneId;
import java.util.Arrays;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.Supplier;
import static org.apache.iotdb.db.pipe.receiver.protocol.legacy.loader.ILoader.SCHEMA_FETCHER;
public class DNAuditLogger extends AbstractAuditLogger {
- // TODO: @Hongzhi Gao move this path under __audit
- public static final String PREFIX_PASSWORD_HISTORY =
- "root." + SystemConstant.SYSTEM_PREFIX_KEY + ".password_history";
private static final Logger logger = LoggerFactory.getLogger(DNAuditLogger.class);
- // TODO: @zhujt20 Optimize the following stupid retry
- private static final int INSERT_RETRY_COUNT = 5;
- private static final int INSERT_RETRY_INTERVAL_MS = 2000;
-
private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
+ private static final String LOG = "log";
+ private static final String USERNAME = "username";
+ private static final String USER_ID = "user_id";
+ private static final String CLI_HOSTNAME = "cli_hostname";
+ private static final String RESULT = "result";
+ private static final String AUDIT_EVENT_TYPE = "audit_event_type";
+ private static final String OPERATION_TYPE = "operation_type";
+ private static final String PRIVILEGE_TYPE = "privilege_type";
+ private static final String PRIVILEGE_LEVEL = "privilege_level";
+ private static final String DATABASE = "database";
+ private static final String SQL_STRING = "sql_string";
private static final String AUDIT_LOG_DEVICE = "root.__audit.log.node_%s.u_%s";
private static final String AUDIT_LOGIN_LOG_DEVICE = "root.__audit.login.node_%s.u_%s";
@@ -129,36 +130,29 @@ public class DNAuditLogger extends AbstractAuditLogger {
@NotNull
private static InsertRowStatement generateInsertStatement(
- IAuditEntity auditLogFields, String log, PartialPath log_device) {
+ AuditLogFields auditLogFields, String log, PartialPath log_device) {
String username = auditLogFields.getUsername();
String address = auditLogFields.getCliHostname();
- AuditEventType type = auditLogFields.getAuditEventType();
- AuditLogOperation operation = auditLogFields.getAuditLogOperation();
- PrivilegeLevel privilegeLevel = null;
- if (auditLogFields.getPrivilegeTypes() != null) {
- for (PrivilegeType privilegeType : auditLogFields.getPrivilegeTypes()) {
- privilegeLevel = judgePrivilegeLevel(privilegeType);
- if (privilegeLevel.equals(PrivilegeLevel.GLOBAL)) {
- break;
- }
- }
- }
+ AuditEventType type = auditLogFields.getAuditType();
+ AuditLogOperation operation = auditLogFields.getOperationType();
+ PrivilegeType privilegeType = auditLogFields.getPrivilegeType();
+ PrivilegeLevel privilegeLevel = judgePrivilegeLevel(privilegeType);
String dataNodeId = String.valueOf(config.getDataNodeId());
InsertRowStatement insertStatement = new InsertRowStatement();
insertStatement.setDevicePath(log_device);
insertStatement.setTime(CommonDateTimeUtils.currentTime());
insertStatement.setMeasurements(
new String[] {
- AUDIT_LOG_USERNAME,
- AUDIT_LOG_CLI_HOSTNAME,
- AUDIT_LOG_AUDIT_EVENT_TYPE,
- AUDIT_LOG_OPERATION_TYPE,
- AUDIT_LOG_PRIVILEGE_TYPE,
- AUDIT_LOG_PRIVILEGE_LEVEL,
- AUDIT_LOG_RESULT,
- AUDIT_LOG_DATABASE,
- AUDIT_LOG_SQL_STRING,
- AUDIT_LOG_LOG
+ USERNAME,
+ CLI_HOSTNAME,
+ AUDIT_EVENT_TYPE,
+ OPERATION_TYPE,
+ PRIVILEGE_TYPE,
+ PRIVILEGE_LEVEL,
+ RESULT,
+ DATABASE,
+ SQL_STRING,
+ LOG
});
insertStatement.setAligned(false);
insertStatement.setValues(
@@ -169,14 +163,12 @@ public class DNAuditLogger extends AbstractAuditLogger {
new Binary(
operation == null ? "null" : operation.toString(), TSFileConfig.STRING_CHARSET),
new Binary(
- auditLogFields.getPrivilegeTypes() == null
- ? "null"
- : auditLogFields.getPrivilegeTypeString(),
+ privilegeType == null ? "null" : privilegeType.toString(),
TSFileConfig.STRING_CHARSET),
new Binary(
privilegeLevel == null ? "null" : privilegeLevel.toString(),
TSFileConfig.STRING_CHARSET),
- auditLogFields.getResult(),
+ auditLogFields.isResult(),
new Binary(
auditLogFields.getDatabase() == null ? "null" : auditLogFields.getDatabase(),
TSFileConfig.STRING_CHARSET),
@@ -283,33 +275,20 @@ public class DNAuditLogger extends AbstractAuditLogger {
}
stmt =
relationSqlParser.createStatement(
- String.format(
- "CREATE VIEW __audit.audit_log (\n"
- + " %s STRING TAG,\n"
- + " %s STRING TAG,\n"
- + " %s STRING FIELD,\n"
- + " %s STRING FIELD,\n"
- + " %s STRING FIELD,\n"
- + " %s STRING FIELD,\n"
- + " %s STRING FIELD,\n"
- + " %s STRING FIELD,\n"
- + " %s BOOLEAN FIELD,\n"
- + " %s STRING FIELD,\n"
- + " %s STRING FIELD,\n"
- + " %s STRING FIELD\n"
- + ") AS root.__audit.log.**",
- AUDIT_LOG_NODE_ID,
- AUDIT_LOG_USER_ID,
- AUDIT_LOG_USERNAME,
- AUDIT_LOG_CLI_HOSTNAME,
- AUDIT_LOG_AUDIT_EVENT_TYPE,
- AUDIT_LOG_OPERATION_TYPE,
- AUDIT_LOG_PRIVILEGE_TYPE,
- AUDIT_LOG_PRIVILEGE_LEVEL,
- AUDIT_LOG_RESULT,
- AUDIT_LOG_DATABASE,
- AUDIT_LOG_SQL_STRING,
- AUDIT_LOG_LOG),
+ "CREATE VIEW __audit.audit_log (\n"
+ + " node_id STRING TAG,\n"
+ + " user_id STRING TAG,\n"
+ + " username STRING FIELD,\n"
+ + " cli_hostname STRING FIELD,\n"
+ + " audit_event_type STRING FIELD,\n"
+ + " operation_type STRING FIELD,\n"
+ + " privilege_type STRING FIELD,\n"
+ + " privilege_level STRING FIELD,\n"
+ + " result BOOLEAN FIELD,\n"
+ + " database STRING FIELD,\n"
+ + " sql_string STRING FIELD,\n"
+ + " log STRING FIELD\n"
+ + ") AS root.__audit.log.**",
ZoneId.systemDefault(),
session);
status =
@@ -339,13 +318,12 @@ public class DNAuditLogger extends AbstractAuditLogger {
}
}
- @Override
- public void log(IAuditEntity auditLogFields, Supplier<String> log) {
+ public void log(AuditLogFields auditLogFields, String log) {
if (!IS_AUDIT_LOG_ENABLED) {
return;
}
createViewIfNecessary();
- if (noNeedInsertAuditLog(auditLogFields)) {
+ if (!checkBeforeLog(auditLogFields)) {
return;
}
long userId = auditLogFields.getUserId();
@@ -359,58 +337,43 @@ public class DNAuditLogger extends AbstractAuditLogger {
statement =
generateInsertStatement(
auditLogFields,
- log.get(),
+ log,
DEVICE_PATH_CACHE.getPartialPath(String.format(AUDIT_LOG_DEVICE, dataNodeId, user)));
} catch (IllegalPathException e) {
logger.error("Failed to log audit events because ", e);
return;
}
- for (int retry = 0; retry < INSERT_RETRY_COUNT; retry++) {
- ExecutionResult insertResult =
- coordinator.executeForTreeModel(
- statement,
- SESSION_MANAGER.requestQueryId(),
- sessionInfo,
- "",
- ClusterPartitionFetcher.getInstance(),
- SCHEMA_FETCHER);
- if (insertResult.status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- return;
- }
+ coordinator.executeForTreeModel(
+ statement,
+ SESSION_MANAGER.requestQueryId(),
+ sessionInfo,
+ "",
+ ClusterPartitionFetcher.getInstance(),
+ SCHEMA_FETCHER);
+ AuditEventType type = auditLogFields.getAuditType();
+ if (isLoginEvent(type)) {
try {
- TimeUnit.MILLISECONDS.sleep(INSERT_RETRY_INTERVAL_MS);
- } catch (InterruptedException e) {
- logger.error("Audit log insertion retry sleep was interrupted", e);
+ statement.setDevicePath(
+ DEVICE_PATH_CACHE.getPartialPath(
+ String.format(AUDIT_LOGIN_LOG_DEVICE, dataNodeId, user)));
+ } catch (IllegalPathException e) {
+ logger.error("Failed to log audit login events because ", e);
+ return;
}
- }
- AuditEventType type = auditLogFields.getAuditEventType();
- if (isLoginEvent(type)) {
- // TODO: @wenyanshi-123 Reactivate the following codes in the future
- // try {
- // statement.setDevicePath(
- // DEVICE_PATH_CACHE.getPartialPath(
- // String.format(AUDIT_LOGIN_LOG_DEVICE, dataNodeId, user)));
- // } catch (IllegalPathException e) {
- // logger.error("Failed to log audit login events because ", e);
- // return;
- // }
- // coordinator.executeForTreeModel(
- // statement,
- // SESSION_MANAGER.requestQueryId(),
- // sessionInfo,
- // "",
- // ClusterPartitionFetcher.getInstance(),
- // SCHEMA_FETCHER);
+ coordinator.executeForTreeModel(
+ statement,
+ SESSION_MANAGER.requestQueryId(),
+ sessionInfo,
+ "",
+ ClusterPartitionFetcher.getInstance(),
+ SCHEMA_FETCHER);
}
}
public void logFromCN(AuditLogFields auditLogFields, String log, int nodeId)
throws IllegalPathException {
- if (!IS_AUDIT_LOG_ENABLED) {
- return;
- }
createViewIfNecessary();
- if (noNeedInsertAuditLog(auditLogFields)) {
+ if (!checkBeforeLog(auditLogFields)) {
return;
}
InsertRowStatement statement =
@@ -418,24 +381,13 @@ public class DNAuditLogger extends AbstractAuditLogger {
auditLogFields,
log,
DEVICE_PATH_CACHE.getPartialPath(String.format(AUDIT_CN_LOG_DEVICE, nodeId)));
- for (int retry = 0; retry < INSERT_RETRY_COUNT; retry++) {
- ExecutionResult insertResult =
- coordinator.executeForTreeModel(
- statement,
- SESSION_MANAGER.requestQueryId(),
- sessionInfo,
- "",
- ClusterPartitionFetcher.getInstance(),
- SCHEMA_FETCHER);
- if (insertResult.status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- return;
- }
- try {
- TimeUnit.MILLISECONDS.sleep(INSERT_RETRY_INTERVAL_MS);
- } catch (InterruptedException e) {
- logger.error("Audit log insertion retry sleep was interrupted", e);
- }
- }
+ coordinator.executeForTreeModel(
+ statement,
+ SESSION_MANAGER.requestQueryId(),
+ sessionInfo,
+ "",
+ ClusterPartitionFetcher.getInstance(),
+ SCHEMA_FETCHER);
}
private static class DNAuditLoggerHolder {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
index 31a7ffe3a11..df87a01bae2 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.commons.auth.AuthException;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.auth.entity.User;
import org.apache.iotdb.commons.conf.CommonDescriptor;
+import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
@@ -81,8 +82,8 @@ public class AuthorityChecker {
public static final TSStatus SUCCEED = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
- public static final int INTERNAL_AUDIT_USER_ID = 4;
- public static final String INTERNAL_AUDIT_USER = "__internal_auditor";
+ public static final int INTERNAL_AUDIT_USER_ID = IoTDBConstant.INTERNAL_AUDIT_USER_ID;
+ public static final String INTERNAL_AUDIT_USER = IoTDBConstant.INTERNAL_AUDIT_USER;
public static String ANY_SCOPE = "any";
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index e12f3364600..4f32529451d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -21,12 +21,14 @@ package org.apache.iotdb.db.conf;
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
+import org.apache.iotdb.commons.audit.AuditLogOperation;
import org.apache.iotdb.commons.client.property.ClientPoolProperty.DefaultProperty;
import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.enums.ReadConsistencyLevel;
import org.apache.iotdb.commons.utils.FileUtils;
import org.apache.iotdb.consensus.ConsensusFactory;
+import org.apache.iotdb.db.audit.AuditLogStorage;
import org.apache.iotdb.db.exception.LoadConfigurationException;
import org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.LastCacheLoadStrategy;
@@ -1042,6 +1044,24 @@ public class IoTDBConfig {
private int ratisTransferLeaderTimeoutMs = 30 * 1000; // 30s
+ /** whether to enable the audit log * */
+ private boolean enableAuditLog = false;
+
+ /** Output location of audit logs * */
+ private List<AuditLogStorage> auditLogStorage =
+ Arrays.asList(AuditLogStorage.IOTDB, AuditLogStorage.LOGGER);
+
+ /** Indicates the category collection of audit logs * */
+ private List<AuditLogOperation> auditableOperationType =
+ Arrays.asList(
+ AuditLogOperation.DML,
+ AuditLogOperation.DDL,
+ AuditLogOperation.QUERY,
+ AuditLogOperation.CONTROL);
+
+ /** whether the local write api records audit logs * */
+ private boolean enableAuditLogForNativeInsertApi = true;
+
// customizedProperties, this should be empty by default.
private Properties customizedProperties = new Properties();
@@ -3736,6 +3756,34 @@ public class IoTDBConfig {
this.candidateCompactionTaskQueueSize = candidateCompactionTaskQueueSize;
}
+ public boolean isEnableAuditLog() {
+ return enableAuditLog;
+ }
+
+ public void setEnableAuditLog(boolean enableAuditLog) {
+ this.enableAuditLog = enableAuditLog;
+ }
+
+ public List<AuditLogOperation> getAuditableOperationType() {
+ return auditableOperationType;
+ }
+
+ public List<AuditLogStorage> getAuditLogStorage() {
+ return auditLogStorage;
+ }
+
+ public void setAuditLogStorage(List<AuditLogStorage> auditLogStorage) {
+ this.auditLogStorage = auditLogStorage;
+ }
+
+ public boolean isEnableAuditLogForNativeInsertApi() {
+ return enableAuditLogForNativeInsertApi;
+ }
+
+ public void setEnableAuditLogForNativeInsertApi(boolean enableAuditLogForNativeInsertApi) {
+ this.enableAuditLogForNativeInsertApi = enableAuditLogForNativeInsertApi;
+ }
+
public void setModeMapSizeThreshold(int modeMapSizeThreshold) {
this.modeMapSizeThreshold = modeMapSizeThreshold;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java
index 3f05e78066a..6b9ba0a2612 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java
@@ -25,7 +25,6 @@ import org.apache.iotdb.commons.consensus.SchemaRegionId;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
import org.apache.iotdb.db.exception.metadata.MeasurementAlreadyExistException;
import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException;
@@ -74,6 +73,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.write.req.SchemaRegionWrite
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.impl.CreateAlignedTimeSeriesPlanImpl;
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.impl.CreateTimeSeriesPlanImpl;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.rpc.TSStatusCode;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/connection/PipeEventCollector.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/connection/PipeEventCollector.java
index d96cf8727eb..a4c9f0e8403 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/connection/PipeEventCollector.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/connection/PipeEventCollector.java
@@ -20,7 +20,6 @@
package org.apache.iotdb.db.pipe.agent.task.connection;
import org.apache.iotdb.commons.audit.UserEntity;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.pipe.agent.task.connection.UnboundedBlockingPendingQueue;
import org.apache.iotdb.commons.pipe.agent.task.progress.PipeEventCommitManager;
import org.apache.iotdb.commons.pipe.datastructure.pattern.IoTDBTreePattern;
@@ -33,7 +32,6 @@ import org.apache.iotdb.db.pipe.event.common.tablet.PipeInsertNodeTabletInsertio
import org.apache.iotdb.db.pipe.event.common.tablet.PipeRawTabletInsertionEvent;
import org.apache.iotdb.db.pipe.event.common.tsfile.PipeTsFileInsertionEvent;
import org.apache.iotdb.db.pipe.source.schemaregion.IoTDBSchemaRegionSource;
-import org.apache.iotdb.db.pipe.source.schemaregion.PipePlanTreePrivilegeParseVisitor;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.AbstractDeleteDataNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.DeleteDataNode;
import org.apache.iotdb.pipe.api.collector.EventCollector;
@@ -117,8 +115,7 @@ public class PipeEventCollector implements EventCollector {
}
}
- private void parseAndCollectEvent(final PipeRawTabletInsertionEvent sourceEvent)
- throws IllegalPathException {
+ private void parseAndCollectEvent(final PipeRawTabletInsertionEvent sourceEvent) {
if (sourceEvent.shouldParseTimeOrPattern()) {
collectParsedRawTableEvent(sourceEvent.parseEventWithPatternOrTime());
} else {
@@ -173,20 +170,9 @@ public class PipeEventCollector implements EventCollector {
// Only used by events containing delete data node, no need to bind progress index here since
// delete data event does not have progress index currently
(deleteDataEvent.getDeleteDataNode() instanceof DeleteDataNode
- ? IoTDBSchemaRegionSource.TREE_PATTERN_PARSE_VISITOR
- .process(
- deleteDataEvent.getDeleteDataNode(),
- (IoTDBTreePattern) deleteDataEvent.getTreePattern())
- .flatMap(
- planNode ->
- new PipePlanTreePrivilegeParseVisitor(
- deleteDataEvent.isSkipIfNoPrivileges())
- .process(
- planNode,
- new UserEntity(
- Long.parseLong(deleteDataEvent.getUserId()),
- deleteDataEvent.getUserName(),
- deleteDataEvent.getCliHostname())))
+ ? IoTDBSchemaRegionSource.TREE_PATTERN_PARSE_VISITOR.process(
+ deleteDataEvent.getDeleteDataNode(),
+ (IoTDBTreePattern) deleteDataEvent.getTreePattern())
: IoTDBSchemaRegionSource.TABLE_PATTERN_PARSE_VISITOR
.process(deleteDataEvent.getDeleteDataNode(), deleteDataEvent.getTablePattern())
.flatMap(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/PipeInsertionEvent.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/PipeInsertionEvent.java
index ce491b92ef4..2641f522654 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/PipeInsertionEvent.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/PipeInsertionEvent.java
@@ -56,7 +56,6 @@ public abstract class PipeInsertionEvent extends EnrichedEvent {
protected String treeModelDatabaseName; // lazy initialization
protected String tableModelDatabaseName; // lazy initialization
- protected boolean shouldParse4Privilege = false;
protected PipeInsertionEvent(
final String pipeName,
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/PipeInsertNodeTabletInsertionEvent.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/PipeInsertNodeTabletInsertionEvent.java
index dbaf9fb7a4f..63cae75fbbd 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/PipeInsertNodeTabletInsertionEvent.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/PipeInsertNodeTabletInsertionEvent.java
@@ -19,14 +19,10 @@
package org.apache.iotdb.db.pipe.event.common.tablet;
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.audit.UserEntity;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.consensus.index.ProgressIndex;
import org.apache.iotdb.commons.consensus.index.impl.MinimumProgressIndex;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TablePattern;
@@ -52,16 +48,13 @@ import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.RelationalIn
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.RelationalInsertRowsNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.RelationalInsertTabletNode;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckVisitor;
import org.apache.iotdb.db.storageengine.dataregion.memtable.DeviceIDFactory;
import org.apache.iotdb.db.storageengine.dataregion.wal.exception.WALPipeException;
import org.apache.iotdb.pipe.api.access.Row;
import org.apache.iotdb.pipe.api.collector.RowCollector;
import org.apache.iotdb.pipe.api.event.dml.insertion.TabletInsertionEvent;
import org.apache.iotdb.pipe.api.exception.PipeException;
-import org.apache.iotdb.rpc.TSStatusCode;
-import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.utils.Accountable;
import org.apache.tsfile.utils.RamUsageEstimator;
import org.apache.tsfile.write.UnSupportedDataTypeException;
@@ -274,25 +267,24 @@ public class PipeInsertNodeTabletInsertionEvent extends PipeInsertionEvent
}
@Override
- public void throwIfNoPrivilege() throws Exception {
- if (skipIfNoPrivileges) {
+ public void throwIfNoPrivilege() {
+ if (skipIfNoPrivileges || !isTableModelEvent()) {
return;
}
if (Objects.nonNull(insertNode.getTargetPath())) {
- if (isTableModelEvent()) {
- checkTableName(
- DeviceIDFactory.getInstance().getDeviceID(insertNode.getTargetPath()).getTableName());
- } else {
- checkTreePattern(insertNode.getDeviceID(), insertNode.getMeasurements());
- }
+ checkTableName(
+ DeviceIDFactory.getInstance().getDeviceID(insertNode.getTargetPath()).getTableName());
} else if (insertNode instanceof InsertRowsNode) {
- for (final InsertNode node : ((InsertRowsNode) insertNode).getInsertRowNodeList()) {
- if (isTableModelEvent()) {
- checkTableName(
- DeviceIDFactory.getInstance().getDeviceID(node.getTargetPath()).getTableName());
- } else {
- checkTreePattern(node.getDeviceID(), node.getMeasurements());
- }
+ for (final String tableName :
+ ((InsertRowsNode) insertNode)
+ .getInsertRowNodeList().stream()
+ .map(
+ node ->
+ DeviceIDFactory.getInstance()
+ .getDeviceID(node.getTargetPath())
+ .getTableName())
+ .collect(Collectors.toSet())) {
+ checkTableName(tableName);
}
}
}
@@ -310,28 +302,6 @@ public class PipeInsertNodeTabletInsertionEvent extends PipeInsertionEvent
}
}
- private void checkTreePattern(final IDeviceID deviceID, final String[] measurements)
- throws IllegalPathException {
- final List<MeasurementPath> measurementList = new ArrayList<>();
- for (final String measurement : measurements) {
- if (!treePattern.matchesMeasurement(deviceID, measurement)) {
- measurementList.add(new MeasurementPath(deviceID, measurement));
- }
- }
- final TSStatus status =
- TreeAccessCheckVisitor.checkTimeSeriesPermission(
- new UserEntity(Long.parseLong(userId), userName, cliHostname),
- measurementList,
- PrivilegeType.READ_DATA);
- if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != status.getCode()) {
- if (skipIfNoPrivileges) {
- shouldParse4Privilege = true;
- } else {
- throw new AccessDeniedException(status.getMessage());
- }
- }
- }
-
@Override
public boolean mayEventTimeOverlappedWithTimeRange() {
try {
@@ -477,26 +447,13 @@ public class PipeInsertNodeTabletInsertionEvent extends PipeInsertionEvent
case INSERT_ROW:
case INSERT_TABLET:
eventParsers.add(
- new TabletInsertionEventTreePatternParser(
- pipeTaskMeta,
- this,
- node,
- treePattern,
- shouldParse4Privilege
- ? new UserEntity(Long.parseLong(userId), userName, cliHostname)
- : null));
+ new TabletInsertionEventTreePatternParser(pipeTaskMeta, this, node, treePattern));
break;
case INSERT_ROWS:
for (final InsertRowNode insertRowNode : ((InsertRowsNode) node).getInsertRowNodeList()) {
eventParsers.add(
new TabletInsertionEventTreePatternParser(
- pipeTaskMeta,
- this,
- insertRowNode,
- treePattern,
- shouldParse4Privilege
- ? new UserEntity(Long.parseLong(userId), userName, cliHostname)
- : null));
+ pipeTaskMeta, this, insertRowNode, treePattern));
}
break;
case RELATIONAL_INSERT_ROW:
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/PipeRawTabletInsertionEvent.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/PipeRawTabletInsertionEvent.java
index f23e19f4c0e..adcef5128f5 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/PipeRawTabletInsertionEvent.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/PipeRawTabletInsertionEvent.java
@@ -19,10 +19,8 @@
package org.apache.iotdb.db.pipe.event.common.tablet;
-import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.consensus.index.ProgressIndex;
import org.apache.iotdb.commons.consensus.index.impl.MinimumProgressIndex;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TablePattern;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TreePattern;
@@ -408,21 +406,13 @@ public class PipeRawTabletInsertionEvent extends PipeInsertionEvent
@Override
public Iterable<TabletInsertionEvent> processRowByRow(
final BiConsumer<Row, RowCollector> consumer) {
- try {
- return initEventParser().processRowByRow(consumer);
- } catch (final Exception e) {
- throw new RuntimeException(e);
- }
+ return initEventParser().processRowByRow(consumer);
}
@Override
public Iterable<TabletInsertionEvent> processTablet(
final BiConsumer<Tablet, RowCollector> consumer) {
- try {
- return initEventParser().processTablet(consumer);
- } catch (final Exception e) {
- throw new RuntimeException(e);
- }
+ return initEventParser().processTablet(consumer);
}
/////////////////////////// convertToTablet ///////////////////////////
@@ -445,28 +435,21 @@ public class PipeRawTabletInsertionEvent extends PipeInsertionEvent
eventParser =
tablet.getDeviceId().startsWith("root.")
? new TabletInsertionEventTreePatternParser(
- pipeTaskMeta,
- this,
- tablet,
- isAligned,
- treePattern,
- shouldParse4Privilege
- ? new UserEntity(Long.parseLong(userId), userName, cliHostname)
- : null)
+ pipeTaskMeta, this, tablet, isAligned, treePattern)
: new TabletInsertionEventTablePatternParser(
pipeTaskMeta, this, tablet, isAligned, tablePattern);
}
return eventParser;
}
- public long count() throws IllegalPathException {
+ public long count() {
final Tablet convertedTablet = shouldParseTimeOrPattern() ? convertToTablet() : tablet;
return (long) convertedTablet.getRowSize() * convertedTablet.getSchemas().size();
}
/////////////////////////// parsePatternOrTime ///////////////////////////
- public PipeRawTabletInsertionEvent parseEventWithPatternOrTime() throws IllegalPathException {
+ public PipeRawTabletInsertionEvent parseEventWithPatternOrTime() {
return new PipeRawTabletInsertionEvent(
getRawIsTableModelEvent(),
getSourceDatabaseNameFromDataRegion(),
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventParser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventParser.java
index 6e1b533d9c0..0cdba9d28d4 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventParser.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventParser.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.pipe.event.common.tablet.parser;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.event.EnrichedEvent;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
@@ -191,7 +190,7 @@ public abstract class TabletInsertionEventParser {
}
}
- protected void parse(final InsertTabletNode insertTabletNode) throws IllegalPathException {
+ protected void parse(final InsertTabletNode insertTabletNode) {
final int originColumnSize = insertTabletNode.getMeasurements().length;
final Integer[] originColumnIndex2FilteredColumnIndexMapperList = new Integer[originColumnSize];
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventTablePatternParser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventTablePatternParser.java
index 76c0507daf2..de68404fb2a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventTablePatternParser.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventTablePatternParser.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.pipe.event.common.tablet.parser;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TablePattern;
import org.apache.iotdb.commons.pipe.event.EnrichedEvent;
@@ -52,8 +51,7 @@ public class TabletInsertionEventTablePatternParser extends TabletInsertionEvent
final PipeTaskMeta pipeTaskMeta,
final EnrichedEvent sourceEvent,
final InsertNode insertNode,
- final TablePattern pattern)
- throws IllegalPathException {
+ final TablePattern pattern) {
super(pipeTaskMeta, sourceEvent);
this.pattern = pattern;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventTreePatternParser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventTreePatternParser.java
index 7fb3bf6ce07..68fb0e50b95 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventTreePatternParser.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/parser/TabletInsertionEventTreePatternParser.java
@@ -19,10 +19,6 @@
package org.apache.iotdb.db.pipe.event.common.tablet.parser;
-import org.apache.iotdb.commons.audit.IAuditEntity;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import org.apache.iotdb.commons.exception.IllegalPathException;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TreePattern;
import org.apache.iotdb.commons.pipe.event.EnrichedEvent;
@@ -32,11 +28,9 @@ import org.apache.iotdb.db.pipe.event.common.row.PipeRowCollector;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertTabletNode;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckVisitor;
import org.apache.iotdb.pipe.api.access.Row;
import org.apache.iotdb.pipe.api.collector.RowCollector;
import org.apache.iotdb.pipe.api.event.dml.insertion.TabletInsertionEvent;
-import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.tsfile.write.UnSupportedDataTypeException;
import org.apache.tsfile.write.record.Tablet;
@@ -50,18 +44,14 @@ import java.util.function.BiConsumer;
public class TabletInsertionEventTreePatternParser extends TabletInsertionEventParser {
private final TreePattern pattern;
- private final IAuditEntity entity;
public TabletInsertionEventTreePatternParser(
final PipeTaskMeta pipeTaskMeta,
final EnrichedEvent sourceEvent,
final InsertNode insertNode,
- final TreePattern pattern,
- final IAuditEntity entity)
- throws IllegalPathException {
+ final TreePattern pattern) {
super(pipeTaskMeta, sourceEvent);
this.pattern = pattern;
- this.entity = entity;
if (insertNode instanceof InsertRowNode) {
parse((InsertRowNode) insertNode);
@@ -78,19 +68,17 @@ public class TabletInsertionEventTreePatternParser extends TabletInsertionEventP
final EnrichedEvent sourceEvent,
final Tablet tablet,
final boolean isAligned,
- final TreePattern pattern,
- final IAuditEntity entity) {
+ final TreePattern pattern) {
super(pipeTaskMeta, sourceEvent);
this.pattern = pattern;
- this.entity = entity;
parse(tablet, isAligned);
}
@TestOnly
public TabletInsertionEventTreePatternParser(
- final InsertNode insertNode, final TreePattern pattern) throws IllegalPathException {
- this(null, null, insertNode, pattern, null);
+ final InsertNode insertNode, final TreePattern pattern) {
+ this(null, null, insertNode, pattern);
}
@Override
@@ -106,8 +94,7 @@ public class TabletInsertionEventTreePatternParser extends TabletInsertionEventP
// case 1: for example, pattern is root.a.b or pattern is null and device is root.a.b.c
// in this case, all data can be matched without checking the measurements
- if (Objects.isNull(entity)
- && (Objects.isNull(pattern) || pattern.isRoot() || pattern.coversDevice(deviceId))) {
+ if (Objects.isNull(pattern) || pattern.isRoot() || pattern.coversDevice(deviceId)) {
for (int i = 0; i < originColumnSize; i++) {
originColumnIndex2FilteredColumnIndexMapperList[i] = i;
}
@@ -126,19 +113,8 @@ public class TabletInsertionEventTreePatternParser extends TabletInsertionEventP
continue;
}
- try {
- if (pattern.matchesMeasurement(deviceId, measurement)
- && (Objects.isNull(entity)
- || TreeAccessCheckVisitor.checkTimeSeriesPermission(
- entity,
- Collections.singletonList(new MeasurementPath(deviceId, measurement)),
- PrivilegeType.READ_DATA)
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode())) {
- originColumnIndex2FilteredColumnIndexMapperList[i] = filteredCount++;
- }
- } catch (final IllegalPathException e) {
- throw new RuntimeException(e);
+ if (pattern.matchesMeasurement(deviceId, measurement)) {
+ originColumnIndex2FilteredColumnIndexMapperList[i] = filteredCount++;
}
}
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/PipeTsFileInsertionEvent.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/PipeTsFileInsertionEvent.java
index 078805996f2..3617b7347ad 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/PipeTsFileInsertionEvent.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/PipeTsFileInsertionEvent.java
@@ -19,16 +19,11 @@
package org.apache.iotdb.db.pipe.event.common.tsfile;
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.audit.UserEntity;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.consensus.index.ProgressIndex;
import org.apache.iotdb.commons.consensus.index.impl.MinimumProgressIndex;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
import org.apache.iotdb.commons.exception.pipe.PipeRuntimeOutOfMemoryCriticalException;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.config.PipeConfig;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TablePattern;
@@ -47,13 +42,11 @@ import org.apache.iotdb.db.pipe.resource.memory.PipeMemoryManager;
import org.apache.iotdb.db.pipe.resource.tsfile.PipeTsFileResourceManager;
import org.apache.iotdb.db.pipe.source.dataregion.realtime.assigner.PipeTsFileEpochProgressIndexKeeper;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckVisitor;
import org.apache.iotdb.db.storageengine.dataregion.memtable.TsFileProcessor;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.pipe.api.event.dml.insertion.TabletInsertionEvent;
import org.apache.iotdb.pipe.api.event.dml.insertion.TsFileInsertionEvent;
import org.apache.iotdb.pipe.api.exception.PipeException;
-import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.slf4j.Logger;
@@ -61,10 +54,8 @@ import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -86,6 +77,7 @@ public class PipeTsFileInsertionEvent extends PipeInsertionEvent
private boolean isWithMod;
private File modFile;
private final File sharedModFile;
+ private boolean shouldParse4Privilege = false;
protected final boolean isLoaded;
protected final boolean isGeneratedByPipe;
@@ -100,7 +92,6 @@ public class PipeTsFileInsertionEvent extends PipeInsertionEvent
protected volatile ProgressIndex overridingProgressIndex;
private Set<String> tableNames;
- private Map<IDeviceID, String[]> treeSchemaMap;
public PipeTsFileInsertionEvent(
final Boolean isTableModelEvent,
@@ -450,84 +441,33 @@ public class PipeTsFileInsertionEvent extends PipeInsertionEvent
@Override
public void throwIfNoPrivilege() {
try {
- if (AuthorityChecker.SUPER_USER.equals(userName)) {
+ if (!isTableModelEvent() || AuthorityChecker.SUPER_USER.equals(userName)) {
return;
}
if (!waitForTsFileClose()) {
LOGGER.info("Temporary tsFile {} detected, will skip its transfer.", tsFile);
return;
}
- if (isTableModelEvent()) {
- for (final String table : tableNames) {
- if (!tablePattern.matchesDatabase(getTableModelDatabaseName())
- || !tablePattern.matchesTable(table)) {
- continue;
- }
- if (!AuthorityChecker.getAccessControl()
- .checkCanSelectFromTable4Pipe(
- userName,
- new QualifiedObjectName(getTableModelDatabaseName(), table),
- new UserEntity(Long.parseLong(userId), userName, cliHostname))) {
- if (skipIfNoPrivileges) {
- shouldParse4Privilege = true;
- } else {
- throw new AccessDeniedException(
- String.format(
- "No privilege for SELECT for user %s at table %s.%s",
- userName, tableModelDatabaseName, table));
- }
- }
+ for (final String table : tableNames) {
+ if (!tablePattern.matchesDatabase(getTableModelDatabaseName())
+ || !tablePattern.matchesTable(table)) {
+ continue;
}
- }
- // Real-time tsFiles
- else if (Objects.nonNull(treeSchemaMap)) {
- final List<MeasurementPath> measurementList = new ArrayList<>();
- for (final Map.Entry<IDeviceID, String[]> entry : treeSchemaMap.entrySet()) {
- final IDeviceID deviceID = entry.getKey();
- for (final String measurement : entry.getValue()) {
- if (treePattern.matchesMeasurement(deviceID, measurement)) {
- measurementList.add(new MeasurementPath(deviceID, measurement));
- }
- }
- }
- final TSStatus status =
- TreeAccessCheckVisitor.checkTimeSeriesPermission(
- new UserEntity(Long.parseLong(userId), userName, cliHostname),
- measurementList,
- PrivilegeType.READ_DATA);
- if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != status.getCode()) {
+ if (!AuthorityChecker.getAccessControl()
+ .checkCanSelectFromTable4Pipe(
+ userName,
+ new QualifiedObjectName(getTableModelDatabaseName(), table),
+ new UserEntity(Long.parseLong(userId), userName, cliHostname))) {
if (skipIfNoPrivileges) {
shouldParse4Privilege = true;
} else {
- throw new AccessDeniedException(status.getMessage());
+ throw new AccessDeniedException(
+ String.format(
+ "No privilege for SELECT for user %s at table %s.%s",
+ userName, tableModelDatabaseName, table));
}
}
}
- // Historical tsFiles
- // Coarse filter, will be judged in inner class
- else {
- final Set<IDeviceID> devices = getDeviceSet();
- if (Objects.nonNull(devices)) {
- final List<MeasurementPath> measurementList = new ArrayList<>();
- for (final IDeviceID device : devices) {
- measurementList.add(new MeasurementPath(device, IoTDBConstant.ONE_LEVEL_PATH_WILDCARD));
- }
- final TSStatus status =
- TreeAccessCheckVisitor.checkTimeSeriesPermission(
- new UserEntity(Long.parseLong(userId), userName, cliHostname),
- measurementList,
- PrivilegeType.READ_DATA);
- if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != status.getCode()) {
- if (skipIfNoPrivileges) {
- shouldParse4Privilege = true;
- } else {
- throw new AccessDeniedException(status.getMessage());
- }
- }
- } else {
- shouldParse4Privilege = true;
- }
- }
} catch (final AccessDeniedException e) {
throw e;
} catch (final Exception e) {
@@ -545,10 +485,6 @@ public class PipeTsFileInsertionEvent extends PipeInsertionEvent
resource.getTsFilePath(), e.getMessage());
LOGGER.warn(errorMsg, e);
throw new PipeException(errorMsg, e);
- } finally {
- // GC useless
- tableNames = null;
- treeSchemaMap = null;
}
}
@@ -588,21 +524,13 @@ public class PipeTsFileInsertionEvent extends PipeInsertionEvent
if (Objects.nonNull(deviceIsAlignedMap)) {
return deviceIsAlignedMap.keySet();
}
- try {
- return resource.getDevices();
- } catch (final Exception e) {
- return null;
- }
+ return resource.getDevices();
}
public void setTableNames(final Set<String> tableNames) {
this.tableNames = tableNames;
}
- public void setTreeSchemaMap(final Map<IDeviceID, String[]> treeSchemaMap) {
- this.treeSchemaMap = treeSchemaMap;
- }
-
/////////////////////////// PipeInsertionEvent ///////////////////////////
@Override
@@ -620,11 +548,11 @@ public class PipeTsFileInsertionEvent extends PipeInsertionEvent
@FunctionalInterface
public interface TabletInsertionEventConsumer {
- void consume(final PipeRawTabletInsertionEvent event) throws IllegalPathException;
+ void consume(final PipeRawTabletInsertionEvent event);
}
public void consumeTabletInsertionEventsWithRetry(
- final TabletInsertionEventConsumer consumer, final String callerName) throws Exception {
+ final TabletInsertionEventConsumer consumer, final String callerName) throws PipeException {
final Iterable<TabletInsertionEvent> iterable = toTabletInsertionEvents();
final Iterator<TabletInsertionEvent> iterator = iterable.iterator();
int tabletEventCount = 0;
@@ -676,6 +604,10 @@ public class PipeTsFileInsertionEvent extends PipeInsertionEvent
"Pipe skipping temporary TsFile's parsing which shouldn't be transferred: {}", tsFile);
return Collections.emptyList();
}
+ // Skip if is table events and tree model
+ if (Objects.isNull(userName) && isTableModelEvent()) {
+ return Collections.emptyList();
+ }
waitForResourceEnough4Parsing(timeoutMs);
return initEventParser().toTabletInsertionEvents();
} catch (final Exception e) {
@@ -766,13 +698,11 @@ public class PipeTsFileInsertionEvent extends PipeInsertionEvent
pipeTaskMeta,
// Do not parse privilege if it should not be parsed
// To avoid renaming of the tsFile database
- shouldParse4Privilege
- ? new UserEntity(Long.parseLong(userId), userName, cliHostname)
- : null,
+ shouldParse4Privilege ? userName : null,
this)
.provide());
return eventParser.get();
- } catch (final Exception e) {
+ } catch (final IOException e) {
close();
final String errorMsg = String.format("Read TsFile %s error.", tsFile.getPath());
@@ -781,7 +711,7 @@ public class PipeTsFileInsertionEvent extends PipeInsertionEvent
}
}
- public long count(final boolean skipReportOnCommit) throws Exception {
+ public long count(final boolean skipReportOnCommit) throws IOException {
AtomicLong count = new AtomicLong();
if (shouldParseTime()) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParser.java
index 7f2ac476425..358103175fe 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParser.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParser.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.pipe.event.common.tsfile.parser;
-import org.apache.iotdb.commons.audit.IAuditEntity;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.config.PipeConfig;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TablePattern;
@@ -44,8 +43,6 @@ public abstract class TsFileInsertionEventParser implements AutoCloseable {
protected final String pipeName;
protected final long creationTime;
- protected IAuditEntity entity;
- protected boolean skipIfNoPrivileges;
protected final TreePattern treePattern; // used to filter data
protected final TablePattern tablePattern; // used to filter data
@@ -73,13 +70,9 @@ public abstract class TsFileInsertionEventParser implements AutoCloseable {
final long startTime,
final long endTime,
final PipeTaskMeta pipeTaskMeta,
- final IAuditEntity entity,
- final boolean skipIfNoPrivileges,
final PipeInsertionEvent sourceEvent) {
this.pipeName = pipeName;
this.creationTime = creationTime;
- this.entity = entity;
- this.skipIfNoPrivileges = skipIfNoPrivileges;
this.treePattern = treePattern;
this.tablePattern = tablePattern;
@@ -106,6 +99,7 @@ public abstract class TsFileInsertionEventParser implements AutoCloseable {
@Override
public void close() {
+
tabletInsertionIterable = null;
try {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParserProvider.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParserProvider.java
index 8d055ed9dee..a965c817b99 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParserProvider.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParserProvider.java
@@ -19,8 +19,6 @@
package org.apache.iotdb.db.pipe.event.common.tsfile.parser;
-import org.apache.iotdb.commons.audit.IAuditEntity;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.config.PipeConfig;
import org.apache.iotdb.commons.pipe.datastructure.pattern.IoTDBTreePattern;
@@ -55,7 +53,7 @@ public class TsFileInsertionEventParserProvider {
protected final PipeTaskMeta pipeTaskMeta;
protected final PipeTsFileInsertionEvent sourceEvent;
- private final IAuditEntity entity;
+ private final String userName;
public TsFileInsertionEventParserProvider(
final String pipeName,
@@ -66,7 +64,7 @@ public class TsFileInsertionEventParserProvider {
final long startTime,
final long endTime,
final PipeTaskMeta pipeTaskMeta,
- final IAuditEntity entity,
+ final String userName,
final PipeTsFileInsertionEvent sourceEvent) {
this.pipeName = pipeName;
this.creationTime = creationTime;
@@ -76,11 +74,11 @@ public class TsFileInsertionEventParserProvider {
this.startTime = startTime;
this.endTime = endTime;
this.pipeTaskMeta = pipeTaskMeta;
- this.entity = entity;
+ this.userName = userName;
this.sourceEvent = sourceEvent;
}
- public TsFileInsertionEventParser provide() throws IOException, IllegalPathException {
+ public TsFileInsertionEventParser provide() throws IOException {
if (pipeName != null) {
PipeTsFileToTabletsMetrics.getInstance()
.markTsFileToTabletInvocation(pipeName + "_" + creationTime);
@@ -95,7 +93,7 @@ public class TsFileInsertionEventParserProvider {
startTime,
endTime,
pipeTaskMeta,
- entity,
+ userName,
sourceEvent);
}
@@ -111,8 +109,6 @@ public class TsFileInsertionEventParserProvider {
startTime,
endTime,
pipeTaskMeta,
- entity,
- sourceEvent.isSkipIfNoPrivileges(),
sourceEvent);
}
@@ -132,10 +128,7 @@ public class TsFileInsertionEventParserProvider {
startTime,
endTime,
pipeTaskMeta,
- sourceEvent,
- entity,
- sourceEvent.isSkipIfNoPrivileges(),
- null);
+ sourceEvent);
}
final Map<IDeviceID, Boolean> deviceIsAlignedMap =
@@ -151,8 +144,6 @@ public class TsFileInsertionEventParserProvider {
startTime,
endTime,
pipeTaskMeta,
- entity,
- sourceEvent.isSkipIfNoPrivileges(),
sourceEvent);
}
@@ -170,8 +161,6 @@ public class TsFileInsertionEventParserProvider {
startTime,
endTime,
pipeTaskMeta,
- entity,
- sourceEvent.isSkipIfNoPrivileges(),
sourceEvent)
: new TsFileInsertionEventQueryParser(
pipeName,
@@ -182,8 +171,6 @@ public class TsFileInsertionEventParserProvider {
endTime,
pipeTaskMeta,
sourceEvent,
- entity,
- sourceEvent.isSkipIfNoPrivileges(),
filteredDeviceIsAlignedMap);
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/query/TsFileInsertionEventQueryParser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/query/TsFileInsertionEventQueryParser.java
index b4d5009b758..d61f7a791ca 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/query/TsFileInsertionEventQueryParser.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/query/TsFileInsertionEventQueryParser.java
@@ -19,12 +19,6 @@
package org.apache.iotdb.db.pipe.event.common.tsfile.parser.query;
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.audit.IAuditEntity;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import org.apache.iotdb.commons.exception.IllegalPathException;
-import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.config.PipeConfig;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TreePattern;
@@ -36,10 +30,8 @@ import org.apache.iotdb.db.pipe.resource.PipeDataNodeResourceManager;
import org.apache.iotdb.db.pipe.resource.memory.PipeMemoryBlock;
import org.apache.iotdb.db.pipe.resource.memory.PipeMemoryWeightUtil;
import org.apache.iotdb.db.pipe.resource.tsfile.PipeTsFileResourceManager;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckVisitor;
import org.apache.iotdb.pipe.api.event.dml.insertion.TabletInsertionEvent;
import org.apache.iotdb.pipe.api.exception.PipeException;
-import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -54,7 +46,6 @@ import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -83,8 +74,8 @@ public class TsFileInsertionEventQueryParser extends TsFileInsertionEventParser
final long startTime,
final long endTime,
final PipeInsertionEvent sourceEvent)
- throws IOException, IllegalPathException {
- this(null, 0, tsFile, pattern, startTime, endTime, null, sourceEvent, null, false, null);
+ throws IOException {
+ this(null, 0, tsFile, pattern, startTime, endTime, null, sourceEvent);
}
public TsFileInsertionEventQueryParser(
@@ -95,22 +86,32 @@ public class TsFileInsertionEventQueryParser extends TsFileInsertionEventParser
final long startTime,
final long endTime,
final PipeTaskMeta pipeTaskMeta,
- final PipeInsertionEvent sourceEvent,
- final IAuditEntity entity,
- final boolean skipIfNoPrivileges,
- final Map<IDeviceID, Boolean> deviceIsAlignedMap)
- throws IOException, IllegalPathException {
- super(
+ final PipeInsertionEvent sourceEvent)
+ throws IOException {
+ this(
pipeName,
creationTime,
+ tsFile,
pattern,
- null,
startTime,
endTime,
pipeTaskMeta,
- entity,
- skipIfNoPrivileges,
- sourceEvent);
+ sourceEvent,
+ null);
+ }
+
+ public TsFileInsertionEventQueryParser(
+ final String pipeName,
+ final long creationTime,
+ final File tsFile,
+ final TreePattern pattern,
+ final long startTime,
+ final long endTime,
+ final PipeTaskMeta pipeTaskMeta,
+ final PipeInsertionEvent sourceEvent,
+ final Map<IDeviceID, Boolean> deviceIsAlignedMap)
+ throws IOException {
+ super(pipeName, creationTime, pattern, null, startTime, endTime, pipeTaskMeta, sourceEvent);
try {
final PipeTsFileResourceManager tsFileResourceManager = PipeDataNodeResourceManager.tsfile();
@@ -170,8 +171,7 @@ public class TsFileInsertionEventQueryParser extends TsFileInsertionEventParser
}
private Map<IDeviceID, List<String>> filterDeviceMeasurementsMapByPattern(
- final Map<IDeviceID, List<String>> originalDeviceMeasurementsMap)
- throws IllegalPathException {
+ final Map<IDeviceID, List<String>> originalDeviceMeasurementsMap) {
final Map<IDeviceID, List<String>> filteredDeviceMeasurementsMap = new HashMap<>();
for (Map.Entry<IDeviceID, List<String>> entry : originalDeviceMeasurementsMap.entrySet()) {
final IDeviceID deviceId = entry.getKey();
@@ -193,19 +193,6 @@ public class TsFileInsertionEventQueryParser extends TsFileInsertionEventParser
for (final String measurement : entry.getValue()) {
if (treePattern.matchesMeasurement(deviceId, measurement)) {
- if (Objects.nonNull(entity)) {
- final TSStatus status =
- TreeAccessCheckVisitor.checkTimeSeriesPermission(
- entity,
- Collections.singletonList(new MeasurementPath(deviceId, measurement)),
- PrivilegeType.READ_DATA);
- if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- if (skipIfNoPrivileges) {
- continue;
- }
- throw new AccessDeniedException(status.getMessage());
- }
- }
filteredMeasurements.add(measurement);
}
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/scan/TsFileInsertionEventScanParser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/scan/TsFileInsertionEventScanParser.java
index f89d567c683..47aba940a72 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/scan/TsFileInsertionEventScanParser.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/scan/TsFileInsertionEventScanParser.java
@@ -19,12 +19,6 @@
package org.apache.iotdb.db.pipe.event.common.tsfile.parser.scan;
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.audit.IAuditEntity;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import org.apache.iotdb.commons.exception.IllegalPathException;
-import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.config.PipeConfig;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TreePattern;
@@ -34,10 +28,8 @@ import org.apache.iotdb.db.pipe.event.common.tsfile.parser.TsFileInsertionEventP
import org.apache.iotdb.db.pipe.resource.PipeDataNodeResourceManager;
import org.apache.iotdb.db.pipe.resource.memory.PipeMemoryBlock;
import org.apache.iotdb.db.pipe.resource.memory.PipeMemoryWeightUtil;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckVisitor;
import org.apache.iotdb.pipe.api.event.dml.insertion.TabletInsertionEvent;
import org.apache.iotdb.pipe.api.exception.PipeException;
-import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.tsfile.common.conf.TSFileConfig;
import org.apache.tsfile.common.constant.TsFileConstant;
@@ -63,7 +55,6 @@ import org.apache.tsfile.write.schema.MeasurementSchema;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -105,21 +96,9 @@ public class TsFileInsertionEventScanParser extends TsFileInsertionEventParser {
final long startTime,
final long endTime,
final PipeTaskMeta pipeTaskMeta,
- final IAuditEntity entity,
- final boolean skipIfNoPrivileges,
final PipeInsertionEvent sourceEvent)
- throws IOException, IllegalPathException {
- super(
- pipeName,
- creationTime,
- pattern,
- null,
- startTime,
- endTime,
- pipeTaskMeta,
- entity,
- skipIfNoPrivileges,
- sourceEvent);
+ throws IOException {
+ super(pipeName, creationTime, pattern, null, startTime, endTime, pipeTaskMeta, sourceEvent);
this.startTime = startTime;
this.endTime = endTime;
@@ -152,8 +131,8 @@ public class TsFileInsertionEventScanParser extends TsFileInsertionEventParser {
final long endTime,
final PipeTaskMeta pipeTaskMeta,
final PipeInsertionEvent sourceEvent)
- throws IOException, IllegalPathException {
- this(null, 0, tsFile, pattern, startTime, endTime, pipeTaskMeta, null, false, sourceEvent);
+ throws IOException {
+ this(null, 0, tsFile, pattern, startTime, endTime, pipeTaskMeta, sourceEvent);
}
@Override
@@ -316,7 +295,7 @@ public class TsFileInsertionEventScanParser extends TsFileInsertionEventParser {
}
}
- private void prepareData() throws IOException, IllegalPathException {
+ private void prepareData() throws IOException {
do {
do {
moveToNextChunkReader();
@@ -405,8 +384,7 @@ public class TsFileInsertionEventScanParser extends TsFileInsertionEventParser {
}
}
- private void moveToNextChunkReader()
- throws IOException, IllegalStateException, IllegalPathException {
+ private void moveToNextChunkReader() throws IOException, IllegalStateException {
ChunkHeader chunkHeader;
long valueChunkSize = 0;
final List<Chunk> valueChunkList = new ArrayList<>();
@@ -453,21 +431,6 @@ public class TsFileInsertionEventScanParser extends TsFileInsertionEventParser {
break;
}
- if (Objects.nonNull(entity)) {
- final TSStatus status =
- TreeAccessCheckVisitor.checkTimeSeriesPermission(
- entity,
- Collections.singletonList(
- new MeasurementPath(currentDevice, chunkHeader.getMeasurementID())),
- PrivilegeType.READ_DATA);
- if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- if (skipIfNoPrivileges) {
- continue;
- }
- throw new AccessDeniedException(status.getMessage());
- }
- }
-
if (chunkHeader.getDataSize() > allocatedMemoryBlockForChunk.getMemoryUsageInBytes()) {
PipeDataNodeResourceManager.memory()
.forceResize(allocatedMemoryBlockForChunk, chunkHeader.getDataSize());
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/table/TsFileInsertionEventTableParser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/table/TsFileInsertionEventTableParser.java
index a4995d3039d..7a5d869aa1a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/table/TsFileInsertionEventTableParser.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/table/TsFileInsertionEventTableParser.java
@@ -19,7 +19,7 @@
package org.apache.iotdb.db.pipe.event.common.tsfile.parser.table;
-import org.apache.iotdb.commons.audit.IAuditEntity;
+import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.pipe.agent.task.meta.PipeTaskMeta;
import org.apache.iotdb.commons.pipe.config.PipeConfig;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TablePattern;
@@ -48,6 +48,7 @@ public class TsFileInsertionEventTableParser extends TsFileInsertionEventParser
private final long startTime;
private final long endTime;
private final TablePattern tablePattern;
+ private final String userName;
private final PipeMemoryBlock allocatedMemoryBlockForBatchData;
private final PipeMemoryBlock allocatedMemoryBlockForChunk;
@@ -62,20 +63,10 @@ public class TsFileInsertionEventTableParser extends TsFileInsertionEventParser
final long startTime,
final long endTime,
final PipeTaskMeta pipeTaskMeta,
- final IAuditEntity entity,
+ final String userName,
final PipeInsertionEvent sourceEvent)
throws IOException {
- super(
- pipeName,
- creationTime,
- null,
- pattern,
- startTime,
- endTime,
- pipeTaskMeta,
- entity,
- true,
- sourceEvent);
+ super(pipeName, creationTime, null, pattern, startTime, endTime, pipeTaskMeta, sourceEvent);
try {
long tableSize =
@@ -100,7 +91,7 @@ public class TsFileInsertionEventTableParser extends TsFileInsertionEventParser
this.endTime = endTime;
this.tablePattern = pattern;
- this.entity = entity;
+ this.userName = userName;
tsFileSequenceReader = new TsFileSequenceReader(tsFile.getPath(), true, true);
} catch (final Exception e) {
close();
@@ -114,10 +105,10 @@ public class TsFileInsertionEventTableParser extends TsFileInsertionEventParser
final long startTime,
final long endTime,
final PipeTaskMeta pipeTaskMeta,
- final IAuditEntity entity,
+ final String userName,
final PipeInsertionEvent sourceEvent)
throws IOException {
- this(null, 0, tsFile, pattern, startTime, endTime, pipeTaskMeta, entity, sourceEvent);
+ this(null, 0, tsFile, pattern, startTime, endTime, pipeTaskMeta, userName, sourceEvent);
}
@Override
@@ -160,15 +151,15 @@ public class TsFileInsertionEventTableParser extends TsFileInsertionEventParser
}
private boolean hasTablePrivilege(final String tableName) {
- return Objects.isNull(entity)
+ return Objects.isNull(userName)
|| Objects.isNull(sourceEvent)
|| Objects.isNull(sourceEvent.getTableModelDatabaseName())
|| AuthorityChecker.getAccessControl()
.checkCanSelectFromTable4Pipe(
- entity.getUsername(),
+ userName,
new QualifiedObjectName(
sourceEvent.getTableModelDatabaseName(), tableName),
- entity);
+ new UserEntity(-1, userName, ""));
}
@Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeTableStatementDataTypeConvertExecutionVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeTableStatementDataTypeConvertExecutionVisitor.java
index fa49167b17a..5fb87e550df 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeTableStatementDataTypeConvertExecutionVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeTableStatementDataTypeConvertExecutionVisitor.java
@@ -132,7 +132,7 @@ public class PipeTableStatementDataTypeConvertExecutionVisitor
Long.MIN_VALUE,
Long.MAX_VALUE,
null,
- null,
+ "root",
null)) {
for (final TabletInsertionEvent tabletInsertionEvent : parser.toTabletInsertionEvents()) {
if (!(tabletInsertionEvent instanceof PipeRawTabletInsertionEvent)) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/payload/evolvable/batch/PipeTabletEventTsFileBatch.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/payload/evolvable/batch/PipeTabletEventTsFileBatch.java
index 9c4c2fe4953..275bc694397 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/payload/evolvable/batch/PipeTabletEventTsFileBatch.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/payload/evolvable/batch/PipeTabletEventTsFileBatch.java
@@ -45,8 +45,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicLong;
-import static org.apache.iotdb.db.pipe.event.common.tablet.PipeRawTabletInsertionEvent.isTabletEmpty;
-
public class PipeTabletEventTsFileBatch extends PipeTabletEventBatch {
private static final Logger LOGGER = LoggerFactory.getLogger(PipeTabletEventTsFileBatch.class);
@@ -87,7 +85,7 @@ public class PipeTabletEventTsFileBatch extends PipeTabletEventBatch {
final List<Tablet> tablets = insertNodeTabletInsertionEvent.convertToTablets();
for (int i = 0; i < tablets.size(); ++i) {
final Tablet tablet = tablets.get(i);
- if (isTabletEmpty(tablet)) {
+ if (tablet.getRowSize() == 0) {
continue;
}
if (isTableModel) {
@@ -110,7 +108,7 @@ public class PipeTabletEventTsFileBatch extends PipeTabletEventBatch {
final PipeRawTabletInsertionEvent rawTabletInsertionEvent =
(PipeRawTabletInsertionEvent) event;
final Tablet tablet = rawTabletInsertionEvent.convertToTablet();
- if (isTabletEmpty(tablet)) {
+ if (tablet.getRowSize() == 0) {
return true;
}
if (rawTabletInsertionEvent.isTableModelEvent()) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/legacy/IoTDBLegacyPipeSink.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/legacy/IoTDBLegacyPipeSink.java
index 2cca4779881..b3792bc9320 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/legacy/IoTDBLegacyPipeSink.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/legacy/IoTDBLegacyPipeSink.java
@@ -88,7 +88,6 @@ import static org.apache.iotdb.commons.pipe.config.constant.PipeSinkConstant.SIN
import static org.apache.iotdb.commons.pipe.config.constant.PipeSinkConstant.SINK_IOTDB_SYNC_CONNECTOR_VERSION_KEY;
import static org.apache.iotdb.commons.pipe.config.constant.PipeSinkConstant.SINK_IOTDB_USERNAME_KEY;
import static org.apache.iotdb.commons.pipe.config.constant.PipeSinkConstant.SINK_IOTDB_USER_KEY;
-import static org.apache.iotdb.db.pipe.event.common.tablet.PipeRawTabletInsertionEvent.isTabletEmpty;
@TreeModel
public class IoTDBLegacyPipeSink implements PipeConnector {
@@ -326,7 +325,7 @@ public class IoTDBLegacyPipeSink implements PipeConnector {
final List<Tablet> tablets = pipeInsertNodeInsertionEvent.convertToTablets();
for (int i = 0; i < tablets.size(); ++i) {
final Tablet tablet = tablets.get(i);
- if (Objects.isNull(tablet) || isTabletEmpty(tablet)) {
+ if (Objects.isNull(tablet) || tablet.getRowSize() == 0) {
continue;
}
if (pipeInsertNodeInsertionEvent.isAligned(i)) {
@@ -338,7 +337,7 @@ public class IoTDBLegacyPipeSink implements PipeConnector {
}
private void doTransferWrapper(final PipeRawTabletInsertionEvent pipeRawTabletInsertionEvent)
- throws Exception {
+ throws PipeException, IoTDBConnectionException, StatementExecutionException {
// We increase the reference count for this event to determine if the event may be released.
if (!pipeRawTabletInsertionEvent.increaseReferenceCount(IoTDBLegacyPipeSink.class.getName())) {
return;
@@ -352,7 +351,7 @@ public class IoTDBLegacyPipeSink implements PipeConnector {
}
private void doTransfer(final PipeRawTabletInsertionEvent pipeTabletInsertionEvent)
- throws Exception {
+ throws PipeException, IoTDBConnectionException, StatementExecutionException {
final Tablet tablet = pipeTabletInsertionEvent.convertToTablet();
if (pipeTabletInsertionEvent.isAligned()) {
sessionPool.insertAlignedTablet(tablet);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java
index 53af1bed26a..225616e88fa 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
-import org.apache.iotdb.commons.pipe.resource.log.PipeLogger;
import org.apache.iotdb.commons.utils.StatusUtils;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
import org.apache.iotdb.db.auth.AuthorityChecker;
@@ -62,7 +61,6 @@ import org.apache.iotdb.pipe.api.event.Event;
import org.apache.iotdb.pipe.api.event.dml.insertion.TabletInsertionEvent;
import org.apache.iotdb.pipe.api.exception.PipeException;
import org.apache.iotdb.pipe.api.exception.PipeParameterNotValidException;
-import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.rpc.TSStatusCode;
import com.google.common.util.concurrent.ListenableFuture;
@@ -77,7 +75,6 @@ import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
-import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
import static org.apache.iotdb.commons.pipe.config.constant.PipeSinkConstant.CONNECTOR_IOTDB_CLI_HOSTNAME;
@@ -108,9 +105,10 @@ public class WriteBackSink implements PipeConnector {
// for correctly handling data insertion in IoTDBReceiverAgent#receive method
private static final Coordinator COORDINATOR = Coordinator.getInstance();
private static final SessionManager SESSION_MANAGER = SessionManager.getInstance();
- public static final AtomicLong id = new AtomicLong();
- private InternalClientSession session;
+ private IClientSession session;
+ // Temporary, used to separate
+ private IClientSession treeSession;
private boolean skipIfNoPrivileges;
private boolean useEventUserName;
@@ -138,12 +136,11 @@ public class WriteBackSink implements PipeConnector {
session =
new InternalClientSession(
String.format(
- "%s_%s_%s_%s_%s",
+ "%s_%s_%s_%s",
WriteBackSink.class.getSimpleName(),
environment.getPipeName(),
environment.getCreationTime(),
- environment.getRegionId(),
- id.getAndIncrement()));
+ environment.getRegionId()));
String userIdString =
parameters.getStringOrDefault(
@@ -163,6 +160,19 @@ public class WriteBackSink implements PipeConnector {
session.setClientVersion(IoTDBConstant.ClientVersion.V_1_0);
session.setZoneId(ZoneId.systemDefault());
+ // Temporary
+ treeSession =
+ new InternalClientSession(
+ String.format(
+ "%s_%s_%s_%s_tree",
+ WriteBackSink.class.getSimpleName(),
+ environment.getPipeName(),
+ environment.getCreationTime(),
+ environment.getRegionId()));
+ treeSession.setUsername(AuthorityChecker.SUPER_USER);
+ treeSession.setClientVersion(IoTDBConstant.ClientVersion.V_1_0);
+ treeSession.setZoneId(ZoneId.systemDefault());
+
final String connectorSkipIfValue =
parameters
.getStringOrDefault(
@@ -185,10 +195,6 @@ public class WriteBackSink implements PipeConnector {
parameters.getBooleanOrDefault(
Arrays.asList(CONNECTOR_USE_EVENT_USER_NAME_KEY, SINK_USE_EVENT_USER_NAME_KEY),
CONNECTOR_USE_EVENT_USER_NAME_DEFAULT_VALUE);
-
- if (SESSION_MANAGER.getCurrSession() != null) {
- SESSION_MANAGER.registerSession(session);
- }
}
@Override
@@ -207,7 +213,7 @@ public class WriteBackSink implements PipeConnector {
if (!(tabletInsertionEvent instanceof PipeInsertNodeTabletInsertionEvent)
&& !(tabletInsertionEvent instanceof PipeRawTabletInsertionEvent)) {
LOGGER.warn(
- "WriteBackSink only support "
+ "WriteBackConnector only support "
+ "PipeInsertNodeTabletInsertionEvent and PipeRawTabletInsertionEvent. "
+ "Ignore {}.",
tabletInsertionEvent);
@@ -362,10 +368,12 @@ public class WriteBackSink implements PipeConnector {
@Override
public void close() throws Exception {
- if (session != null && SESSION_MANAGER.getCurrSession() == session) {
- SESSION_MANAGER.removeCurrSession();
+ if (session != null) {
SESSION_MANAGER.closeSession(session, COORDINATOR::cleanupQueryExecution);
}
+ if (treeSession != null) {
+ SESSION_MANAGER.closeSession(treeSession, COORDINATOR::cleanupQueryExecution);
+ }
}
private TSStatus executeStatementForTableModel(
@@ -376,6 +384,7 @@ public class WriteBackSink implements PipeConnector {
if (useEventUserName && userName != null) {
session.setUsername(userName);
}
+ SESSION_MANAGER.registerSession(session);
try {
autoCreateDatabaseIfNecessary(dataBaseName);
return Coordinator.getInstance()
@@ -427,6 +436,7 @@ public class WriteBackSink implements PipeConnector {
// If the exception is not caused by database not set, throw it directly
throw e;
} finally {
+ SESSION_MANAGER.removeCurrSession();
if (useEventUserName) {
session.setUsername(originalUserName);
}
@@ -475,30 +485,19 @@ public class WriteBackSink implements PipeConnector {
}
private TSStatus executeStatementForTreeModel(final Statement statement, final String userName) {
- session.setDatabaseName(null);
- session.setSqlDialect(IClientSession.SqlDialect.TREE);
- final String originalUserName = session.getUsername();
+ treeSession.setDatabaseName(null);
+ treeSession.setSqlDialect(IClientSession.SqlDialect.TREE);
+ final String originalUserName = treeSession.getUsername();
if (useEventUserName && userName != null) {
- session.setUsername(userName);
- }
- final TSStatus permissionCheckStatus = AuthorityChecker.checkAuthority(statement, session);
- if (permissionCheckStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- PipeLogger.log(
- LOGGER::warn,
- "Session {}: Failed to check authority for statement {}, username = {}, response = {}.",
- session.getClientAddress() + ":" + session.getClientPort(),
- statement.getType().name(),
- session.getUsername(),
- permissionCheckStatus);
- return RpcUtils.getStatus(
- permissionCheckStatus.getCode(), permissionCheckStatus.getMessage());
+ treeSession.setUsername(userName);
}
+ SESSION_MANAGER.registerSession(treeSession);
try {
return Coordinator.getInstance()
.executeForTreeModel(
new PipeEnrichedStatement(statement),
SESSION_MANAGER.requestQueryId(),
- SESSION_MANAGER.getSessionInfo(session),
+ SESSION_MANAGER.getSessionInfo(treeSession),
"",
ClusterPartitionFetcher.getInstance(),
ClusterSchemaFetcher.getInstance(),
@@ -506,8 +505,9 @@ public class WriteBackSink implements PipeConnector {
false)
.status;
} finally {
+ SESSION_MANAGER.removeCurrSession();
if (useEventUserName) {
- session.setUsername(originalUserName);
+ treeSession.setUsername(originalUserName);
}
}
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/dataregion/historical/PipeHistoricalDataRegionTsFileAndDeletionSource.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/dataregion/historical/PipeHistoricalDataRegionTsFileAndDeletionSource.java
index 09fcabaa62b..868bb035c5f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/dataregion/historical/PipeHistoricalDataRegionTsFileAndDeletionSource.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/dataregion/historical/PipeHistoricalDataRegionTsFileAndDeletionSource.java
@@ -374,11 +374,8 @@ public class PipeHistoricalDataRegionTsFileAndDeletionSource
}
userId =
- parameters.getStringOrDefault(
- Arrays.asList(
- PipeSourceConstant.EXTRACTOR_IOTDB_USER_ID,
- PipeSourceConstant.SOURCE_IOTDB_USER_ID),
- "-1");
+ parameters.getStringByKeys(
+ PipeSourceConstant.EXTRACTOR_IOTDB_USER_ID, PipeSourceConstant.SOURCE_IOTDB_USER_ID);
userName =
parameters.getStringByKeys(
PipeSourceConstant.EXTRACTOR_IOTDB_USER_KEY,
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/dataregion/realtime/matcher/CachedSchemaPatternMatcher.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/dataregion/realtime/matcher/CachedSchemaPatternMatcher.java
index 284c2d9f396..6e675ed0fdd 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/dataregion/realtime/matcher/CachedSchemaPatternMatcher.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/dataregion/realtime/matcher/CachedSchemaPatternMatcher.java
@@ -175,13 +175,7 @@ public class CachedSchemaPatternMatcher implements PipeDataRegionMatcher {
}
if (event.getEvent() instanceof PipeTsFileInsertionEvent) {
- final PipeTsFileInsertionEvent tsFileInsertionEvent =
- (PipeTsFileInsertionEvent) event.getEvent();
- if (tsFileInsertionEvent.isTableModelEvent()) {
- tsFileInsertionEvent.setTableNames(tableNames);
- } else {
- tsFileInsertionEvent.setTreeSchemaMap(event.getSchemaInfo());
- }
+ ((PipeTsFileInsertionEvent) event.getEvent()).setTableNames(tableNames);
}
return new Pair<>(matchedSources, findUnmatchedSources(matchedSources));
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/IoTDBSchemaRegionSource.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/IoTDBSchemaRegionSource.java
index d40a3c456cc..6dbb8e1110b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/IoTDBSchemaRegionSource.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/IoTDBSchemaRegionSource.java
@@ -73,8 +73,6 @@ public class IoTDBSchemaRegionSource extends IoTDBNonDataRegionSource {
private static final PipeStatementToPlanVisitor STATEMENT_TO_PLAN_VISITOR =
new PipeStatementToPlanVisitor();
- // Local for exception
- private PipePlanTreePrivilegeParseVisitor treePrivilegeParseVisitor;
private SchemaRegionId schemaRegionId;
private Set<PlanNodeType> listenedTypeSet = new HashSet<>();
@@ -98,7 +96,6 @@ public class IoTDBSchemaRegionSource extends IoTDBNonDataRegionSource {
schemaRegionId = new SchemaRegionId(regionId);
listenedTypeSet = SchemaRegionListeningFilter.parseListeningPlanTypeSet(parameters);
- treePrivilegeParseVisitor = new PipePlanTreePrivilegeParseVisitor(skipIfNoPrivileges);
PipeSchemaRegionSourceMetrics.getInstance().register(this);
PipeDataNodeSinglePipeMetrics.getInstance().register(this);
@@ -201,9 +198,8 @@ public class IoTDBSchemaRegionSource extends IoTDBNonDataRegionSource {
protected Optional<PipeWritePlanEvent> trimRealtimeEventByPrivilege(
final PipeWritePlanEvent event) throws AccessDeniedException {
final Optional<PlanNode> result =
- treePrivilegeParseVisitor
- .process(((PipeSchemaRegionWritePlanEvent) event).getPlanNode(), userEntity)
- .flatMap(planNode -> TABLE_PRIVILEGE_PARSE_VISITOR.process(planNode, userEntity));
+ TABLE_PRIVILEGE_PARSE_VISITOR.process(
+ ((PipeSchemaRegionWritePlanEvent) event).getPlanNode(), userEntity);
if (result.isPresent()) {
return Optional.of(
new PipeSchemaRegionWritePlanEvent(result.get(), event.isGeneratedByPipe()));
@@ -224,7 +220,7 @@ public class IoTDBSchemaRegionSource extends IoTDBNonDataRegionSource {
.flatMap(
planNode ->
TABLE_PATTERN_PARSE_VISITOR
- .process(planNode, tablePattern)
+ .process(((PipeSchemaRegionWritePlanEvent) event).getPlanNode(), tablePattern)
.map(
planNode1 ->
new PipeSchemaRegionWritePlanEvent(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/PipePlanTreePrivilegeParseVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/PipePlanTreePrivilegeParseVisitor.java
deleted file mode 100644
index 260f6bd1d37..00000000000
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/source/schemaregion/PipePlanTreePrivilegeParseVisitor.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.pipe.source.schemaregion;
-
-import org.apache.iotdb.commons.audit.IAuditEntity;
-import org.apache.iotdb.commons.audit.UserEntity;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
-import org.apache.iotdb.commons.path.MeasurementPath;
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.pipe.datastructure.pattern.IoTDBTreePattern;
-import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.ActivateTemplateNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.AlterTimeSeriesNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.BatchActivateTemplateNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.CreateAlignedTimeSeriesNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.CreateMultiTimeSeriesNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.CreateTimeSeriesNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.InternalBatchActivateTemplateNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.InternalCreateMultiTimeSeriesNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.InternalCreateTimeSeriesNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.MeasurementGroup;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.view.AlterLogicalViewNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.view.CreateLogicalViewNode;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.DeleteDataNode;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckContext;
-import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckVisitor;
-import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ActivateTemplateStatement;
-import org.apache.iotdb.rpc.TSStatusCode;
-
-import org.apache.tsfile.utils.Pair;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-
-public class PipePlanTreePrivilegeParseVisitor
- extends PlanVisitor<Optional<PlanNode>, IAuditEntity> {
-
- private final boolean skip;
-
- public PipePlanTreePrivilegeParseVisitor(final boolean skip) {
- this.skip = skip;
- }
-
- @Override
- public Optional<PlanNode> visitPlan(final PlanNode node, final IAuditEntity context) {
- return Optional.of(node);
- }
-
- @Override
- public Optional<PlanNode> visitCreateTimeSeries(
- final CreateTimeSeriesNode node, final IAuditEntity auditEntity) {
- return TreeAccessCheckVisitor.checkTimeSeriesPermission(
- auditEntity,
- Collections.singletonList(node.getPath()),
- PrivilegeType.READ_SCHEMA)
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode()
- ? Optional.of(node)
- : Optional.empty();
- }
-
- @Override
- public Optional<PlanNode> visitCreateAlignedTimeSeries(
- final CreateAlignedTimeSeriesNode node, final IAuditEntity auditEntity) {
- final List<Integer> failedIndexes =
- TreeAccessCheckVisitor.checkTimeSeriesPermission4Pipe(
- auditEntity,
- node.getMeasurements().stream()
- .map(measurement -> node.getDevicePath().concatAsMeasurementPath(measurement))
- .collect(Collectors.toList()),
- PrivilegeType.READ_SCHEMA);
- if (!skip && !failedIndexes.isEmpty()) {
- throw new AccessDeniedException("Not has privilege to transfer plan: " + node);
- }
- return failedIndexes.size() != node.getMeasurements().size()
- ? Optional.of(
- new CreateAlignedTimeSeriesNode(
- node.getPlanNodeId(),
- node.getDevicePath(),
- IoTDBTreePattern.applyReversedIndexesOnList(failedIndexes, node.getMeasurements()),
- IoTDBTreePattern.applyReversedIndexesOnList(failedIndexes, node.getDataTypes()),
- IoTDBTreePattern.applyReversedIndexesOnList(failedIndexes, node.getEncodings()),
- IoTDBTreePattern.applyReversedIndexesOnList(failedIndexes, node.getCompressors()),
- IoTDBTreePattern.applyReversedIndexesOnList(failedIndexes, node.getAliasList()),
- IoTDBTreePattern.applyReversedIndexesOnList(failedIndexes, node.getTagsList()),
- IoTDBTreePattern.applyReversedIndexesOnList(
- failedIndexes, node.getAttributesList())))
- : Optional.empty();
- }
-
- @Override
- public Optional<PlanNode> visitCreateMultiTimeSeries(
- final CreateMultiTimeSeriesNode node, final IAuditEntity auditEntity) {
- final Map<PartialPath, MeasurementGroup> filteredMeasurementGroupMap =
- node.getMeasurementGroupMap().entrySet().stream()
- .map(
- entry ->
- new Pair<>(
- entry.getKey(),
- trimMeasurementGroup(entry.getKey(), entry.getValue(), auditEntity, node)))
- .filter(pair -> Objects.nonNull(pair.getRight()))
- .collect(Collectors.toMap(Pair::getLeft, Pair::getRight));
- return !filteredMeasurementGroupMap.isEmpty()
- ? Optional.of(
- new CreateMultiTimeSeriesNode(node.getPlanNodeId(), filteredMeasurementGroupMap))
- : Optional.empty();
- }
-
- private MeasurementGroup trimMeasurementGroup(
- final PartialPath device,
- final MeasurementGroup group,
- final IAuditEntity entity,
- final PlanNode node) {
- final Set<Integer> failedIndexes =
- new HashSet<>(
- TreeAccessCheckVisitor.checkTimeSeriesPermission4Pipe(
- entity,
- group.getMeasurements().stream()
- .map(device::concatAsMeasurementPath)
- .collect(Collectors.toList()),
- PrivilegeType.READ_SCHEMA));
- if (!skip && !failedIndexes.isEmpty()) {
- throw new AccessDeniedException("Not has privilege to transfer plan: " + node);
- }
- if (failedIndexes.size() == group.size()) {
- return null;
- }
- final MeasurementGroup targetMeasurementGroup = new MeasurementGroup();
- IntStream.range(0, group.size())
- .filter(index -> !failedIndexes.contains(index))
- .forEach(
- index -> {
- targetMeasurementGroup.addMeasurement(
- group.getMeasurements().get(index),
- group.getDataTypes().get(index),
- group.getEncodings().get(index),
- group.getCompressors().get(index));
- if (Objects.nonNull(group.getTagsList())) {
- targetMeasurementGroup.addTags(group.getTagsList().get(index));
- }
- if (Objects.nonNull(group.getAttributesList())) {
- targetMeasurementGroup.addAttributes(group.getAttributesList().get(index));
- }
- if (Objects.nonNull(group.getAliasList())) {
- targetMeasurementGroup.addAlias(group.getAliasList().get(index));
- }
- if (Objects.nonNull(group.getPropsList())) {
- targetMeasurementGroup.addProps(group.getPropsList().get(index));
- }
- });
- return targetMeasurementGroup;
- }
-
- @Override
- public Optional<PlanNode> visitAlterTimeSeries(
- final AlterTimeSeriesNode node, final IAuditEntity auditEntity) {
- return TreeAccessCheckVisitor.checkTimeSeriesPermission(
- auditEntity,
- Collections.singletonList(node.getPath()),
- PrivilegeType.READ_SCHEMA)
- .getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode()
- ? Optional.of(node)
- : Optional.empty();
- }
-
- @Override
- public Optional<PlanNode> visitInternalCreateTimeSeries(
- final InternalCreateTimeSeriesNode node, final IAuditEntity auditEntity) {
- final MeasurementGroup group =
- trimMeasurementGroup(node.getDevicePath(), node.getMeasurementGroup(), auditEntity, node);
- return Objects.nonNull(group)
- ? Optional.of(
- new InternalCreateTimeSeriesNode(
- node.getPlanNodeId(), node.getDevicePath(), group, node.isAligned()))
- : Optional.empty();
- }
-
- @Override
- public Optional<PlanNode> visitActivateTemplate(
- final ActivateTemplateNode node, final IAuditEntity auditEntity) {
- final List<Integer> failedPos =
- TreeAccessCheckVisitor.checkTimeSeriesPermission4Pipe(
- auditEntity,
- ActivateTemplateStatement.getPaths(node.getActivatePath()),
- PrivilegeType.READ_SCHEMA);
- if (!failedPos.isEmpty()) {
- if (!skip) {
- throw new AccessDeniedException("Not has privilege to transfer plan: " + node);
- }
- return Optional.empty();
- }
- return Optional.of(node);
- }
-
- @Override
- public Optional<PlanNode> visitInternalBatchActivateTemplate(
- final InternalBatchActivateTemplateNode node, final IAuditEntity auditEntity) {
- final Map<PartialPath, Pair<Integer, Integer>> filteredMap = new HashMap<>();
- for (final Map.Entry<PartialPath, Pair<Integer, Integer>> pathEntry :
- node.getTemplateActivationMap().entrySet()) {
- final List<Integer> failedIndexes =
- TreeAccessCheckVisitor.checkTimeSeriesPermission4Pipe(
- auditEntity,
- ActivateTemplateStatement.getPaths(pathEntry.getKey()),
- PrivilegeType.READ_SCHEMA);
- if (failedIndexes.isEmpty()) {
- filteredMap.put(pathEntry.getKey(), pathEntry.getValue());
- } else if (!skip) {
- throw new AccessDeniedException("Not has privilege to transfer plan: " + node);
- }
- }
- return !filteredMap.isEmpty()
- ? Optional.of(new InternalBatchActivateTemplateNode(node.getPlanNodeId(), filteredMap))
- : Optional.empty();
- }
-
- @Override
- public Optional<PlanNode> visitInternalCreateMultiTimeSeries(
- final InternalCreateMultiTimeSeriesNode node, final IAuditEntity auditEntity) {
- final Map<PartialPath, Pair<Boolean, MeasurementGroup>> filteredDeviceMap =
- node.getDeviceMap().entrySet().stream()
- .map(
- entry ->
- new Pair<>(
- entry.getKey(),
- new Pair<>(
- entry.getValue().getLeft(),
- trimMeasurementGroup(
- entry.getKey(), entry.getValue().getRight(), auditEntity, node))))
- .filter(pair -> Objects.nonNull(pair.getRight().getRight()))
- .collect(Collectors.toMap(Pair::getLeft, Pair::getRight));
- return !filteredDeviceMap.isEmpty()
- ? Optional.of(
- new InternalCreateMultiTimeSeriesNode(node.getPlanNodeId(), filteredDeviceMap))
- : Optional.empty();
- }
-
- @Override
- public Optional<PlanNode> visitBatchActivateTemplate(
- final BatchActivateTemplateNode node, final IAuditEntity auditEntity) {
- final Map<PartialPath, Pair<Integer, Integer>> filteredMap = new HashMap<>();
- for (final Map.Entry<PartialPath, Pair<Integer, Integer>> pathEntry :
- node.getTemplateActivationMap().entrySet()) {
- final List<Integer> failedIndexes =
- TreeAccessCheckVisitor.checkTimeSeriesPermission4Pipe(
- auditEntity,
- ActivateTemplateStatement.getPaths(pathEntry.getKey()),
- PrivilegeType.READ_SCHEMA);
- if (failedIndexes.isEmpty()) {
- filteredMap.put(pathEntry.getKey(), pathEntry.getValue());
- } else if (!skip) {
- throw new AccessDeniedException("Not has privilege to transfer plan: " + node);
- }
- }
- return !filteredMap.isEmpty()
- ? Optional.of(new BatchActivateTemplateNode(node.getPlanNodeId(), filteredMap))
- : Optional.empty();
- }
-
- @Override
- public Optional<PlanNode> visitCreateLogicalView(
- final CreateLogicalViewNode node, final IAuditEntity auditEntity) {
- final Map<PartialPath, ViewExpression> filteredMap =
- new HashMap<>(node.getViewPathToSourceExpressionMap());
- final List<PartialPath> viewPathList = node.getViewPathList();
- final List<Integer> failedIndexes =
- TreeAccessCheckVisitor.checkTimeSeriesPermission4Pipe(
- auditEntity, viewPathList, PrivilegeType.READ_SCHEMA);
- if (!skip && !failedIndexes.isEmpty()) {
- throw new AccessDeniedException("Not has privilege to transfer plan: " + node);
- }
- failedIndexes.forEach(index -> filteredMap.remove(viewPathList.get(index)));
- return !filteredMap.isEmpty()
- ? Optional.of(new CreateLogicalViewNode(node.getPlanNodeId(), filteredMap))
- : Optional.empty();
- }
-
- @Override
- public Optional<PlanNode> visitAlterLogicalView(
- final AlterLogicalViewNode node, final IAuditEntity auditEntity) {
- final Map<PartialPath, ViewExpression> filteredMap =
- new HashMap<>(node.getViewPathToSourceMap());
- final List<PartialPath> viewPathList = new ArrayList<>(node.getViewPathToSourceMap().keySet());
- final List<Integer> failedIndexes =
- TreeAccessCheckVisitor.checkTimeSeriesPermission4Pipe(
- auditEntity, viewPathList, PrivilegeType.READ_SCHEMA);
- if (!skip && !failedIndexes.isEmpty()) {
- throw new AccessDeniedException("Not has privilege to transfer plan: " + node);
- }
- failedIndexes.forEach(index -> filteredMap.remove(viewPathList.get(index)));
- return !filteredMap.isEmpty()
- ? Optional.of(new AlterLogicalViewNode(node.getPlanNodeId(), filteredMap))
- : Optional.empty();
- }
-
- @Override
- public Optional<PlanNode> visitDeleteData(
- final DeleteDataNode node, final IAuditEntity auditEntity) {
- final List<MeasurementPath> intersectedPaths =
- TreeAccessCheckVisitor.getIntersectedPaths4Pipe(
- node.getPathList(), new TreeAccessCheckContext((UserEntity) auditEntity));
- if (!skip && !intersectedPaths.equals(node.getPathList())) {
- throw new AccessDeniedException("Not has privilege to transfer plan: " + node);
- }
- return !intersectedPaths.isEmpty()
- ? Optional.of(
- new DeleteDataNode(
- node.getPlanNodeId(),
- intersectedPaths,
- node.getDeleteStartTime(),
- node.getDeleteEndTime()))
- : Optional.empty();
- }
-}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
index 3cf9c5d33db..992b92264ee 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
@@ -21,9 +21,11 @@ package org.apache.iotdb.db.protocol.session;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.audit.UserEntity;
+import org.apache.iotdb.commons.auth.entity.User;
import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.exception.IoTDBRuntimeException;
+import org.apache.iotdb.commons.pipe.config.constant.SystemConstant;
import org.apache.iotdb.commons.service.JMXService;
import org.apache.iotdb.commons.service.ServiceType;
import org.apache.iotdb.commons.service.metric.MetricService;
@@ -31,7 +33,7 @@ import org.apache.iotdb.commons.service.metric.enums.Metric;
import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.commons.utils.AuthUtils;
import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
-import org.apache.iotdb.db.audit.DNAuditLogger;
+import org.apache.iotdb.db.audit.AuditLogger;
import org.apache.iotdb.db.auth.AuthorityChecker;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.protocol.basic.BasicOpenSessionResp;
@@ -44,6 +46,8 @@ import org.apache.iotdb.db.queryengine.plan.execution.ExecutionResult;
import org.apache.iotdb.db.queryengine.plan.execution.IQueryExecution;
import org.apache.iotdb.db.queryengine.plan.parser.StatementGenerator;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
+import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.AuthorStatement;
import org.apache.iotdb.db.storageengine.dataregion.read.control.QueryResourceManager;
import org.apache.iotdb.db.utils.DataNodeAuthUtils;
import org.apache.iotdb.metrics.utils.MetricLevel;
@@ -96,9 +100,14 @@ public class SessionManager implements SessionManagerMBean {
// The statementId is unique in one IoTDB instance.
private final AtomicLong statementIdGenerator = new AtomicLong();
+ private static final AuthorStatement AUTHOR_STATEMENT = new AuthorStatement(StatementType.AUTHOR);
+
public static final TSProtocolVersion CURRENT_RPC_VERSION =
TSProtocolVersion.IOTDB_SERVICE_PROTOCOL_V3;
+ private static final boolean ENABLE_AUDIT_LOG =
+ IoTDBDescriptor.getInstance().getConfig().isEnableAuditLog();
+
protected SessionManager() {
// singleton
String mbeanName =
@@ -144,7 +153,7 @@ public class SessionManager implements SessionManagerMBean {
lastDataQueryReq.setSessionId(0);
lastDataQueryReq.setPaths(
Collections.singletonList(
- DNAuditLogger.PREFIX_PASSWORD_HISTORY + ".`_" + username + "`.password"));
+ SystemConstant.PREFIX_PASSWORD_HISTORY + ".`_" + username + "`.password"));
long queryId = -1;
try {
@@ -248,7 +257,8 @@ public class SessionManager implements SessionManagerMBean {
.setCode(TSStatusCode.INCOMPATIBLE_VERSION.getStatusCode())
.setMessage("The version is incompatible, please upgrade to " + IoTDBConstant.VERSION);
} else {
- long userId = AuthorityChecker.getUserId(username).orElse(-1L);
+ User user = AuthorityChecker.getUser(username);
+ long userId = user == null ? -1 : user.getUserId();
session.setSqlDialect(sqlDialect);
supplySession(session, userId, username, ZoneId.of(zoneId), clientVersion);
String logInMessage = "Login successfully";
@@ -298,8 +308,20 @@ public class SessionManager implements SessionManagerMBean {
openSessionResp.getMessage(),
username,
session);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "%s: Login status: %s. User : %s, opens Session-%s",
+ IoTDBConstant.GLOBAL_DB_NAME, openSessionResp.getMessage(), username, session),
+ AUTHOR_STATEMENT);
+ }
}
} else {
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format("User %s opens Session failed with an incorrect password", username),
+ AUTHOR_STATEMENT);
+ }
openSessionResp.sessionId(-1).setMessage(loginStatus.message).setCode(loginStatus.code);
}
@@ -316,7 +338,21 @@ public class SessionManager implements SessionManagerMBean {
String.valueOf(session.getId()));
// TODO we only need to do so when query is killed by time out close the socket.
IClientSession session1 = currSession.get();
- return session1 == null || session == session1;
+ if (session1 != null && session != session1) {
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "The client-%s is trying to close another session %s, pls check if it's a bug",
+ session, session1),
+ AUTHOR_STATEMENT);
+ }
+ return false;
+ } else {
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(String.format("Session-%s is closing", session), AUTHOR_STATEMENT);
+ }
+ return true;
+ }
}
private void releaseSessionResource(IClientSession session, LongConsumer releaseQueryResource) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index fb7a0813002..5308838e251 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -44,6 +44,7 @@ import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.commons.utils.TimePartitionUtils;
+import org.apache.iotdb.db.audit.AuditLogger;
import org.apache.iotdb.db.auth.AuthorityChecker;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -250,6 +251,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
private static final TSProtocolVersion CURRENT_RPC_VERSION =
TSProtocolVersion.IOTDB_SERVICE_PROTOCOL_V3;
+ private static final boolean ENABLE_AUDIT_LOG = config.isEnableAuditLog();
+
private final IPartitionFetcher partitionFetcher;
private final ISchemaFetcher schemaFetcher;
@@ -355,6 +358,9 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
DataNodeThrottleQuotaManager.getInstance()
.checkQuota(SESSION_MANAGER.getCurrSession().getUsername(), s);
statementType = s.getType();
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(statement, s);
+ }
queryId = SESSION_MANAGER.requestQueryId(clientSession, req.statementId);
@@ -530,6 +536,9 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
DataNodeThrottleQuotaManager.getInstance()
.checkQuota(SESSION_MANAGER.getCurrSession().getUsername(), s);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(String.format("execute Raw Data Query: %s", req), s);
+ }
queryId = SESSION_MANAGER.requestQueryId(clientSession, req.statementId);
// create and cache dataset
ExecutionResult result =
@@ -619,6 +628,9 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
DataNodeThrottleQuotaManager.getInstance()
.checkQuota(SESSION_MANAGER.getCurrSession().getUsername(), s);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(String.format("Last Data Query: %s", req), s);
+ }
queryId = SESSION_MANAGER.requestQueryId(clientSession, req.statementId);
// create and cache dataset
ExecutionResult result =
@@ -1154,6 +1166,9 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
DataNodeThrottleQuotaManager.getInstance()
.checkQuota(SESSION_MANAGER.getCurrSession().getUsername(), s);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(String.format("Last Data Query: %s", req), s);
+ }
// create and cache dataset
ExecutionResult result =
COORDINATOR.executeForTreeModel(
@@ -1539,6 +1554,9 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: Create SetStorageGroupStatement
DatabaseSchemaStatement statement = StatementGenerator.createStatement(storageGroup);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(String.format("create database %s", storageGroup), statement);
+ }
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -1577,6 +1595,9 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
req.setMeasurementAlias(PathUtils.checkAndReturnSingleMeasurement(req.getMeasurementAlias()));
// Step 1: transfer from TSCreateTimeseriesReq to Statement
CreateTimeSeriesStatement statement = StatementGenerator.createStatement(req);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(String.format("create timeseries %s", req.getPath()), statement);
+ }
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -1621,6 +1642,12 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: transfer from CreateAlignedTimeSeriesReq to Statement
CreateAlignedTimeSeriesStatement statement = StatementGenerator.createStatement(req);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "create aligned timeseries %s.%s", req.getPrefixPath(), req.getMeasurements()),
+ statement);
+ }
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -1665,6 +1692,13 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: transfer from CreateMultiTimeSeriesReq to Statement
CreateMultiTimeSeriesStatement statement = StatementGenerator.createStatement(req);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "create %s timeseries, the first is %s",
+ req.getPaths().size(), req.getPaths().get(0)),
+ statement);
+ }
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -1744,6 +1778,10 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: transfer from DeleteStorageGroupsReq to Statement
DeleteDatabaseStatement statement = StatementGenerator.createStatement(storageGroups);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(String.format("delete databases: %s", storageGroups), statement);
+ }
+
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -1834,6 +1872,10 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
DataNodeThrottleQuotaManager.getInstance()
.checkQuota(SESSION_MANAGER.getCurrSession().getUsername(), s);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(statement, s);
+ }
+
queryId = SESSION_MANAGER.requestQueryId();
type = s.getType() == null ? null : s.getType().name();
// create and cache dataset
@@ -2014,6 +2056,15 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS);
}
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "insertRecords, first device %s, first time %s",
+ req.prefixPaths.get(0), req.getTimestamps().get(0)),
+ statement,
+ true);
+ }
+
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -2074,6 +2125,15 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS);
}
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "insertRecords, first device %s, first time %s",
+ req.prefixPath, req.getTimestamps().get(0)),
+ statement,
+ true);
+ }
+
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -2136,6 +2196,14 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS);
}
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "insertRecords, first device %s, first time %s",
+ req.prefixPath, req.getTimestamps().get(0)),
+ statement,
+ true);
+ }
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -2200,6 +2268,14 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS);
}
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "insertRecord, device %s, time %s", req.getPrefixPath(), req.getTimestamp()),
+ statement,
+ true);
+ }
+
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -2403,6 +2479,15 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS);
}
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "insertRecords, first device %s, first time %s",
+ req.prefixPaths.get(0), req.getTimestamps().get(0)),
+ statement,
+ true);
+ }
+
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -2553,6 +2638,9 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: transfer from TSCreateSchemaTemplateReq to Statement
CreateSchemaTemplateStatement statement = StatementGenerator.createStatement(req);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(String.format("create device template %s", req.getName()), statement);
+ }
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -2727,6 +2815,9 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
DataNodeThrottleQuotaManager.getInstance()
.checkQuota(SESSION_MANAGER.getCurrSession().getUsername(), statement);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(String.format("execute Query: %s", statement), statement);
+ }
long queryId = SESSION_MANAGER.requestQueryId();
// create and cache dataset
ExecutionResult executionResult =
@@ -2795,6 +2886,12 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: transfer from TSCreateSchemaTemplateReq to Statement
SetSchemaTemplateStatement statement = StatementGenerator.createStatement(req);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format("set device template %s.%s", req.getTemplateName(), req.getPrefixPath()),
+ statement);
+ }
+
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -2836,6 +2933,13 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: transfer from TSCreateSchemaTemplateReq to Statement
UnsetSchemaTemplateStatement statement = StatementGenerator.createStatement(req);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "unset device template %s from %s", req.getTemplateName(), req.getPrefixPath()),
+ statement);
+ }
+
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -2877,6 +2981,10 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
// Step 1: transfer from TSCreateSchemaTemplateReq to Statement
DropSchemaTemplateStatement statement = StatementGenerator.createStatement(req);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(String.format("drop device template %s", req.getTemplateName()), statement);
+ }
+
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -2916,6 +3024,11 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
BatchActivateTemplateStatement statement =
StatementGenerator.createBatchActivateTemplateStatement(req.getDevicePathList());
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format("batch activate device template %s", req.getDevicePathList()), statement);
+ }
+
// permission check
TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -3006,6 +3119,14 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
final InsertRowStatement statement = StatementGenerator.createStatement(req);
+ if (ENABLE_AUDIT_LOG) {
+ AuditLogger.log(
+ String.format(
+ "insertStringRecord, device %s, time %s", req.getPrefixPath(), req.getTimestamp()),
+ statement,
+ true);
+ }
+
// Permission check
final TSStatus status = AuthorityChecker.checkAuthority(statement, clientSession);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
index 433497657e7..b5b6d919d5e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -2994,8 +2994,8 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface
public TSStatus writeAuditLog(TAuditLogReq req) {
AuditLogFields fields =
new AuditLogFields(
- req.getUserId(),
req.getUsername(),
+ req.getUserId(),
req.getCliHostname(),
AuditEventType.valueOf(req.getAuditEventType()),
AuditLogOperation.valueOf(req.getOperationType()),
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 27a1beba195..0c0311bc105 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
@@ -38,9 +38,7 @@ import org.apache.iotdb.db.queryengine.statistics.QueryPlanStatistics;
import org.apache.tsfile.read.filter.basic.Filter;
import java.time.ZoneId;
-import java.util.Collections;
import java.util.HashSet;
-import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -441,9 +439,7 @@ public class MPPQueryContext implements IAuditEntity {
private AuditLogOperation auditLogOperation;
- private List<PrivilegeType> privilegeTypeList;
-
- private String databaseName;
+ private PrivilegeType privilegeType;
private boolean result;
@@ -485,24 +481,13 @@ public class MPPQueryContext implements IAuditEntity {
}
@Override
- public List<PrivilegeType> getPrivilegeTypes() {
- return privilegeTypeList;
- }
-
- @Override
- public String getPrivilegeTypeString() {
- return privilegeTypeList.toString();
+ public PrivilegeType getPrivilegeType() {
+ return privilegeType;
}
@Override
public IAuditEntity setPrivilegeType(PrivilegeType privilegeType) {
- this.privilegeTypeList = Collections.singletonList(privilegeType);
- return this;
- }
-
- @Override
- public IAuditEntity setPrivilegeTypes(List<PrivilegeType> privilegeTypes) {
- this.privilegeTypeList = privilegeTypes;
+ this.privilegeType = privilegeType;
return this;
}
@@ -519,12 +504,12 @@ public class MPPQueryContext implements IAuditEntity {
@Override
public String getDatabase() {
- return databaseName;
+ return session.getDatabaseName().orElse("");
}
@Override
public IAuditEntity setDatabase(String database) {
- this.databaseName = database;
+ // Do nothing
return this;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ClusterSchemaTree.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ClusterSchemaTree.java
index 54a7f6fc8c7..05932e78b95 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ClusterSchemaTree.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ClusterSchemaTree.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.db.queryengine.common.schematree;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.commons.utils.TestOnly;
@@ -37,6 +36,7 @@ import org.apache.iotdb.db.queryengine.common.schematree.visitor.SchemaTreeVisit
import org.apache.iotdb.db.queryengine.common.schematree.visitor.SchemaTreeVisitorWithLimitOffsetWrapper;
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaComputation;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.utils.Pair;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ISchemaTree.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ISchemaTree.java
index 5b18b0474b6..543991a6ff7 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ISchemaTree.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ISchemaTree.java
@@ -21,8 +21,8 @@ package org.apache.iotdb.db.queryengine.common.schematree;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.utils.TestOnly;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.utils.Accountable;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/visitor/SchemaTreeVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/visitor/SchemaTreeVisitor.java
index d05d1a1ff2a..f1649223117 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/visitor/SchemaTreeVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/visitor/SchemaTreeVisitor.java
@@ -21,10 +21,10 @@ package org.apache.iotdb.db.queryengine.common.schematree.visitor;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.tree.AbstractTreeVisitor;
import org.apache.iotdb.db.queryengine.common.schematree.node.SchemaMeasurementNode;
import org.apache.iotdb.db.queryengine.common.schematree.node.SchemaNode;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.write.schema.IMeasurementSchema;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/visitor/SchemaTreeVisitorWithLimitOffsetWrapper.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/visitor/SchemaTreeVisitorWithLimitOffsetWrapper.java
index 208b63a62ae..575a0062399 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/visitor/SchemaTreeVisitorWithLimitOffsetWrapper.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/visitor/SchemaTreeVisitorWithLimitOffsetWrapper.java
@@ -19,8 +19,8 @@
package org.apache.iotdb.db.queryengine.common.schematree.visitor;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.common.schematree.node.SchemaNode;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.ArrayList;
import java.util.List;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
index 06bd028efe7..60dda197578 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
@@ -27,7 +27,6 @@ import org.apache.iotdb.commons.consensus.SchemaRegionId;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.service.metric.PerformanceOverviewMetrics;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.consensus.ConsensusFactory;
@@ -74,6 +73,7 @@ import org.apache.iotdb.db.queryengine.plan.relational.planner.node.schema.Table
import org.apache.iotdb.db.schemaengine.SchemaEngine;
import org.apache.iotdb.db.schemaengine.schemaregion.ISchemaRegion;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.trigger.executor.TriggerFireResult;
import org.apache.iotdb.db.trigger.executor.TriggerFireVisitor;
import org.apache.iotdb.rpc.RpcUtils;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaFetchScanOperator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaFetchScanOperator.java
index b2ed81a71ae..9a8dbf9f21b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaFetchScanOperator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaFetchScanOperator.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.exception.runtime.SchemaExecutionException;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.SchemaConstant;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.queryengine.common.schematree.ClusterSchemaTree;
import org.apache.iotdb.db.queryengine.common.schematree.node.SchemaNode;
@@ -32,6 +31,7 @@ import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
import org.apache.iotdb.db.queryengine.execution.operator.source.SourceOperator;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
import org.apache.iotdb.db.schemaengine.schemaregion.ISchemaRegion;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.common.conf.TSFileDescriptor;
import org.apache.tsfile.read.common.block.TsBlock;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/SchemaSourceFactory.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/SchemaSourceFactory.java
index 2ef0ab9e18a..f25005815ef 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/SchemaSourceFactory.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/SchemaSourceFactory.java
@@ -25,10 +25,10 @@ import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.IDeviceSchemaInfo;
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.INodeSchemaInfo;
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.ITimeSeriesSchemaInfo;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.List;
import java.util.Map;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/TimeSeriesSchemaSource.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/TimeSeriesSchemaSource.java
index 40799c548ee..5c13c958c02 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/TimeSeriesSchemaSource.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/TimeSeriesSchemaSource.java
@@ -27,13 +27,13 @@ import org.apache.iotdb.commons.schema.SchemaConstant;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.ViewType;
import org.apache.iotdb.db.schemaengine.schemaregion.ISchemaRegion;
import org.apache.iotdb.db.schemaengine.schemaregion.read.req.SchemaRegionReadPlanFactory;
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.ITimeSeriesSchemaInfo;
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.reader.ISchemaReader;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.MetaUtils;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.read.common.block.TsBlockBuilder;
import org.apache.tsfile.utils.Pair;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
index 37603ee2dbc..9235bc35088 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
@@ -29,7 +29,6 @@ import org.apache.iotdb.commons.model.ModelInformation;
import org.apache.iotdb.commons.partition.DataPartition;
import org.apache.iotdb.commons.partition.SchemaPartition;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.common.DeviceContext;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.NodeRef;
@@ -59,6 +58,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem;
import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
import org.apache.iotdb.db.queryengine.plan.statement.sys.ExplainAnalyzeStatement;
import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.IDeviceID;
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 beec66ef086..ea646986047 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
@@ -36,7 +36,6 @@ import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
import org.apache.iotdb.commons.utils.TimePartitionUtils;
@@ -147,6 +146,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.ExplainAnalyzeStatemen
import org.apache.iotdb.db.queryengine.plan.statement.sys.ExplainStatement;
import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement;
import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowVersionStatement;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.utils.constant.SqlConstant;
import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.rpc.TSStatusCode;
@@ -3299,7 +3299,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
}
@Override
- public Analysis visitCountDatabase(
+ public Analysis visitCountStorageGroup(
CountDatabaseStatement countDatabaseStatement, MPPQueryContext context) {
Analysis analysis = new Analysis();
analysis.setRealStatement(countDatabaseStatement);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
index 3fc8b7e5339..dc7df32007f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.queryengine.plan.analyze;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.NodeRef;
@@ -31,6 +30,7 @@ import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand;
import org.apache.iotdb.db.queryengine.plan.expression.multi.FunctionExpression;
import org.apache.iotdb.db.queryengine.plan.statement.component.ResultColumn;
import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.utils.Pair;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
index 21b8d9d8dc1..4a4fc073410 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
import org.apache.iotdb.commons.partition.DataPartition;
import org.apache.iotdb.commons.partition.DataPartitionQueryParam;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.schematree.DeviceSchemaInfo;
@@ -37,6 +36,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
import org.apache.iotdb.db.queryengine.plan.statement.component.ResultColumn;
import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem;
import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.IDeviceID;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
index 37be5691ee5..de04dbe0eed 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
@@ -25,7 +25,6 @@ import org.apache.iotdb.commons.exception.IoTDBRuntimeException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.service.metric.PerformanceOverviewMetrics;
import org.apache.iotdb.db.auth.AuthorityChecker;
import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -45,6 +44,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.internal.InternalCreateTim
import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ActivateTemplateStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.AlterSchemaTemplateStatement;
import org.apache.iotdb.db.schemaengine.template.ITemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.TemplateAlterOperationType;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateExtendInfo;
import org.apache.iotdb.rpc.TSStatusCode;
@@ -200,8 +200,7 @@ class AutoCreateSchemaExecutor {
MPPQueryContext context) {
long startTime = System.nanoTime();
try {
- TSStatus status =
- AuthorityChecker.getAccessControl().checkCanAlterTemplate(context, () -> templateName);
+ TSStatus status = AuthorityChecker.getAccessControl().checkCanAlterTemplate(context);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
throw new IoTDBRuntimeException(status.getMessage(), status.getCode());
}
@@ -216,10 +215,7 @@ class AutoCreateSchemaExecutor {
Map<String, TemplateExtendInfo> templateExtendInfoMap, MPPQueryContext context) {
long startTime = System.nanoTime();
try {
- TSStatus status =
- AuthorityChecker.getAccessControl()
- .checkCanAlterTemplate(
- context, () -> String.join(",", templateExtendInfoMap.keySet()));
+ TSStatus status = AuthorityChecker.getAccessControl().checkCanAlterTemplate(context);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
throw new IoTDBRuntimeException(status.getMessage(), status.getCode());
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
index d6f5fd74fa9..1a2b10d3448 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.commons.exception.QuerySchemaFetchFailedException;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.protocol.session.SessionManager;
@@ -40,6 +39,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.internal.DeviceSchemaFetchStatement;
import org.apache.iotdb.db.queryengine.plan.statement.internal.SeriesSchemaFetchStatement;
import org.apache.iotdb.db.schemaengine.template.ITemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.utils.SetThreadName;
import org.apache.iotdb.rpc.TSStatusCode;
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 1be03d479b6..49e2995b3a8 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
@@ -25,7 +25,6 @@ import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.path.PathPatternTreeUtils;
import org.apache.iotdb.commons.pipe.config.constant.SystemConstant;
import org.apache.iotdb.commons.schema.table.Audit;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
@@ -38,6 +37,7 @@ import org.apache.iotdb.db.queryengine.plan.analyze.lock.SchemaLockType;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TreeDeviceSchemaCacheManager;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
import org.apache.iotdb.db.schemaengine.template.ITemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.enums.CompressionType;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaFetcher.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaFetcher.java
index f56c3e2c92f..87da0e9f0c9 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaFetcher.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaFetcher.java
@@ -21,9 +21,9 @@ package org.apache.iotdb.db.queryengine.plan.analyze.schema;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.schematree.ISchemaTree;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.enums.CompressionType;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/TemplateSchemaFetcher.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/TemplateSchemaFetcher.java
index bca0b54ff1e..2a61b546d5e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/TemplateSchemaFetcher.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/TemplateSchemaFetcher.java
@@ -20,12 +20,12 @@
package org.apache.iotdb.db.queryengine.plan.analyze.schema;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.schematree.ClusterSchemaTree;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TreeDeviceSchemaCacheManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateExtendInfo;
import org.apache.tsfile.common.conf.TSFileDescriptor;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
index 7b80d20d1b7..3ec8fa9ff4d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
@@ -535,7 +535,7 @@ public class TableConfigTaskVisitor extends AstVisitor<IConfigTask, MPPQueryCont
final Pair<String, String> databaseTablePair = splitQualifiedName(node.getName());
final String database = databaseTablePair.getLeft();
final String tableName = databaseTablePair.getRight();
- context.setDatabase(database);
+
accessControl.checkCanCreateTable(
context.getSession().getUserName(), new QualifiedObjectName(database, tableName), context);
@@ -1041,39 +1041,40 @@ public class TableConfigTaskVisitor extends AstVisitor<IConfigTask, MPPQueryCont
@Override
protected IConfigTask visitCreatePipe(final CreatePipe node, final MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
+ final String userName = context.getSession().getUserName();
accessControl.checkUserGlobalSysPrivilege(context);
- final Map<String, String> sourceAttributes = node.getSourceAttributes();
+ final Map<String, String> extractorAttributes = node.getExtractorAttributes();
final String pipeName = node.getPipeName();
- for (final String sourceAttribute : sourceAttributes.keySet()) {
- if (sourceAttribute.startsWith(SystemConstant.SYSTEM_PREFIX_KEY)) {
+ for (final String ExtractorAttribute : extractorAttributes.keySet()) {
+ if (ExtractorAttribute.startsWith(SystemConstant.SYSTEM_PREFIX_KEY)) {
throw new SemanticException(
String.format(
"Failed to create pipe %s, setting %s is not allowed.",
- node.getPipeName(), sourceAttribute));
+ node.getPipeName(), ExtractorAttribute));
}
- if (sourceAttribute.startsWith(SystemConstant.AUDIT_PREFIX_KEY)) {
+ if (ExtractorAttribute.startsWith(SystemConstant.AUDIT_PREFIX_KEY)) {
throw new SemanticException(
String.format(
"Failed to create pipe %s, setting %s is not allowed.",
- node.getPipeName(), sourceAttribute));
+ node.getPipeName(), ExtractorAttribute));
}
}
// Inject table model into the extractor attributes
- sourceAttributes.put(SystemConstant.SQL_DIALECT_KEY, SystemConstant.SQL_DIALECT_TABLE_VALUE);
+ extractorAttributes.put(SystemConstant.SQL_DIALECT_KEY, SystemConstant.SQL_DIALECT_TABLE_VALUE);
checkAndEnrichSourceUser(
pipeName,
- sourceAttributes,
+ extractorAttributes,
new UserEntity(context.getUserId(), context.getUsername(), context.getCliHostname()),
false);
checkAndEnrichSinkUser(
pipeName,
- node.getSinkAttributes(),
+ node.getConnectorAttributes(),
new UserEntity(context.getUserId(), context.getUsername(), context.getCliHostname()),
false);
- mayChangeSourcePattern(sourceAttributes);
+ mayChangeSourcePattern(extractorAttributes);
return new CreatePipeTask(node);
}
@@ -1117,11 +1118,11 @@ public class TableConfigTaskVisitor extends AstVisitor<IConfigTask, MPPQueryCont
}
}
- private static void mayChangeSourcePattern(final Map<String, String> sourceAttributes) {
- final PipeParameters sourceParameters = new PipeParameters(sourceAttributes);
+ private static void mayChangeSourcePattern(final Map<String, String> extractorAttributes) {
+ final PipeParameters extractorParameters = new PipeParameters(extractorAttributes);
final String pluginName =
- sourceParameters
+ extractorParameters
.getStringOrDefault(
Arrays.asList(PipeSourceConstant.EXTRACTOR_KEY, PipeSourceConstant.SOURCE_KEY),
BuiltinPipePlugin.IOTDB_EXTRACTOR.getPipePluginName())
@@ -1133,14 +1134,14 @@ public class TableConfigTaskVisitor extends AstVisitor<IConfigTask, MPPQueryCont
}
// Use lower case because database + table name are all in lower cases
- sourceParameters.computeAttributeIfExists(
+ extractorParameters.computeAttributeIfExists(
(k, v) -> v.toLowerCase(Locale.ENGLISH),
PipeSourceConstant.EXTRACTOR_DATABASE_KEY,
PipeSourceConstant.SOURCE_DATABASE_KEY,
PipeSourceConstant.EXTRACTOR_DATABASE_NAME_KEY,
PipeSourceConstant.SOURCE_DATABASE_NAME_KEY);
- sourceParameters.computeAttributeIfExists(
+ extractorParameters.computeAttributeIfExists(
(k, v) -> v.toLowerCase(Locale.ENGLISH),
PipeSourceConstant.EXTRACTOR_TABLE_KEY,
PipeSourceConstant.SOURCE_TABLE_KEY,
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java
index d9a0b7aac23..93843b579fc 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java
@@ -250,18 +250,20 @@ public class TreeConfigTaskVisitor extends StatementVisitor<IConfigTask, MPPQuer
}
@Override
- public IConfigTask visitDeleteDatabase(
+ public IConfigTask visitDeleteStorageGroup(
DeleteDatabaseStatement statement, MPPQueryContext context) {
return new DeleteStorageGroupTask(statement);
}
@Override
- public IConfigTask visitShowDatabase(ShowDatabaseStatement statement, MPPQueryContext context) {
+ public IConfigTask visitShowStorageGroup(
+ ShowDatabaseStatement statement, MPPQueryContext context) {
return new ShowDatabaseTask(statement);
}
@Override
- public IConfigTask visitCountDatabase(CountDatabaseStatement statement, MPPQueryContext context) {
+ public IConfigTask visitCountStorageGroup(
+ CountDatabaseStatement statement, MPPQueryContext context) {
return new CountDatabaseTask(statement);
}
@@ -562,7 +564,7 @@ public class TreeConfigTaskVisitor extends StatementVisitor<IConfigTask, MPPQuer
@Override
public IConfigTask visitCreatePipe(
final CreatePipeStatement createPipeStatement, final MPPQueryContext context) {
- for (final String ExtractorAttribute : createPipeStatement.getSourceAttributes().keySet()) {
+ for (final String ExtractorAttribute : createPipeStatement.getExtractorAttributes().keySet()) {
if (ExtractorAttribute.startsWith(SystemConstant.SYSTEM_PREFIX_KEY)) {
throw new SemanticException(
String.format(
@@ -577,18 +579,18 @@ public class TreeConfigTaskVisitor extends StatementVisitor<IConfigTask, MPPQuer
}
}
- // Inject tree model into the source attributes
+ // Inject tree model into the extractor attributes
createPipeStatement
- .getSourceAttributes()
+ .getExtractorAttributes()
.put(SystemConstant.SQL_DIALECT_KEY, SystemConstant.SQL_DIALECT_TREE_VALUE);
checkAndEnrichSourceUser(
createPipeStatement.getPipeName(),
- createPipeStatement.getSourceAttributes(),
+ createPipeStatement.getExtractorAttributes(),
new UserEntity(context.getUserId(), context.getUsername(), context.getCliHostname()),
false);
checkAndEnrichSinkUser(
createPipeStatement.getPipeName(),
- createPipeStatement.getSinkAttributes(),
+ createPipeStatement.getConnectorAttributes(),
context.getSession().getUserEntity(),
false);
@@ -599,7 +601,8 @@ public class TreeConfigTaskVisitor extends StatementVisitor<IConfigTask, MPPQuer
public IConfigTask visitAlterPipe(
final AlterPipeStatement alterPipeStatement, final MPPQueryContext context) {
- for (final String extractorAttributeKey : alterPipeStatement.getSourceAttributes().keySet()) {
+ for (final String extractorAttributeKey :
+ alterPipeStatement.getExtractorAttributes().keySet()) {
if (extractorAttributeKey.startsWith(SystemConstant.SYSTEM_PREFIX_KEY)) {
throw new SemanticException(
String.format(
@@ -618,11 +621,11 @@ public class TreeConfigTaskVisitor extends StatementVisitor<IConfigTask, MPPQuer
alterPipeStatement.setUserName(userName);
final String pipeName = alterPipeStatement.getPipeName();
- final Map<String, String> extractorAttributes = alterPipeStatement.getSourceAttributes();
+ final Map<String, String> extractorAttributes = alterPipeStatement.getExtractorAttributes();
// If the source is replaced, sql-dialect uses the current Alter Pipe sql-dialect. If it is
// modified, the original sql-dialect is used.
- if (alterPipeStatement.isReplaceAllSourceAttributes()) {
+ if (alterPipeStatement.isReplaceAllExtractorAttributes()) {
extractorAttributes.put(
SystemConstant.SQL_DIALECT_KEY, SystemConstant.SQL_DIALECT_TREE_VALUE);
checkAndEnrichSourceUser(
@@ -632,10 +635,10 @@ public class TreeConfigTaskVisitor extends StatementVisitor<IConfigTask, MPPQuer
true);
}
- if (alterPipeStatement.isReplaceAllSinkAttributes()) {
+ if (alterPipeStatement.isReplaceAllConnectorAttributes()) {
checkAndEnrichSinkUser(
pipeName,
- alterPipeStatement.getSinkAttributes(),
+ alterPipeStatement.getConnectorAttributes(),
context.getSession().getUserEntity(),
true);
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index f998db88ae7..ad09bc6b351 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -66,7 +66,6 @@ import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.TsTableInternalRPCUtil;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchemaUtil;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
import org.apache.iotdb.commons.subscription.config.SubscriptionConfig;
@@ -301,6 +300,7 @@ import org.apache.iotdb.db.schemaengine.SchemaEngine;
import org.apache.iotdb.db.schemaengine.rescon.DataNodeSchemaQuotaManager;
import org.apache.iotdb.db.schemaengine.table.InformationSchemaUtils;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.schemaengine.template.TemplateAlterOperationType;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateAlterOperationUtil;
import org.apache.iotdb.db.schemaengine.template.alter.TemplateExtendInfo;
@@ -2094,9 +2094,9 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
PipeDataNodeAgent.plugin()
.validate(
createPipeStatement.getPipeName(),
- createPipeStatement.getSourceAttributes(),
+ createPipeStatement.getExtractorAttributes(),
createPipeStatement.getProcessorAttributes(),
- createPipeStatement.getSinkAttributes());
+ createPipeStatement.getConnectorAttributes());
} catch (final Exception e) {
future.setException(
new IoTDBException(e.getMessage(), TSStatusCode.PIPE_ERROR.getStatusCode()));
@@ -2106,7 +2106,7 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
// Syntactic sugar: if full-sync mode is detected (i.e. not snapshot mode, or both realtime
// and history are true), the pipe is split into history-only and realtime–only modes.
final PipeParameters extractorPipeParameters =
- new PipeParameters(createPipeStatement.getSourceAttributes());
+ new PipeParameters(createPipeStatement.getExtractorAttributes());
if (PipeConfig.getInstance().getPipeAutoSplitFullEnabled()
&& PipeDataNodeAgent.task().isFullSync(extractorPipeParameters)) {
try (final ConfigNodeClient configNodeClient =
@@ -2130,7 +2130,7 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
Boolean.toString(false))))
.getAttribute())
.setProcessorAttributes(createPipeStatement.getProcessorAttributes())
- .setConnectorAttributes(createPipeStatement.getSinkAttributes());
+ .setConnectorAttributes(createPipeStatement.getConnectorAttributes());
final TSStatus realtimeTsStatus = configNodeClient.createPipe(realtimeReq);
// If creation fails, immediately return with exception
@@ -2157,7 +2157,7 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
Boolean.toString(true))))
.getAttribute())
.setProcessorAttributes(createPipeStatement.getProcessorAttributes())
- .setConnectorAttributes(createPipeStatement.getSinkAttributes());
+ .setConnectorAttributes(createPipeStatement.getConnectorAttributes());
final TSStatus historyTsStatus = configNodeClient.createPipe(historyReq);
// If creation fails, immediately return with exception
@@ -2181,9 +2181,9 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
new TCreatePipeReq()
.setPipeName(createPipeStatement.getPipeName())
.setIfNotExistsCondition(createPipeStatement.hasIfNotExistsCondition())
- .setExtractorAttributes(createPipeStatement.getSourceAttributes())
+ .setExtractorAttributes(createPipeStatement.getExtractorAttributes())
.setProcessorAttributes(createPipeStatement.getProcessorAttributes())
- .setConnectorAttributes(createPipeStatement.getSinkAttributes());
+ .setConnectorAttributes(createPipeStatement.getConnectorAttributes());
final TSStatus tsStatus = configNodeClient.createPipe(req);
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
future.setException(new IoTDBException(tsStatus));
@@ -2262,25 +2262,29 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
final Map<String, String> processorAttributes;
final Map<String, String> connectorAttributes;
try {
- if (!alterPipeStatement.getSourceAttributes().isEmpty()) {
+ if (!alterPipeStatement.getExtractorAttributes().isEmpty()) {
// We don't allow changing the extractor plugin type
- if (alterPipeStatement.getSourceAttributes().containsKey(PipeSourceConstant.EXTRACTOR_KEY)
- || alterPipeStatement.getSourceAttributes().containsKey(PipeSourceConstant.SOURCE_KEY)
- || alterPipeStatement.isReplaceAllSourceAttributes()) {
+ if (alterPipeStatement
+ .getExtractorAttributes()
+ .containsKey(PipeSourceConstant.EXTRACTOR_KEY)
+ || alterPipeStatement
+ .getExtractorAttributes()
+ .containsKey(PipeSourceConstant.SOURCE_KEY)
+ || alterPipeStatement.isReplaceAllExtractorAttributes()) {
checkIfSourcePluginChanged(
pipeMetaFromCoordinator.getStaticMeta().getSourceParameters(),
- new PipeParameters(alterPipeStatement.getSourceAttributes()));
+ new PipeParameters(alterPipeStatement.getExtractorAttributes()));
}
- if (alterPipeStatement.isReplaceAllSourceAttributes()) {
- extractorAttributes = alterPipeStatement.getSourceAttributes();
+ if (alterPipeStatement.isReplaceAllExtractorAttributes()) {
+ extractorAttributes = alterPipeStatement.getExtractorAttributes();
} else {
final boolean onlyContainsUser =
- onlyContainsUser(alterPipeStatement.getSourceAttributes());
+ onlyContainsUser(alterPipeStatement.getExtractorAttributes());
pipeMetaFromCoordinator
.getStaticMeta()
.getSourceParameters()
.addOrReplaceEquivalentAttributes(
- new PipeParameters(alterPipeStatement.getSourceAttributes()));
+ new PipeParameters(alterPipeStatement.getExtractorAttributes()));
extractorAttributes =
pipeMetaFromCoordinator.getStaticMeta().getSourceParameters().getAttribute();
if (onlyContainsUser) {
@@ -2309,16 +2313,17 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
pipeMetaFromCoordinator.getStaticMeta().getProcessorParameters().getAttribute();
}
- if (!alterPipeStatement.getSinkAttributes().isEmpty()) {
- if (alterPipeStatement.isReplaceAllSinkAttributes()) {
- connectorAttributes = alterPipeStatement.getSinkAttributes();
+ if (!alterPipeStatement.getConnectorAttributes().isEmpty()) {
+ if (alterPipeStatement.isReplaceAllConnectorAttributes()) {
+ connectorAttributes = alterPipeStatement.getConnectorAttributes();
} else {
- final boolean onlyContainsUser = onlyContainsUser(alterPipeStatement.getSinkAttributes());
+ final boolean onlyContainsUser =
+ onlyContainsUser(alterPipeStatement.getConnectorAttributes());
pipeMetaFromCoordinator
.getStaticMeta()
.getSinkParameters()
.addOrReplaceEquivalentAttributes(
- new PipeParameters(alterPipeStatement.getSinkAttributes()));
+ new PipeParameters(alterPipeStatement.getConnectorAttributes()));
connectorAttributes =
pipeMetaFromCoordinator.getStaticMeta().getSinkParameters().getAttribute();
if (onlyContainsUser) {
@@ -2344,11 +2349,11 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
new TAlterPipeReq(
pipeName,
alterPipeStatement.getProcessorAttributes(),
- alterPipeStatement.getSinkAttributes(),
+ alterPipeStatement.getConnectorAttributes(),
alterPipeStatement.isReplaceAllProcessorAttributes(),
- alterPipeStatement.isReplaceAllSinkAttributes());
- req.setExtractorAttributes(alterPipeStatement.getSourceAttributes());
- req.setIsReplaceAllExtractorAttributes(alterPipeStatement.isReplaceAllSourceAttributes());
+ alterPipeStatement.isReplaceAllConnectorAttributes());
+ req.setExtractorAttributes(alterPipeStatement.getExtractorAttributes());
+ req.setIsReplaceAllExtractorAttributes(alterPipeStatement.isReplaceAllExtractorAttributes());
req.setIfExistsCondition(alterPipeStatement.hasIfExistsCondition());
req.setIsTableModel(alterPipeStatement.isTableModel());
final TSStatus tsStatus = configNodeClient.alterPipe(req);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/template/ShowNodesInSchemaTemplateTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/template/ShowNodesInSchemaTemplateTask.java
index e601c3533ef..9d833e890e5 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/template/ShowNodesInSchemaTemplateTask.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/template/ShowNodesInSchemaTemplateTask.java
@@ -21,13 +21,13 @@ package org.apache.iotdb.db.queryengine.plan.execution.config.metadata.template;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
import org.apache.iotdb.db.queryengine.common.header.DatasetHeaderFactory;
import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult;
import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask;
import org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ShowNodesInSchemaTemplateStatement;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.rpc.TSStatusCode;
import com.google.common.util.concurrent.ListenableFuture;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/template/ShowSchemaTemplateTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/template/ShowSchemaTemplateTask.java
index 870b4c0c076..258efb6471c 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/template/ShowSchemaTemplateTask.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/template/ShowSchemaTemplateTask.java
@@ -21,13 +21,13 @@ package org.apache.iotdb.db.queryengine.plan.execution.config.metadata.template;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
import org.apache.iotdb.db.queryengine.common.header.DatasetHeaderFactory;
import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult;
import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask;
import org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ShowSchemaTemplateStatement;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.rpc.TSStatusCode;
import com.google.common.util.concurrent.ListenableFuture;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/pipe/AlterPipeTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/pipe/AlterPipeTask.java
index aecadff7f81..c80961ea620 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/pipe/AlterPipeTask.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/pipe/AlterPipeTask.java
@@ -39,7 +39,7 @@ public class AlterPipeTask implements IConfigTask {
public AlterPipeTask(final AlterPipeStatement alterPipeStatement) {
// support now() function
- applyNowFunctionToExtractorAttributes(alterPipeStatement.getSourceAttributes());
+ applyNowFunctionToExtractorAttributes(alterPipeStatement.getExtractorAttributes());
this.alterPipeStatement = alterPipeStatement;
}
@@ -51,12 +51,12 @@ public class AlterPipeTask implements IConfigTask {
// support now() function
applyNowFunctionToExtractorAttributes(node.getExtractorAttributes());
- alterPipeStatement.setSourceAttributes(node.getExtractorAttributes());
+ alterPipeStatement.setExtractorAttributes(node.getExtractorAttributes());
alterPipeStatement.setProcessorAttributes(node.getProcessorAttributes());
- alterPipeStatement.setSinkAttributes(node.getConnectorAttributes());
- alterPipeStatement.setReplaceAllSourceAttributes(node.isReplaceAllExtractorAttributes());
+ alterPipeStatement.setConnectorAttributes(node.getConnectorAttributes());
+ alterPipeStatement.setReplaceAllExtractorAttributes(node.isReplaceAllExtractorAttributes());
alterPipeStatement.setReplaceAllProcessorAttributes(node.isReplaceAllProcessorAttributes());
- alterPipeStatement.setReplaceAllSinkAttributes(node.isReplaceAllConnectorAttributes());
+ alterPipeStatement.setReplaceAllConnectorAttributes(node.isReplaceAllConnectorAttributes());
alterPipeStatement.setUserName(userName);
alterPipeStatement.setTableModel(true);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/pipe/CreatePipeTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/pipe/CreatePipeTask.java
index a5fbd36f88d..6e1344ad69d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/pipe/CreatePipeTask.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/pipe/CreatePipeTask.java
@@ -39,7 +39,7 @@ public class CreatePipeTask implements IConfigTask {
public CreatePipeTask(CreatePipeStatement createPipeStatement) {
// support now() function
- applyNowFunctionToExtractorAttributes(createPipeStatement.getSourceAttributes());
+ applyNowFunctionToExtractorAttributes(createPipeStatement.getExtractorAttributes());
this.createPipeStatement = createPipeStatement;
}
@@ -49,11 +49,11 @@ public class CreatePipeTask implements IConfigTask {
createPipeStatement.setIfNotExists(createPipe.hasIfNotExistsCondition());
// support now() function
- applyNowFunctionToExtractorAttributes(createPipe.getSourceAttributes());
+ applyNowFunctionToExtractorAttributes(createPipe.getExtractorAttributes());
- createPipeStatement.setSourceAttributes(createPipe.getSourceAttributes());
+ createPipeStatement.setExtractorAttributes(createPipe.getExtractorAttributes());
createPipeStatement.setProcessorAttributes(createPipe.getProcessorAttributes());
- createPipeStatement.setSinkAttributes(createPipe.getSinkAttributes());
+ createPipeStatement.setConnectorAttributes(createPipe.getConnectorAttributes());
}
@Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
index 63e2e87a96f..5879159c16e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
@@ -42,6 +42,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.protocol.session.IClientSession;
import org.apache.iotdb.db.qp.sql.IoTDBSqlParser;
+import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.ConnectorAttributeClauseContext;
import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.ConstantContext;
import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.CountDatabasesContext;
import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.CountDevicesContext;
@@ -50,6 +51,7 @@ import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.CountTimeseriesContext;
import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.CreateFunctionContext;
import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.DropFunctionContext;
import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.ExpressionContext;
+import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.ExtractorAttributeClauseContext;
import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.GroupByAttributeClauseContext;
import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.IdentifierContext;
import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.ProcessorAttributeClauseContext;
@@ -3962,9 +3964,8 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
final CreatePipeStatement createPipeStatement =
new CreatePipeStatement(StatementType.CREATE_PIPE);
- final String pipeName = parseIdentifier(ctx.pipeName.getText());
if (ctx.pipeName != null) {
- createPipeStatement.setPipeName(pipeName);
+ createPipeStatement.setPipeName(parseIdentifier(ctx.pipeName.getText()));
} else {
throw new SemanticException(
"Not support for this sql in CREATE PIPE, please enter pipe name.");
@@ -3973,11 +3974,12 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
createPipeStatement.setIfNotExists(
ctx.IF() != null && ctx.NOT() != null && ctx.EXISTS() != null);
- if (ctx.sourceAttributesClause() != null) {
- createPipeStatement.setSourceAttributes(
- parseSourceAttributesClause(ctx.sourceAttributesClause().sourceAttributeClause()));
+ if (ctx.extractorAttributesClause() != null) {
+ createPipeStatement.setExtractorAttributes(
+ parseExtractorAttributesClause(
+ ctx.extractorAttributesClause().extractorAttributeClause()));
} else {
- createPipeStatement.setSourceAttributes(new HashMap<>());
+ createPipeStatement.setExtractorAttributes(new HashMap<>());
}
if (ctx.processorAttributesClause() != null) {
createPipeStatement.setProcessorAttributes(
@@ -3986,15 +3988,15 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
} else {
createPipeStatement.setProcessorAttributes(new HashMap<>());
}
- if (ctx.sinkAttributesClause() != null) {
- createPipeStatement.setSinkAttributes(
- parseSinkAttributesClause(ctx.sinkAttributesClause().sinkAttributeClause()));
+ if (ctx.connectorAttributesClause() != null) {
+ createPipeStatement.setConnectorAttributes(
+ parseConnectorAttributesClause(
+ ctx.connectorAttributesClause().connectorAttributeClause()));
} else {
- createPipeStatement.setSinkAttributes(
- parseSinkAttributesClause(
- ctx.sinkAttributesWithoutWithSinkClause().sinkAttributeClause()));
+ createPipeStatement.setConnectorAttributes(
+ parseConnectorAttributesClause(
+ ctx.connectorAttributesWithoutWithSinkClause().connectorAttributeClause()));
}
-
return createPipeStatement;
}
@@ -4011,14 +4013,15 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
alterPipeStatement.setIfExists(ctx.IF() != null && ctx.EXISTS() != null);
- if (ctx.alterSourceAttributesClause() != null) {
- alterPipeStatement.setSourceAttributes(
- parseSourceAttributesClause(ctx.alterSourceAttributesClause().sourceAttributeClause()));
- alterPipeStatement.setReplaceAllSourceAttributes(
- Objects.nonNull(ctx.alterSourceAttributesClause().REPLACE()));
+ if (ctx.alterExtractorAttributesClause() != null) {
+ alterPipeStatement.setExtractorAttributes(
+ parseExtractorAttributesClause(
+ ctx.alterExtractorAttributesClause().extractorAttributeClause()));
+ alterPipeStatement.setReplaceAllExtractorAttributes(
+ Objects.nonNull(ctx.alterExtractorAttributesClause().REPLACE()));
} else {
- alterPipeStatement.setSourceAttributes(new HashMap<>());
- alterPipeStatement.setReplaceAllSourceAttributes(false);
+ alterPipeStatement.setExtractorAttributes(new HashMap<>());
+ alterPipeStatement.setReplaceAllExtractorAttributes(false);
}
if (ctx.alterProcessorAttributesClause() != null) {
@@ -4032,26 +4035,27 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
alterPipeStatement.setReplaceAllProcessorAttributes(false);
}
- if (ctx.alterSinkAttributesClause() != null) {
- alterPipeStatement.setSinkAttributes(
- parseSinkAttributesClause(ctx.alterSinkAttributesClause().sinkAttributeClause()));
- alterPipeStatement.setReplaceAllSinkAttributes(
- Objects.nonNull(ctx.alterSinkAttributesClause().REPLACE()));
+ if (ctx.alterConnectorAttributesClause() != null) {
+ alterPipeStatement.setConnectorAttributes(
+ parseConnectorAttributesClause(
+ ctx.alterConnectorAttributesClause().connectorAttributeClause()));
+ alterPipeStatement.setReplaceAllConnectorAttributes(
+ Objects.nonNull(ctx.alterConnectorAttributesClause().REPLACE()));
} else {
- alterPipeStatement.setSinkAttributes(new HashMap<>());
- alterPipeStatement.setReplaceAllSinkAttributes(false);
+ alterPipeStatement.setConnectorAttributes(new HashMap<>());
+ alterPipeStatement.setReplaceAllConnectorAttributes(false);
}
return alterPipeStatement;
}
- private Map<String, String> parseSourceAttributesClause(
- List<IoTDBSqlParser.SourceAttributeClauseContext> contexts) {
+ private Map<String, String> parseExtractorAttributesClause(
+ List<ExtractorAttributeClauseContext> contexts) {
final Map<String, String> collectorMap = new HashMap<>();
- for (IoTDBSqlParser.SourceAttributeClauseContext context : contexts) {
+ for (IoTDBSqlParser.ExtractorAttributeClauseContext context : contexts) {
collectorMap.put(
- parseStringLiteral(context.sourceKey.getText()),
- parseStringLiteral(context.sourceValue.getText()));
+ parseStringLiteral(context.extractorKey.getText()),
+ parseStringLiteral(context.extractorValue.getText()));
}
return collectorMap;
}
@@ -4067,15 +4071,15 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
return processorMap;
}
- private Map<String, String> parseSinkAttributesClause(
- List<IoTDBSqlParser.SinkAttributeClauseContext> contexts) {
- final Map<String, String> SinkMap = new HashMap<>();
- for (IoTDBSqlParser.SinkAttributeClauseContext context : contexts) {
- SinkMap.put(
- parseStringLiteral(context.sinkKey.getText()),
- parseStringLiteral(context.sinkValue.getText()));
+ private Map<String, String> parseConnectorAttributesClause(
+ List<ConnectorAttributeClauseContext> contexts) {
+ final Map<String, String> connectorMap = new HashMap<>();
+ for (IoTDBSqlParser.ConnectorAttributeClauseContext context : contexts) {
+ connectorMap.put(
+ parseStringLiteral(context.connectorKey.getText()),
+ parseStringLiteral(context.connectorValue.getText()));
}
- return SinkMap;
+ return connectorMap;
}
@Override
@@ -4126,7 +4130,7 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
if (ctx.pipeName != null) {
showPipesStatement.setPipeName(parseIdentifier(ctx.pipeName.getText()));
}
- showPipesStatement.setWhereClause(ctx.WHERE() != null);
+ showPipesStatement.setWhereClause(ctx.CONNECTOR() != null);
return showPipesStatement;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
index 2fb65cb39ca..af965ba60c3 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
@@ -29,7 +29,6 @@ import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.common.DeviceContext;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.TimeseriesContext;
@@ -102,6 +101,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem;
import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.MetaUtils;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.utils.SchemaUtils;
import org.apache.iotdb.db.utils.columngenerator.parameter.SlidingTimeColumnGeneratorParameter;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
index 2192435b4c2..fa39b3ba7dc 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
@@ -20,7 +20,6 @@ package org.apache.iotdb.db.queryengine.plan.planner;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
@@ -87,6 +86,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.metadata.view.ShowLogicalV
import org.apache.iotdb.db.queryengine.plan.statement.pipe.PipeEnrichedStatement;
import org.apache.iotdb.db.queryengine.plan.statement.sys.ExplainAnalyzeStatement;
import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.IDeviceID;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/LevelTimeSeriesCountNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/LevelTimeSeriesCountNode.java
index 175a57ce85a..c267736b466 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/LevelTimeSeriesCountNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/LevelTimeSeriesCountNode.java
@@ -25,10 +25,10 @@ import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.utils.ReadWriteIOUtils;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java
index df922904a99..c58026b9e13 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java
@@ -22,12 +22,12 @@ package org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.read;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathDeserializeUtil;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeUtil;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.utils.ReadWriteIOUtils;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesCountNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesCountNode.java
index 0e899fcd919..4a935e4d0cc 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesCountNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesCountNode.java
@@ -26,10 +26,10 @@ import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.utils.ReadWriteIOUtils;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesSchemaScanNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesSchemaScanNode.java
index 1997a3caefe..0348234f34b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesSchemaScanNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesSchemaScanNode.java
@@ -25,10 +25,10 @@ import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.utils.ReadWriteIOUtils;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TreeDeviceSchemaCacheManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TreeDeviceSchemaCacheManager.java
index cdb66fdc047..0a38501c0f2 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TreeDeviceSchemaCacheManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TreeDeviceSchemaCacheManager.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternUtil;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
import org.apache.iotdb.db.exception.metadata.view.InsertNonWritableViewException;
import org.apache.iotdb.db.queryengine.common.schematree.ClusterSchemaTree;
@@ -31,6 +30,7 @@ import org.apache.iotdb.db.queryengine.common.schematree.IMeasurementSchemaInfo;
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaComputation;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
import org.apache.iotdb.db.schemaengine.template.ITemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.read.TimeValuePair;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
index 6a1cf27d98a..a94dc575483 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
@@ -33,7 +33,6 @@ import org.apache.tsfile.file.metadata.IDeviceID;
import java.util.Collection;
import java.util.List;
-import java.util.function.Supplier;
public interface AccessControl {
@@ -222,11 +221,11 @@ public interface AccessControl {
/** called by load */
TSStatus checkFullPathWriteDataPermission(
- IAuditEntity auditEntity, IDeviceID device, String measurementId);
+ IAuditEntity entity, IDeviceID device, String measurementId);
TSStatus checkCanCreateDatabaseForTree(IAuditEntity entity, PartialPath databaseName);
- TSStatus checkCanAlterTemplate(IAuditEntity entity, Supplier<String> auditObject);
+ TSStatus checkCanAlterTemplate(IAuditEntity entity);
TSStatus checkCanAlterView(
IAuditEntity entity, List<PartialPath> sourcePaths, List<PartialPath> targetPaths);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
index bfffb794335..14ee646fb01 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
@@ -20,7 +20,6 @@
package org.apache.iotdb.db.queryengine.plan.relational.security;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.audit.AuditLogOperation;
import org.apache.iotdb.commons.audit.IAuditEntity;
import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
@@ -39,12 +38,10 @@ import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.tsfile.file.metadata.IDeviceID;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
-import java.util.function.Supplier;
import static org.apache.iotdb.commons.schema.table.Audit.TABLE_MODEL_AUDIT_DATABASE;
import static org.apache.iotdb.commons.schema.table.Audit.TREE_MODEL_AUDIT_DATABASE;
@@ -79,14 +76,14 @@ public class AccessControlImpl implements AccessControl {
String userName, String databaseName, IAuditEntity auditEntity) {
InformationSchemaUtils.checkDBNameInWrite(databaseName);
authChecker.checkDatabasePrivilege(
- userName, databaseName, TableModelPrivilege.CREATE, auditEntity.setDatabase(databaseName));
+ userName, databaseName, TableModelPrivilege.CREATE, auditEntity);
}
@Override
public void checkCanDropDatabase(String userName, String databaseName, IAuditEntity auditEntity) {
InformationSchemaUtils.checkDBNameInWrite(databaseName);
authChecker.checkDatabasePrivilege(
- userName, databaseName, TableModelPrivilege.DROP, auditEntity.setDatabase(databaseName));
+ userName, databaseName, TableModelPrivilege.DROP, auditEntity);
}
@Override
@@ -94,20 +91,18 @@ public class AccessControlImpl implements AccessControl {
String userName, String databaseName, IAuditEntity auditEntity) {
InformationSchemaUtils.checkDBNameInWrite(databaseName);
authChecker.checkDatabasePrivilege(
- userName, databaseName, TableModelPrivilege.ALTER, auditEntity.setDatabase(databaseName));
+ userName, databaseName, TableModelPrivilege.ALTER, auditEntity);
}
@Override
public void checkCanShowOrUseDatabase(
String userName, String databaseName, IAuditEntity auditEntity) {
- authChecker.checkDatabaseVisibility(
- userName, databaseName, auditEntity.setDatabase(databaseName));
+ authChecker.checkDatabaseVisibility(userName, databaseName, auditEntity);
}
@Override
public void checkCanCreateTable(
String userName, QualifiedObjectName tableName, IAuditEntity auditEntity) {
- auditEntity.setAuditLogOperation(AuditLogOperation.DDL);
InformationSchemaUtils.checkDBNameInWrite(tableName.getDatabaseName());
if (userName.equals(AuthorityChecker.INTERNAL_AUDIT_USER)
&& tableName.getDatabaseName().equals(TABLE_MODEL_AUDIT_DATABASE)) {
@@ -116,9 +111,6 @@ public class AccessControlImpl implements AccessControl {
}
checkAuditDatabase(tableName.getDatabaseName());
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SYSTEM)) {
- ITableAuthCheckerImpl.recordAuditLog(
- auditEntity.setPrivilegeType(PrivilegeType.SYSTEM).setResult(true),
- tableName::getObjectName);
return;
}
authChecker.checkTablePrivilege(userName, tableName, TableModelPrivilege.CREATE, auditEntity);
@@ -130,7 +122,6 @@ public class AccessControlImpl implements AccessControl {
InformationSchemaUtils.checkDBNameInWrite(tableName.getDatabaseName());
checkAuditDatabase(tableName.getDatabaseName());
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SYSTEM)) {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity, tableName::getObjectName);
return;
}
authChecker.checkTablePrivilege(userName, tableName, TableModelPrivilege.DROP, auditEntity);
@@ -142,7 +133,6 @@ public class AccessControlImpl implements AccessControl {
InformationSchemaUtils.checkDBNameInWrite(tableName.getDatabaseName());
checkAuditDatabase(tableName.getDatabaseName());
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SYSTEM)) {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity, tableName::getObjectName);
return;
}
authChecker.checkTablePrivilege(userName, tableName, TableModelPrivilege.ALTER, auditEntity);
@@ -164,7 +154,6 @@ public class AccessControlImpl implements AccessControl {
@Override
public void checkCanSelectFromTable(
String userName, QualifiedObjectName tableName, IAuditEntity auditEntity) {
- auditEntity.setDatabase(tableName.getDatabaseName());
if (tableName.getDatabaseName().equals(InformationSchema.INFORMATION_DATABASE)) {
return;
}
@@ -245,9 +234,13 @@ public class AccessControlImpl implements AccessControl {
AuthorRType type = statement.getAuthorType();
switch (type) {
case CREATE_USER:
+ if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
+ return;
+ }
+ authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_USER, auditEntity);
+ return;
case DROP_USER:
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity, statement::getUserName);
return;
}
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_USER, auditEntity);
@@ -256,7 +249,6 @@ public class AccessControlImpl implements AccessControl {
case LIST_USER_PRIV:
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()
|| statement.getUserName().equals(userName)) {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity, statement::getUserName);
return;
}
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_USER, auditEntity);
@@ -267,19 +259,28 @@ public class AccessControlImpl implements AccessControl {
}
return;
case CREATE_ROLE:
+ if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
+ return;
+ }
+ authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_ROLE, auditEntity);
+ return;
+
case DROP_ROLE:
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity, statement::getRoleName);
return;
}
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_ROLE, auditEntity);
return;
+
case GRANT_USER_ROLE:
+ if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
+ return;
+ }
+ authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_ROLE, auditEntity);
+ return;
+
case REVOKE_USER_ROLE:
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
- ITableAuthCheckerImpl.recordAuditLog(
- auditEntity,
- () -> "user: " + statement.getUserName() + ", role: " + statement.getRoleName());
return;
}
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_ROLE, auditEntity);
@@ -287,7 +288,6 @@ public class AccessControlImpl implements AccessControl {
case LIST_ROLE:
if (statement.getUserName() != null && !statement.getUserName().equals(userName)) {
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_ROLE, auditEntity);
- ITableAuthCheckerImpl.recordAuditLog(auditEntity, statement::getRoleName);
return;
}
if (!hasGlobalPrivilege(auditEntity, PrivilegeType.MANAGE_ROLE)) {
@@ -295,9 +295,10 @@ public class AccessControlImpl implements AccessControl {
}
return;
case LIST_ROLE_PRIV:
- if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()
- || AuthorityChecker.checkRole(userName, statement.getRoleName())) {
- ITableAuthCheckerImpl.recordAuditLog(auditEntity, statement::getRoleName);
+ if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
+ return;
+ }
+ if (AuthorityChecker.checkRole(userName, statement.getRoleName())) {
return;
}
authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.MANAGE_ROLE, auditEntity);
@@ -307,8 +308,6 @@ public class AccessControlImpl implements AccessControl {
case REVOKE_ROLE_ANY:
case REVOKE_USER_ANY:
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SECURITY)) {
- ITableAuthCheckerImpl.recordAuditLog(
- auditEntity, () -> statement.getUserName() + statement.getRoleName());
return;
}
for (PrivilegeType privilegeType : statement.getPrivilegeTypes()) {
@@ -321,8 +320,6 @@ public class AccessControlImpl implements AccessControl {
case GRANT_USER_ALL:
case REVOKE_USER_ALL:
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SECURITY)) {
- ITableAuthCheckerImpl.recordAuditLog(
- auditEntity, () -> statement.getUserName() + statement.getRoleName());
return;
}
for (TableModelPrivilege privilege : TableModelPrivilege.values()) {
@@ -340,8 +337,6 @@ public class AccessControlImpl implements AccessControl {
case REVOKE_USER_DB:
case REVOKE_ROLE_DB:
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SECURITY)) {
- ITableAuthCheckerImpl.recordAuditLog(
- auditEntity, () -> statement.getUserName() + statement.getRoleName());
return;
}
for (PrivilegeType privilegeType : statement.getPrivilegeTypes()) {
@@ -357,8 +352,6 @@ public class AccessControlImpl implements AccessControl {
case REVOKE_USER_TB:
case REVOKE_ROLE_TB:
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SECURITY)) {
- ITableAuthCheckerImpl.recordAuditLog(
- auditEntity, () -> statement.getUserName() + statement.getRoleName());
return;
}
for (PrivilegeType privilegeType : statement.getPrivilegeTypes()) {
@@ -375,8 +368,6 @@ public class AccessControlImpl implements AccessControl {
case REVOKE_USER_SYS:
case REVOKE_ROLE_SYS:
if (hasGlobalPrivilege(auditEntity, PrivilegeType.SECURITY)) {
- ITableAuthCheckerImpl.recordAuditLog(
- auditEntity, () -> statement.getUserName() + statement.getRoleName());
return;
}
for (PrivilegeType privilegeType : statement.getPrivilegeTypes()) {
@@ -426,18 +417,17 @@ public class AccessControlImpl implements AccessControl {
@Override
public TSStatus checkFullPathWriteDataPermission(
- IAuditEntity auditEntity, IDeviceID device, String measurementId) {
- String userName = auditEntity.getUsername();
+ IAuditEntity entity, IDeviceID device, String measurementId) {
+ String userName = entity.getUsername();
try {
PartialPath path = new MeasurementPath(device, measurementId);
// audit db is read-only
- if (includeByAuditTreeDB(path)
- && !auditEntity.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
+ if (includeByAuditTreeDB(path) && !userName.equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
return checkTimeSeriesPermission(
- auditEntity, Collections.singletonList(path), PrivilegeType.WRITE_DATA);
+ userName, Collections.singletonList(path), PrivilegeType.WRITE_DATA);
} catch (IllegalPathException e) {
// should never be here
throw new IllegalStateException(e);
@@ -446,32 +436,29 @@ public class AccessControlImpl implements AccessControl {
@Override
public TSStatus checkCanCreateDatabaseForTree(IAuditEntity entity, PartialPath databaseName) {
- return treeAccessCheckVisitor.checkCreateOrAlterDatabasePermission(entity, databaseName);
+ return treeAccessCheckVisitor.checkCreateOrAlterDatabasePermission(
+ entity.getUsername(), databaseName);
}
@Override
- public TSStatus checkCanAlterTemplate(IAuditEntity entity, Supplier<String> auditObject) {
- return treeAccessCheckVisitor.checkCanAlterTemplate(entity, auditObject);
+ public TSStatus checkCanAlterTemplate(IAuditEntity entity) {
+ return treeAccessCheckVisitor.checkCanAlterTemplate(entity);
}
@Override
public TSStatus checkCanAlterView(
IAuditEntity entity, List<PartialPath> sourcePaths, List<PartialPath> targetPaths) {
if (AuthorityChecker.SUPER_USER_ID == entity.getUserId()) {
- ITableAuthCheckerImpl.recordAuditLog(
- entity
- .setPrivilegeTypes(
- Arrays.asList(PrivilegeType.READ_SCHEMA, PrivilegeType.WRITE_SCHEMA))
- .setResult(true),
- () -> "source: " + sourcePaths + ", target: " + targetPaths);
return SUCCEED;
}
TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
if (sourcePaths != null) {
- status = checkTimeSeriesPermission(entity, sourcePaths, PrivilegeType.READ_SCHEMA);
+ status =
+ checkTimeSeriesPermission(entity.getUsername(), sourcePaths, PrivilegeType.READ_SCHEMA);
}
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- return checkTimeSeriesPermission(entity, targetPaths, PrivilegeType.WRITE_SCHEMA);
+ return checkTimeSeriesPermission(
+ entity.getUsername(), targetPaths, PrivilegeType.WRITE_SCHEMA);
}
return status;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java
index 3ce14c2fd47..15a00ebe4e0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java
@@ -32,7 +32,6 @@ import org.apache.tsfile.file.metadata.IDeviceID;
import java.util.Collection;
import java.util.List;
-import java.util.function.Supplier;
import static org.apache.iotdb.db.auth.AuthorityChecker.SUCCEED;
@@ -122,7 +121,7 @@ public class AllowAllAccessControl implements AccessControl {
@Override
public TSStatus checkFullPathWriteDataPermission(
- IAuditEntity auditEntity, IDeviceID device, String measurementId) {
+ IAuditEntity entity, IDeviceID device, String measurementId) {
return SUCCEED;
}
@@ -132,7 +131,7 @@ public class AllowAllAccessControl implements AccessControl {
}
@Override
- public TSStatus checkCanAlterTemplate(IAuditEntity entity, Supplier<String> auditObject) {
+ public TSStatus checkCanAlterTemplate(IAuditEntity entity) {
return SUCCEED;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/ITableAuthCheckerImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/ITableAuthCheckerImpl.java
index 92262b6dd0c..b2c86f601a1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/ITableAuthCheckerImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/ITableAuthCheckerImpl.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.security;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.audit.AuditEventType;
+import org.apache.iotdb.commons.audit.AuditLogFields;
import org.apache.iotdb.commons.audit.AuditLogOperation;
import org.apache.iotdb.commons.audit.IAuditEntity;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
@@ -31,7 +32,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectN
import org.apache.iotdb.rpc.TSStatusCode;
import java.util.Collection;
-import java.util.function.Supplier;
import static org.apache.iotdb.commons.schema.table.Audit.TABLE_MODEL_AUDIT_DATABASE;
@@ -51,7 +51,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(true),
- () -> databaseName);
+ databaseName);
return;
}
// Information_schema is visible to any user
@@ -61,7 +61,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(true),
- () -> databaseName);
+ databaseName);
return;
}
@@ -72,7 +72,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(true),
- () -> databaseName);
+ databaseName);
return;
} else {
recordAuditLog(
@@ -80,7 +80,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(false),
- () -> databaseName);
+ databaseName);
throw new AccessDeniedException("DATABASE " + databaseName);
}
}
@@ -91,7 +91,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(true),
- () -> databaseName);
+ databaseName);
return;
}
if (!AuthorityChecker.checkDBVisible(userName, databaseName)) {
@@ -100,7 +100,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(false),
- () -> databaseName);
+ databaseName);
throw new AccessDeniedException("DATABASE " + databaseName);
}
recordAuditLog(
@@ -108,7 +108,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(true),
- () -> databaseName);
+ databaseName);
}
@Override
@@ -130,7 +130,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(privilege.getAuditLogOperation())
.setPrivilegeType(privilege.getPrivilegeType())
.setResult(true),
- () -> databaseName);
+ databaseName);
return;
}
@@ -140,7 +140,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(privilege.getAuditLogOperation())
.setPrivilegeType(privilege.getPrivilegeType())
.setResult(true),
- () -> databaseName);
+ databaseName);
return;
}
@@ -150,7 +150,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
userName, databaseName, privilege.getPrivilegeType()),
privilege.getPrivilegeType(),
databaseName);
- recordAuditLogViaAuthenticationResult(() -> databaseName, privilege, auditEntity, result);
+ recordAuditLogViaAuthenticationResult(databaseName, privilege, auditEntity, result);
}
private static void checkAuditDatabase(
@@ -170,7 +170,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(privilege.getAuditLogOperation())
.setPrivilegeType(privilege.getPrivilegeType())
.setResult(false),
- () -> databaseName);
+ databaseName);
throw new AccessDeniedException(
String.format("The database '%s' is read-only.", TABLE_MODEL_AUDIT_DATABASE));
}
@@ -186,21 +186,24 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.SELECT)
.setResult(false),
- () -> TABLE_MODEL_AUDIT_DATABASE);
+ TABLE_MODEL_AUDIT_DATABASE);
AUDIT_LOGGER.log(
- auditEntity
- .setAuditEventType(AuditEventType.OBJECT_AUTHENTICATION)
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.SELECT)
- .setResult(false)
- .setDatabase(TABLE_MODEL_AUDIT_DATABASE),
- () ->
- String.format(
- OBJECT_AUTHENTICATION_AUDIT_STR,
- userName,
- auditEntity.getUserId(),
- TABLE_MODEL_AUDIT_DATABASE,
- false));
+ new AuditLogFields(
+ userName,
+ auditEntity.getUserId(),
+ auditEntity.getCliHostname(),
+ AuditEventType.OBJECT_AUTHENTICATION,
+ AuditLogOperation.QUERY,
+ PrivilegeType.SELECT,
+ false,
+ TABLE_MODEL_AUDIT_DATABASE,
+ auditEntity.getSqlString()),
+ String.format(
+ OBJECT_AUTHENTICATION_AUDIT_STR,
+ userName,
+ auditEntity.getUserId(),
+ TABLE_MODEL_AUDIT_DATABASE,
+ false));
throw new AccessDeniedException(
String.format(
"The database '%s' can only be queried by AUDIT admin.", TABLE_MODEL_AUDIT_DATABASE));
@@ -210,7 +213,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.SELECT)
.setResult(true),
- () -> TABLE_MODEL_AUDIT_DATABASE);
+ TABLE_MODEL_AUDIT_DATABASE);
}
@Override
@@ -225,7 +228,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(privilege.getAuditLogOperation())
.setPrivilegeType(privilege.getPrivilegeType())
.setResult(true),
- () -> databaseName);
+ databaseName);
return;
}
TSStatus result =
@@ -234,7 +237,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
userName, databaseName, privilege.getPrivilegeType()),
privilege.getPrivilegeType(),
databaseName);
- recordAuditLogViaAuthenticationResult(() -> databaseName, privilege, auditEntity, result);
+ recordAuditLogViaAuthenticationResult(databaseName, privilege, auditEntity, result);
}
@Override
@@ -243,14 +246,13 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
QualifiedObjectName tableName,
TableModelPrivilege privilege,
IAuditEntity auditEntity) {
- auditEntity.setDatabase(tableName.getDatabaseName());
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
recordAuditLog(
auditEntity
.setAuditLogOperation(privilege.getAuditLogOperation())
.setPrivilegeType(privilege.getPrivilegeType())
.setResult(true),
- tableName::getObjectName);
+ tableName.getObjectName());
return;
}
TSStatus result =
@@ -263,7 +265,8 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
privilege.getPrivilegeType(),
tableName.getDatabaseName(),
tableName.getObjectName());
- recordAuditLogViaAuthenticationResult(tableName::getObjectName, privilege, auditEntity, result);
+ recordAuditLogViaAuthenticationResult(
+ tableName.getObjectName(), privilege, auditEntity, result);
}
@Override
@@ -278,7 +281,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(privilege.getAuditLogOperation())
.setPrivilegeType(privilege.getPrivilegeType())
.setResult(true),
- tableName::getObjectName);
+ tableName.getObjectName());
return;
}
TSStatus result =
@@ -291,7 +294,8 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
privilege.getPrivilegeType(),
tableName.getDatabaseName(),
tableName.getObjectName());
- recordAuditLogViaAuthenticationResult(tableName::getObjectName, privilege, auditEntity, result);
+ recordAuditLogViaAuthenticationResult(
+ tableName.getObjectName(), privilege, auditEntity, result);
}
@Override
@@ -314,7 +318,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.CONTROL)
.setPrivilegeType(PrivilegeType.SYSTEM)
.setResult(true),
- tableName::getObjectName);
+ tableName.getObjectName());
return true;
}
recordAuditLog(
@@ -322,21 +326,20 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.CONTROL)
.setPrivilegeType(PrivilegeType.SYSTEM)
.setResult(false),
- tableName::getObjectName);
+ tableName.getObjectName());
return false;
}
@Override
public void checkTableVisibility(
String userName, QualifiedObjectName tableName, IAuditEntity auditEntity) {
- auditEntity.setDatabase(tableName.getDatabaseName());
if (AuthorityChecker.SUPER_USER_ID == auditEntity.getUserId()) {
recordAuditLog(
auditEntity
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(true),
- tableName::getObjectName);
+ tableName.getObjectName());
return;
}
@@ -348,7 +351,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(false),
- tableName::getObjectName);
+ tableName.getObjectName());
throw new AccessDeniedException("TABLE " + tableName);
}
@@ -358,7 +361,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(true),
- tableName::getObjectName);
+ tableName.getObjectName());
return;
}
if (!AuthorityChecker.checkTableVisible(
@@ -368,7 +371,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(AuditLogOperation.QUERY)
.setPrivilegeType(PrivilegeType.READ_SCHEMA)
.setResult(false),
- tableName::getObjectName);
+ tableName.getObjectName());
throw new AccessDeniedException("TABLE " + tableName);
}
}
@@ -382,14 +385,14 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(privilege.getAuditLogOperation())
.setPrivilegeType(privilege.getPrivilegeType())
.setResult(true),
- () -> AuthorityChecker.ANY_SCOPE);
+ AuthorityChecker.ANY_SCOPE);
return;
}
TSStatus result =
AuthorityChecker.getTSStatus(
AuthorityChecker.checkSystemPermission(userName, privilege.getPrivilegeType()),
privilege.getPrivilegeType());
- recordAuditLogViaAuthenticationResult(() -> userName, privilege, auditEntity, result);
+ recordAuditLogViaAuthenticationResult(userName, privilege, auditEntity, result);
}
@Override
@@ -402,7 +405,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(privilege.getAuditLogOperation())
.setPrivilegeType(privilege)
.setResult(true),
- () -> AuthorityChecker.ANY_SCOPE);
+ AuthorityChecker.ANY_SCOPE);
}
return;
}
@@ -423,7 +426,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(privilege.getAuditLogOperation())
.setPrivilegeType(privilege.getPrivilegeType())
.setResult(true),
- () -> AuthorityChecker.ANY_SCOPE);
+ AuthorityChecker.ANY_SCOPE);
return;
}
TSStatus result =
@@ -432,7 +435,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
userName, privilege.getPrivilegeType()),
privilege.getPrivilegeType());
recordAuditLogViaAuthenticationResult(
- () -> AuthorityChecker.ANY_SCOPE, privilege, auditEntity, result);
+ AuthorityChecker.ANY_SCOPE, privilege, auditEntity, result);
}
@Override
@@ -444,7 +447,7 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
.setAuditLogOperation(privilege.getAuditLogOperation())
.setPrivilegeType(privilege.getPrivilegeType())
.setResult(true),
- () -> AuthorityChecker.ANY_SCOPE);
+ AuthorityChecker.ANY_SCOPE);
return;
}
TSStatus result =
@@ -453,11 +456,11 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
userName, privilege.getPrivilegeType()),
privilege.getPrivilegeType());
recordAuditLogViaAuthenticationResult(
- () -> AuthorityChecker.ANY_SCOPE, privilege, auditEntity, result);
+ AuthorityChecker.ANY_SCOPE, privilege, auditEntity, result);
}
private void recordAuditLogViaAuthenticationResult(
- Supplier<String> auditObject,
+ String auditObject,
TableModelPrivilege privilege,
IAuditEntity auditEntity,
TSStatus result) {
@@ -478,15 +481,23 @@ public class ITableAuthCheckerImpl implements ITableAuthChecker {
auditObject);
}
- public static void recordAuditLog(IAuditEntity auditEntity, Supplier<String> auditObject) {
+ private static void recordAuditLog(IAuditEntity auditEntity, String auditObject) {
AUDIT_LOGGER.log(
- auditEntity.setAuditEventType(AuditEventType.OBJECT_AUTHENTICATION),
- () ->
- String.format(
- OBJECT_AUTHENTICATION_AUDIT_STR,
- auditEntity.getUsername(),
- auditEntity.getUserId(),
- auditObject.get(),
- true));
+ new AuditLogFields(
+ auditEntity.getUsername(),
+ auditEntity.getUserId(),
+ auditEntity.getCliHostname(),
+ AuditEventType.OBJECT_AUTHENTICATION,
+ auditEntity.getAuditLogOperation(),
+ auditEntity.getPrivilegeType(),
+ auditEntity.getResult(),
+ auditEntity.getDatabase(),
+ auditEntity.getSqlString()),
+ String.format(
+ OBJECT_AUTHENTICATION_AUDIT_STR,
+ auditEntity.getUsername(),
+ auditEntity.getUserId(),
+ auditObject,
+ true));
}
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java
index dc92249a0bb..52e929d7903 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java
@@ -25,9 +25,6 @@ import org.apache.iotdb.commons.audit.IAuditEntity;
import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import java.util.Collections;
-import java.util.List;
-
public class TreeAccessCheckContext implements IAuditEntity {
private final UserEntity userEntity;
@@ -53,7 +50,7 @@ public class TreeAccessCheckContext implements IAuditEntity {
private AuditEventType auditEventType;
private AuditLogOperation auditLogOperation;
- private List<PrivilegeType> privilegeTypeList;
+ private PrivilegeType privilegeType;
private boolean result;
private String database;
private String sqlString;
@@ -81,24 +78,13 @@ public class TreeAccessCheckContext implements IAuditEntity {
}
@Override
- public List<PrivilegeType> getPrivilegeTypes() {
- return privilegeTypeList;
- }
-
- @Override
- public String getPrivilegeTypeString() {
- return privilegeTypeList.toString();
+ public PrivilegeType getPrivilegeType() {
+ return privilegeType;
}
@Override
public IAuditEntity setPrivilegeType(PrivilegeType privilegeType) {
- this.privilegeTypeList = Collections.singletonList(privilegeType);
- return this;
- }
-
- @Override
- public IAuditEntity setPrivilegeTypes(List<PrivilegeType> privilegeTypes) {
- this.privilegeTypeList = privilegeTypes;
+ this.privilegeType = privilegeType;
return this;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
index 1f5df01d202..344a05f6db8 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
@@ -20,17 +20,12 @@
package org.apache.iotdb.db.queryengine.plan.relational.security;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.audit.AuditEventType;
-import org.apache.iotdb.commons.audit.AuditLogOperation;
import org.apache.iotdb.commons.audit.IAuditEntity;
import org.apache.iotdb.commons.auth.AuthException;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.conf.IoTDBConstant;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.path.PathPatternTreeUtils;
-import org.apache.iotdb.db.audit.DNAuditLogger;
import org.apache.iotdb.db.auth.AuthorityChecker;
import org.apache.iotdb.db.queryengine.plan.statement.AuthorType;
import org.apache.iotdb.db.queryengine.plan.statement.AuthorityInformationStatement;
@@ -159,11 +154,9 @@ import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
-import java.util.function.Supplier;
import java.util.stream.Collectors;
import static org.apache.iotdb.commons.schema.table.Audit.TREE_MODEL_AUDIT_DATABASE;
@@ -174,11 +167,6 @@ import static org.apache.iotdb.db.queryengine.plan.relational.security.AccessCon
public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAccessCheckContext> {
- private static final DNAuditLogger AUDIT_LOGGER = DNAuditLogger.getInstance();
-
- private static final String OBJECT_AUTHENTICATION_AUDIT_STR =
- "User %s (ID=%d) requests authority on object %s with result %s";
-
@Override
public TSStatus visitNode(StatementNode node, TreeAccessCheckContext context) {
throw new IllegalStateException("Each operation should have permission check.");
@@ -187,126 +175,66 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitAuthorityInformation(
AuthorityInformationStatement statement, TreeAccessCheckContext context) {
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.READ_SCHEMA);
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return SUCCEED;
}
try {
statement.setAuthorityScope(
AuthorityChecker.getAuthorizedPathTree(context.getUsername(), PrivilegeType.READ_SCHEMA));
} catch (AuthException e) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(e.getCode().getStatusCode());
}
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
}
- public static List<MeasurementPath> getIntersectedPaths4Pipe(
- final List<MeasurementPath> paths, final TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.QUERY).setPrivilegeType(PrivilegeType.READ_DATA);
- if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> paths.stream().distinct().collect(Collectors.toList()).toString());
- return paths;
- }
- try {
- final PathPatternTree originalTree = new PathPatternTree();
- paths.forEach(originalTree::appendPathPattern);
- originalTree.constructTree();
- final PathPatternTree tree =
- AuthorityChecker.getAuthorizedPathTree(context.getUsername(), PrivilegeType.READ_DATA);
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> paths.stream().distinct().collect(Collectors.toList()).toString());
- return originalTree.intersectWithFullPathPrefixTree(tree).getAllPathPatterns(true);
- } catch (AuthException e) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false),
- () -> paths.stream().distinct().collect(Collectors.toList()).toString());
- return Collections.emptyList();
- }
- }
-
// ====================== template related =================================
@Override
public TSStatus visitCreateSchemaTemplate(
CreateSchemaTemplateStatement createTemplateStatement, TreeAccessCheckContext context) {
- return checkSystemAuth(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- () -> createTemplateStatement.getMeasurements().toString());
+ return checkSystemAuth(context.getUsername());
}
@Override
public TSStatus visitSetSchemaTemplate(
SetSchemaTemplateStatement setSchemaTemplateStatement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.DDL);
// root.__audit can never be set template
- TSStatus status =
- checkWriteOnReadOnlyPath(
- context.setPrivilegeType(PrivilegeType.WRITE_DATA),
- setSchemaTemplateStatement.getPath());
+ TSStatus status = checkWriteOnReadOnlyPath(setSchemaTemplateStatement.getPath());
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
- return checkSystemAuth(context, () -> setSchemaTemplateStatement.getPath().toString());
+ return checkSystemAuth(context.getUsername());
}
@Override
public TSStatus visitActivateTemplate(
ActivateTemplateStatement statement, TreeAccessCheckContext context) {
return checkTimeSeriesPermission(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- statement.getPaths(),
- PrivilegeType.WRITE_SCHEMA);
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
@Override
public TSStatus visitBatchActivateTemplate(
BatchActivateTemplateStatement statement, TreeAccessCheckContext context) {
return checkTimeSeriesPermission(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- statement.getPaths(),
- PrivilegeType.WRITE_SCHEMA);
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
@Override
public TSStatus visitInternalBatchActivateTemplate(
InternalBatchActivateTemplateStatement statement, TreeAccessCheckContext context) {
return checkTimeSeriesPermission(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- statement.getPaths(),
- PrivilegeType.WRITE_SCHEMA);
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
private TSStatus checkTemplateShowRelated(
ShowSchemaTemplateStatement statement, TreeAccessCheckContext context) {
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
statement.setCanSeeAll(true);
- recordObjectAuthenticationAuditLog(
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.SYSTEM)
- .setResult(true),
- () -> statement.getPaths().toString());
return SUCCEED;
}
// own SYSTEM can see all, otherwise can only see PATHS that user has READ_SCHEMA auth
- if (!checkHasGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.QUERY),
- PrivilegeType.SYSTEM,
- () -> statement.getPaths().toString())) {
+ if (!checkHasGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM)) {
statement.setCanSeeAll(false);
return visitAuthorityInformation(statement, context);
} else {
@@ -345,54 +273,38 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
public TSStatus visitDeactivateTemplate(
DeactivateTemplateStatement statement, TreeAccessCheckContext context) {
return checkTimeSeriesPermission(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- statement.getPaths(),
- PrivilegeType.WRITE_SCHEMA);
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
@Override
public TSStatus visitUnsetSchemaTemplate(
UnsetSchemaTemplateStatement unsetSchemaTemplateStatement, TreeAccessCheckContext context) {
- return checkSystemAuth(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- () -> unsetSchemaTemplateStatement.getPaths().toString());
+ return checkSystemAuth(context.getUsername());
}
@Override
public TSStatus visitDropSchemaTemplate(
DropSchemaTemplateStatement dropSchemaTemplateStatement, TreeAccessCheckContext context) {
- return checkSystemAuth(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- () -> dropSchemaTemplateStatement.getPaths().toString());
+ return checkSystemAuth(context.getUsername());
}
@Override
public TSStatus visitAlterSchemaTemplate(
AlterSchemaTemplateStatement alterSchemaTemplateStatement, TreeAccessCheckContext context) {
- if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
- return SUCCEED;
- }
- return checkCanAlterTemplate(context, () -> alterSchemaTemplateStatement.getPaths().toString());
+ return checkCanAlterTemplate(context.getUserEntity());
}
- public TSStatus checkCanAlterTemplate(IAuditEntity entity, Supplier<String> auditObject) {
+ public TSStatus checkCanAlterTemplate(IAuditEntity entity) {
if (AuthorityChecker.SUPER_USER.equals(entity.getUsername())) {
- recordObjectAuthenticationAuditLog(
- entity
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.EXTEND_TEMPLATE)
- .setResult(true),
- auditObject);
return SUCCEED;
}
- return checkGlobalAuth(entity, PrivilegeType.EXTEND_TEMPLATE, auditObject);
+ return checkGlobalAuth(entity.getUsername(), PrivilegeType.EXTEND_TEMPLATE);
}
// ============================= timeseries view related ===============
@Override
public TSStatus visitCreateLogicalView(
CreateLogicalViewStatement statement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.DDL);
final List<PartialPath> paths =
Objects.nonNull(statement.getTargetPathList())
? statement.getTargetPathList()
@@ -405,8 +317,6 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
// audit db is read-only
if (includeByAuditTreeDB(path)
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(
- context.setPrivilegeType(PrivilegeType.AUDIT).setResult(false), path::toString);
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
@@ -417,15 +327,9 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
if (statement.getQueryStatement() != null) {
statement.getQueryStatement().setCanSeeAuditDB(true);
}
- recordObjectAuthenticationAuditLog(
- context
- .setPrivilegeTypes(
- Arrays.asList(PrivilegeType.WRITE_SCHEMA, PrivilegeType.READ_SCHEMA))
- .setResult(true),
- paths::toString);
return SUCCEED;
}
- if (!checkHasGlobalAuth(context, PrivilegeType.AUDIT, paths::toString)) {
+ if (!checkHasGlobalAuth(context.getUsername(), PrivilegeType.AUDIT)) {
statement.setCanSeeAuditDB(false);
if (statement.getQueryStatement() != null) {
statement.getQueryStatement().setCanSeeAuditDB(false);
@@ -435,16 +339,20 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
List<PartialPath> sourcePathList = statement.getSourcePaths().fullPathList;
if (sourcePathList != null) {
- status = checkTimeSeriesPermission(context, sourcePathList, PrivilegeType.READ_SCHEMA);
+ status =
+ checkTimeSeriesPermission(
+ context.getUsername(), sourcePathList, PrivilegeType.READ_SCHEMA);
}
QueryStatement queryStatement = statement.getQueryStatement();
if (queryStatement != null && status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
sourcePathList = queryStatement.getPaths();
- status = checkTimeSeriesPermission(context, sourcePathList, PrivilegeType.READ_SCHEMA);
+ status =
+ checkTimeSeriesPermission(
+ context.getUsername(), sourcePathList, PrivilegeType.READ_SCHEMA);
}
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- return checkTimeSeriesPermission(context, paths, PrivilegeType.WRITE_SCHEMA);
+ return checkTimeSeriesPermission(context.getUsername(), paths, PrivilegeType.WRITE_SCHEMA);
}
return status;
}
@@ -453,9 +361,7 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
public TSStatus visitDeleteLogicalView(
DeleteLogicalViewStatement statement, TreeAccessCheckContext context) {
return checkTimeSeriesPermission(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- statement.getPaths(),
- PrivilegeType.WRITE_SCHEMA);
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
@Override
@@ -467,22 +373,14 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitAlterLogicalView(
AlterLogicalViewStatement statement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.DDL);
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
statement.setCanSeeAuditDB(true);
if (statement.getQueryStatement() != null) {
statement.getQueryStatement().setCanSeeAuditDB(true);
}
- recordObjectAuthenticationAuditLog(
- context
- .setPrivilegeTypes(
- Arrays.asList(PrivilegeType.READ_SCHEMA, PrivilegeType.WRITE_SCHEMA))
- .setResult(true),
- () -> statement.getSourcePaths().fullPathList.toString());
return SUCCEED;
}
- if (!checkHasGlobalAuth(
- context, PrivilegeType.AUDIT, (() -> statement.getSourcePaths().fullPathList.toString()))) {
+ if (!checkHasGlobalAuth(context.getUsername(), PrivilegeType.AUDIT)) {
statement.setCanSeeAuditDB(false);
if (statement.getQueryStatement() != null) {
statement.getQueryStatement().setCanSeeAuditDB(false);
@@ -492,17 +390,21 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
List<PartialPath> sourcePathList = statement.getSourcePaths().fullPathList;
if (sourcePathList != null) {
- status = checkTimeSeriesPermission(context, sourcePathList, PrivilegeType.READ_SCHEMA);
+ status =
+ checkTimeSeriesPermission(
+ context.getUsername(), sourcePathList, PrivilegeType.READ_SCHEMA);
}
QueryStatement queryStatement = statement.getQueryStatement();
if (queryStatement != null && status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
sourcePathList = queryStatement.getPaths();
- status = checkTimeSeriesPermission(context, sourcePathList, PrivilegeType.READ_SCHEMA);
+ status =
+ checkTimeSeriesPermission(
+ context.getUsername(), sourcePathList, PrivilegeType.READ_SCHEMA);
}
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return checkTimeSeriesPermission(
- context, statement.getTargetPathList(), PrivilegeType.WRITE_SCHEMA);
+ context.getUsername(), statement.getTargetPathList(), PrivilegeType.WRITE_SCHEMA);
}
return status;
}
@@ -510,18 +412,14 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitRenameLogicalView(
RenameLogicalViewStatement statement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.DDL);
// audit db is read-only
if (includeByAuditTreeDB(statement.getNewName())
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(
- context.setPrivilegeType(PrivilegeType.WRITE_SCHEMA).setResult(false),
- () -> statement.getOldName().toString());
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
return checkTimeSeriesPermission(
- context,
+ context.getUsername(),
ImmutableList.of(statement.getOldName(), statement.getNewName()),
PrivilegeType.WRITE_SCHEMA);
}
@@ -533,25 +431,16 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
switch (authorType) {
case CREATE_USER:
case DROP_USER:
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- PrivilegeType.MANAGE_USER,
- statement::getUserName);
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MANAGE_USER);
case UPDATE_USER:
// users can change passwords of themselves
if (statement.getUserName().equals(context.getUsername())) {
return RpcUtils.SUCCESS_STATUS;
}
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- PrivilegeType.MANAGE_USER,
- statement::getUserName);
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MANAGE_USER);
case LIST_USER:
- if (checkHasGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.QUERY),
- PrivilegeType.MANAGE_USER,
- null)) {
+ if (checkHasGlobalAuth(context.getUsername(), PrivilegeType.MANAGE_USER)) {
return RpcUtils.SUCCESS_STATUS;
}
statement.setUserName(context.getUsername());
@@ -561,26 +450,17 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
if (context.getUsername().equals(statement.getUserName())) {
return RpcUtils.SUCCESS_STATUS;
}
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.QUERY),
- PrivilegeType.MANAGE_USER,
- statement::getUserName);
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MANAGE_USER);
case LIST_ROLE_PRIVILEGE:
if (!AuthorityChecker.checkRole(context.getUsername(), statement.getRoleName())) {
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.QUERY),
- PrivilegeType.MANAGE_ROLE,
- statement::getRoleName);
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MANAGE_ROLE);
} else {
return SUCCEED;
}
case LIST_ROLE:
- if (checkHasGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.QUERY),
- PrivilegeType.MANAGE_ROLE,
- null)) {
+ if (checkHasGlobalAuth(context.getUsername(), PrivilegeType.MANAGE_ROLE)) {
return SUCCEED;
}
// list roles of other user is not allowed
@@ -595,31 +475,20 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
case DROP_ROLE:
case GRANT_USER_ROLE:
case REVOKE_USER_ROLE:
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- PrivilegeType.MANAGE_ROLE,
- statement::getRoleName);
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MANAGE_ROLE);
case REVOKE_USER:
case GRANT_USER:
case GRANT_ROLE:
case REVOKE_ROLE:
- context.setAuditLogOperation(AuditLogOperation.DDL);
- Supplier<String> auditObject =
- () ->
- authorType == AuthorType.REVOKE_USER || authorType == AuthorType.GRANT_USER
- ? statement.getUserName()
- : statement.getRoleName();
- if (checkHasGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- PrivilegeType.SECURITY,
- auditObject)) {
+ if (checkHasGlobalAuth(context.getUsername(), PrivilegeType.SECURITY)) {
return RpcUtils.SUCCESS_STATUS;
}
+
for (String s : statement.getPrivilegeList()) {
PrivilegeType privilegeType = PrivilegeType.valueOf(s.toUpperCase());
if (privilegeType.isSystemPrivilege()) {
- if (!checkHasGlobalAuth(context, privilegeType, auditObject)) {
+ if (!checkHasGlobalAuth(context.getUsername(), privilegeType)) {
return AuthorityChecker.getTSStatus(
false,
"Has no permission to execute "
@@ -650,214 +519,184 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitCreateContinuousQuery(
CreateContinuousQueryStatement statement, TreeAccessCheckContext context) {
- return checkCQManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), () -> statement.getPaths().toString());
+ return checkCQManagement(context.getUsername());
}
@Override
public TSStatus visitDropContinuousQuery(
DropContinuousQueryStatement statement, TreeAccessCheckContext context) {
- return checkCQManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), () -> statement.getPaths().toString());
+ return checkCQManagement(context.getUsername());
}
@Override
public TSStatus visitShowContinuousQueries(
ShowContinuousQueriesStatement statement, TreeAccessCheckContext context) {
- return checkCQManagement(
- context.setAuditLogOperation(AuditLogOperation.QUERY),
- () -> statement.getPaths().toString());
+ return checkCQManagement(context.getUsername());
}
- private TSStatus checkCQManagement(IAuditEntity auditEntity, Supplier<String> auditObject) {
- if (AuthorityChecker.SUPER_USER.equals(auditEntity.getUsername())) {
- recordObjectAuthenticationAuditLog(
- auditEntity.setPrivilegeType(PrivilegeType.USE_CQ).setResult(true), auditObject);
+ private TSStatus checkCQManagement(String userName) {
+ if (AuthorityChecker.SUPER_USER.equals(userName)) {
return SUCCEED;
}
- return checkGlobalAuth(auditEntity, PrivilegeType.USE_CQ, auditObject);
+ return checkGlobalAuth(userName, PrivilegeType.USE_CQ);
}
// =================================== UDF related ====================================
@Override
public TSStatus visitCreateFunction(
CreateFunctionStatement statement, TreeAccessCheckContext context) {
- return checkUDFManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getUdfName);
+ return checkUDFManagement(context.getUsername());
}
@Override
public TSStatus visitDropFunction(
DropFunctionStatement statement, TreeAccessCheckContext context) {
- return checkUDFManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getUdfName);
+ return checkUDFManagement(context.getUsername());
}
@Override
public TSStatus visitShowFunctions(
ShowFunctionsStatement statement, TreeAccessCheckContext context) {
// anyone can show functions
- recordObjectAuthenticationAuditLog(
- context.setAuditLogOperation(AuditLogOperation.QUERY).setResult(true), null);
return SUCCEED;
}
- private TSStatus checkUDFManagement(IAuditEntity auditEntity, Supplier<String> auditObject) {
- return checkGlobalAuth(auditEntity, PrivilegeType.USE_UDF, auditObject);
+ private TSStatus checkUDFManagement(String userName) {
+ return checkGlobalAuth(userName, PrivilegeType.USE_UDF);
}
// =================================== model related ====================================
@Override
public TSStatus visitCreateModel(CreateModelStatement statement, TreeAccessCheckContext context) {
- return checkModelManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getModelId);
+ return checkModelManagement(context.getUsername());
}
@Override
public TSStatus visitDropModel(DropModelStatement statement, TreeAccessCheckContext context) {
- return checkModelManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getModelId);
+ return checkModelManagement(context.getUsername());
}
@Override
public TSStatus visitCreateTraining(
CreateTrainingStatement createTrainingStatement, TreeAccessCheckContext context) {
- return checkModelManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- createTrainingStatement::getExistingModelId);
+ return checkModelManagement(context.getUsername());
}
@Override
public TSStatus visitUnloadModel(
UnloadModelStatement unloadModelStatement, TreeAccessCheckContext context) {
- return checkModelManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), unloadModelStatement::getModelId);
+ return checkModelManagement(context.getUsername());
}
@Override
public TSStatus visitLoadModel(
LoadModelStatement loadModelStatement, TreeAccessCheckContext context) {
- return checkModelManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), loadModelStatement::getModelId);
+ return checkModelManagement(context.getUsername());
}
@Override
public TSStatus visitShowAIDevices(
ShowAIDevicesStatement showAIDevicesStatement, TreeAccessCheckContext context) {
- return checkModelManagement(context.setAuditLogOperation(AuditLogOperation.DDL), () -> "");
+ return checkModelManagement(context.getUsername());
}
@Override
public TSStatus visitShowLoadedModels(
ShowLoadedModelsStatement showLoadedModelsStatement, TreeAccessCheckContext context) {
- return checkModelManagement(context.setAuditLogOperation(AuditLogOperation.DDL), () -> "");
+ return SUCCEED;
}
@Override
public TSStatus visitShowModels(ShowModelsStatement statement, TreeAccessCheckContext context) {
- return checkModelManagement(context.setAuditLogOperation(AuditLogOperation.DDL), () -> "");
+ return SUCCEED;
}
- private TSStatus checkModelManagement(IAuditEntity auditEntity, Supplier<String> auditObject) {
- return checkGlobalAuth(auditEntity, PrivilegeType.USE_MODEL, auditObject);
+ private TSStatus checkModelManagement(String userName) {
+ return checkGlobalAuth(userName, PrivilegeType.USE_MODEL);
}
// ================================ pipe plugin related ==================================
@Override
public TSStatus visitCreatePipePlugin(
CreatePipePluginStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), () -> statement.getPaths().toString());
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitDropPipePlugin(
DropPipePluginStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), () -> statement.getPaths().toString());
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitShowPipePlugins(
ShowPipePluginsStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), () -> statement.getPaths().toString());
+ return checkPipeManagement(context.getUsername());
}
// =============================== pipe related ========================================
@Override
public TSStatus visitCreatePipe(CreatePipeStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getPipeName);
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitShowPipes(ShowPipesStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getPipeName);
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitDropPipe(DropPipeStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getPipeName);
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitAlterPipe(AlterPipeStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getPipeName);
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitStartPipe(StartPipeStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getPipeName);
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitStopPipe(StopPipeStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getPipeName);
+ return checkPipeManagement(context.getUsername());
}
- private TSStatus checkPipeManagement(IAuditEntity auditEntity, Supplier<String> auditObject) {
- return checkGlobalAuth(auditEntity, PrivilegeType.USE_PIPE, auditObject);
+ private TSStatus checkPipeManagement(String userName) {
+ return checkGlobalAuth(userName, PrivilegeType.USE_PIPE);
}
// =============================== subscription related ========================================
@Override
public TSStatus visitCreateTopic(CreateTopicStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getTopicName);
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitShowTopics(ShowTopicsStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getTopicName);
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitDropTopic(DropTopicStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getTopicName);
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitShowSubscriptions(
ShowSubscriptionsStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getTopicName);
+ return checkPipeManagement(context.getUsername());
}
@Override
public TSStatus visitDropSubscription(
DropSubscriptionStatement statement, TreeAccessCheckContext context) {
- return checkPipeManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getSubscriptionId);
+ return checkPipeManagement(context.getUsername());
}
// ======================= trigger related ================================
@@ -865,150 +704,102 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
public TSStatus visitCreateTrigger(
CreateTriggerStatement statement, TreeAccessCheckContext context) {
if (TREE_MODEL_AUDIT_DATABASE_PATH.include(statement.getPathPattern())) {
- recordObjectAuthenticationAuditLog(
- context
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setPrivilegeType(PrivilegeType.USE_TRIGGER)
- .setResult(false),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
- return checkTriggerManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
+ return checkTriggerManagement(context.getUsername());
}
@Override
public TSStatus visitDropTrigger(DropTriggerStatement statement, TreeAccessCheckContext context) {
- return checkTriggerManagement(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement::getTriggerName);
+ return checkTriggerManagement(context.getUsername());
}
@Override
public TSStatus visitShowTriggers(
ShowTriggersStatement statement, TreeAccessCheckContext context) {
- return checkTriggerManagement(context.setAuditLogOperation(AuditLogOperation.QUERY), () -> "");
+ return checkTriggerManagement(context.getUsername());
}
- private TSStatus checkTriggerManagement(IAuditEntity auditEntity, Supplier<String> auditObject) {
- if (AuthorityChecker.SUPER_USER.equals(auditEntity.getUsername())) {
- recordObjectAuthenticationAuditLog(
- auditEntity.setPrivilegeType(PrivilegeType.USE_TRIGGER).setResult(true), auditObject);
+ private TSStatus checkTriggerManagement(String userName) {
+ if (AuthorityChecker.SUPER_USER.equals(userName)) {
return SUCCEED;
}
- return checkGlobalAuth(auditEntity, PrivilegeType.USE_TRIGGER, auditObject);
+ return checkGlobalAuth(userName, PrivilegeType.USE_TRIGGER);
}
// ============================== database related ===========================
@Override
public TSStatus visitSetDatabase(
DatabaseSchemaStatement statement, TreeAccessCheckContext context) {
- return checkCreateOrAlterDatabasePermission(
- context.setAuditLogOperation(AuditLogOperation.DDL), statement.getDatabasePath());
+ return checkCreateOrAlterDatabasePermission(context.getUsername(), statement.getDatabasePath());
}
@Override
public TSStatus visitAlterDatabase(
DatabaseSchemaStatement databaseSchemaStatement, TreeAccessCheckContext context) {
return checkCreateOrAlterDatabasePermission(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- databaseSchemaStatement.getDatabasePath());
+ context.getUsername(), databaseSchemaStatement.getDatabasePath());
}
@Override
- public TSStatus visitShowDatabase(
+ public TSStatus visitShowStorageGroup(
ShowDatabaseStatement showDatabaseStatement, TreeAccessCheckContext context) {
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setDatabase(
- showDatabaseStatement.getPaths().stream()
- .distinct()
- .collect(Collectors.toList())
- .toString())
- .setPrivilegeType(PrivilegeType.MANAGE_DATABASE);
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
- recordObjectAuthenticationAuditLog(
- context.setResult(true), () -> showDatabaseStatement.getPathPattern().toString());
return SUCCEED;
}
- setCanSeeAuditDB(showDatabaseStatement, context);
+ setCanSeeAuditDB(showDatabaseStatement, context.getUsername());
return checkShowOrCountDatabasePermission(showDatabaseStatement, context);
}
@Override
- public TSStatus visitCountDatabase(
+ public TSStatus visitCountStorageGroup(
CountDatabaseStatement countDatabaseStatement, TreeAccessCheckContext context) {
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
return SUCCEED;
}
- setCanSeeAuditDB(countDatabaseStatement, context);
+ setCanSeeAuditDB(countDatabaseStatement, context.getUsername());
return checkShowOrCountDatabasePermission(countDatabaseStatement, context);
}
@Override
- public TSStatus visitDeleteDatabase(
+ public TSStatus visitDeleteStorageGroup(
DeleteDatabaseStatement statement, TreeAccessCheckContext context) {
- context
- .setAuditLogOperation(AuditLogOperation.DDL)
- .setDatabase(statement.getPrefixPath().toString());
for (String prefixPath : statement.getPrefixPath()) {
// root.__audit can never be deleted
if (TREE_MODEL_AUDIT_DATABASE.equals(prefixPath)) {
- recordObjectAuthenticationAuditLog(
- context.setPrivilegeType(PrivilegeType.MANAGE_DATABASE).setResult(false),
- () -> prefixPath);
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
}
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
- recordObjectAuthenticationAuditLog(
- context.setPrivilegeType(PrivilegeType.MANAGE_DATABASE).setResult(true),
- () -> statement.getPrefixPath().toString());
return SUCCEED;
}
- return checkGlobalAuth(
- context, PrivilegeType.MANAGE_DATABASE, () -> statement.getPrefixPath().toString());
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MANAGE_DATABASE);
}
protected TSStatus checkCreateOrAlterDatabasePermission(
- IAuditEntity auditEntity, PartialPath databaseName) {
- auditEntity
- .setDatabase(databaseName.getFullPath())
- .setPrivilegeType(PrivilegeType.MANAGE_DATABASE)
- .setAuditLogOperation(AuditLogOperation.DDL);
+ String userName, PartialPath databaseName) {
// root.__audit can never be created or alter
if (TREE_MODEL_AUDIT_DATABASE_PATH.equals(databaseName)) {
- recordObjectAuthenticationAuditLog(auditEntity.setResult(false), databaseName::getFullPath);
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
- if (AuthorityChecker.SUPER_USER.equals(auditEntity.getUsername())) {
- recordObjectAuthenticationAuditLog(auditEntity.setResult(true), databaseName::getFullPath);
+ if (AuthorityChecker.SUPER_USER.equals(userName)) {
return SUCCEED;
}
- return checkGlobalAuth(auditEntity, PrivilegeType.MANAGE_DATABASE, databaseName::getFullPath);
+ return checkGlobalAuth(userName, PrivilegeType.MANAGE_DATABASE);
}
private TSStatus checkShowOrCountDatabasePermission(
AuthorityInformationStatement statement, TreeAccessCheckContext context) {
// own SYSTEM/MAINTAIN can see all except for root.__audit, otherwise can only see PATHS that
// user has READ_SCHEMA auth
- if (!checkHasGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.QUERY),
- PrivilegeType.MANAGE_DATABASE,
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString())) {
+ if (!checkHasGlobalAuth(context.getUsername(), PrivilegeType.MANAGE_DATABASE)) {
return visitAuthorityInformation(statement, context);
} else {
- recordObjectAuthenticationAuditLog(
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.MANAGE_DATABASE)
- .setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return SUCCEED;
}
}
@@ -1016,41 +807,35 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
// ==================================== data related ========================================
@Override
public TSStatus visitInsertBase(InsertBaseStatement statement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.DML).setPrivilegeType(PrivilegeType.WRITE_DATA);
+
for (PartialPath path : statement.getDevicePaths()) {
// audit db is read-only
if (includeByAuditTreeDB(path)
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(context.setResult(false), path::toString);
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
}
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return SUCCEED;
}
return checkTimeSeriesPermission(
- context,
+ context.getUsername(),
statement.getPaths().stream().distinct().collect(Collectors.toList()),
PrivilegeType.WRITE_DATA);
}
@Override
public TSStatus visitInsert(InsertStatement statement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.DML).setPrivilegeType(PrivilegeType.WRITE_DATA);
// audit db is read-only
if (includeByAuditTreeDB(statement.getDevice())
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false), () -> statement.getDevice().toString());
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
- return checkTimeSeriesPermission(context, statement.getPaths(), PrivilegeType.WRITE_DATA);
+ return checkTimeSeriesPermission(
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_DATA);
}
@Override
@@ -1061,42 +846,31 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitDeleteData(DeleteDataStatement statement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.DML).setPrivilegeType(PrivilegeType.WRITE_DATA);
for (PartialPath path : statement.getPaths()) {
// audit db is read-only
if (includeByAuditTreeDB(path)
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(context.setResult(false), path::toString);
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
}
- return checkTimeSeriesPermission(context, statement.getPaths(), PrivilegeType.WRITE_DATA);
+ return checkTimeSeriesPermission(
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_DATA);
}
@Override
public TSStatus visitQuery(QueryStatement statement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.QUERY).setPrivilegeType(PrivilegeType.READ_DATA);
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
statement.setCanSeeAuditDB(true);
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return SUCCEED;
}
- setCanSeeAuditDB(statement, context);
+ setCanSeeAuditDB(statement, context.getUsername());
try {
statement.setAuthorityScope(
AuthorityChecker.getAuthorizedPathTree(context.getUsername(), PrivilegeType.READ_DATA));
} catch (AuthException e) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(e.getCode().getStatusCode());
}
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
}
@@ -1113,81 +887,45 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
// ============================= timeseries related =================================
public static TSStatus checkTimeSeriesPermission(
- IAuditEntity context, List<? extends PartialPath> checkedPaths, PrivilegeType permission) {
- context.setPrivilegeType(permission);
- if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
- recordObjectAuthenticationAuditLog(context.setResult(true), checkedPaths::toString);
+ String userName, List<? extends PartialPath> checkedPaths, PrivilegeType permission) {
+ if (AuthorityChecker.SUPER_USER.equals(userName)) {
return SUCCEED;
}
- TSStatus result =
- AuthorityChecker.getTSStatus(
- AuthorityChecker.checkFullPathOrPatternListPermission(
- context.getUsername(), checkedPaths, permission),
- checkedPaths,
- permission);
- if (!AuthorityChecker.INTERNAL_AUDIT_USER.equals(context.getUsername())) {
- // Skip internal auditor
- recordObjectAuthenticationAuditLog(context.setResult(true), checkedPaths::toString);
- }
- return result;
- }
-
- public static List<Integer> checkTimeSeriesPermission4Pipe(
- IAuditEntity context, List<? extends PartialPath> checkedPaths, PrivilegeType permission) {
- context.setPrivilegeType(permission);
- if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
- recordObjectAuthenticationAuditLog(context.setResult(true), checkedPaths::toString);
- return Collections.emptyList();
- }
- final List<Integer> results =
- AuthorityChecker.checkFullPathOrPatternListPermission(
- context.getUsername(), checkedPaths, permission);
- recordObjectAuthenticationAuditLog(context.setResult(true), checkedPaths::toString);
- return results;
+ return AuthorityChecker.getTSStatus(
+ AuthorityChecker.checkFullPathOrPatternListPermission(userName, checkedPaths, permission),
+ checkedPaths,
+ permission);
}
@Override
public TSStatus visitCreateTimeseries(
CreateTimeSeriesStatement statement, TreeAccessCheckContext context) {
- context
- .setPrivilegeType(PrivilegeType.WRITE_SCHEMA)
- .setAuditLogOperation(AuditLogOperation.DDL);
// audit db is read-only
if (includeByAuditTreeDB(statement.getPath())
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
- return checkTimeSeriesPermission(context, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+ return checkTimeSeriesPermission(
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
@Override
public TSStatus visitCreateAlignedTimeseries(
CreateAlignedTimeSeriesStatement statement, TreeAccessCheckContext context) {
- context
- .setPrivilegeType(PrivilegeType.WRITE_SCHEMA)
- .setAuditLogOperation(AuditLogOperation.DDL);
// audit db is read-only
if (includeByAuditTreeDB(statement.getDevicePath())
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
- return checkTimeSeriesPermission(context, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+ return checkTimeSeriesPermission(
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
@Override
public TSStatus visitCreateMultiTimeSeries(
CreateMultiTimeSeriesStatement statement, TreeAccessCheckContext context) {
- context
- .setPrivilegeType(PrivilegeType.WRITE_SCHEMA)
- .setAuditLogOperation(AuditLogOperation.DDL);
// audit db is read-only
for (PartialPath path : statement.getPaths()) {
if (includeByAuditTreeDB(path)
@@ -1197,57 +935,46 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
}
}
- return checkTimeSeriesPermission(context, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+ return checkTimeSeriesPermission(
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
@Override
public TSStatus visitInternalCreateMultiTimeSeries(
InternalCreateMultiTimeSeriesStatement statement, TreeAccessCheckContext context) {
- context
- .setPrivilegeType(PrivilegeType.WRITE_SCHEMA)
- .setAuditLogOperation(AuditLogOperation.DDL);
// audit db is read-only
for (PartialPath path : statement.getDeviceMap().keySet()) {
if (includeByAuditTreeDB(path)
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(context.setResult(false), path::toString);
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
}
- return checkTimeSeriesPermission(context, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+ return checkTimeSeriesPermission(
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
@Override
public TSStatus visitInternalCreateTimeseries(
InternalCreateTimeSeriesStatement statement, TreeAccessCheckContext context) {
- context.setAuditLogOperation(AuditLogOperation.DDL);
// audit db is read-only
if (includeByAuditTreeDB(statement.getDevicePath())
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
- return checkTimeSeriesPermission(context, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+ return checkTimeSeriesPermission(
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
@Override
public TSStatus visitShowTimeSeries(
ShowTimeSeriesStatement statement, TreeAccessCheckContext context) {
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeTypes(Arrays.asList(PrivilegeType.READ_DATA, PrivilegeType.READ_SCHEMA));
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
statement.setCanSeeAuditDB(true);
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return SUCCEED;
}
- setCanSeeAuditDB(statement, context);
+ setCanSeeAuditDB(statement, context.getUsername());
if (statement.hasTimeCondition()) {
try {
statement.setAuthorityScope(
@@ -1259,9 +986,6 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
} catch (AuthException e) {
return new TSStatus(e.getCode().getStatusCode());
}
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
} else {
return visitAuthorityInformation(statement, context);
@@ -1271,17 +995,11 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitCountTimeSeries(
CountTimeSeriesStatement statement, TreeAccessCheckContext context) {
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.READ_SCHEMA);
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
statement.setCanSeeAuditDB(true);
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return SUCCEED;
}
- setCanSeeAuditDB(statement, context);
+ setCanSeeAuditDB(statement, context.getUsername());
if (statement.hasTimeCondition()) {
try {
statement.setAuthorityScope(
@@ -1291,14 +1009,8 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
AuthorityChecker.getAuthorizedPathTree(
context.getUsername(), PrivilegeType.READ_DATA)));
} catch (AuthException e) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(e.getCode().getStatusCode());
}
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
} else {
return visitAuthorityInformation(statement, context);
@@ -1310,16 +1022,9 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
CountLevelTimeSeriesStatement countStatement, TreeAccessCheckContext context) {
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
countStatement.setCanSeeAuditDB(true);
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () ->
- countStatement.getPaths().stream()
- .distinct()
- .collect(Collectors.toList())
- .toString());
return SUCCEED;
}
- setCanSeeAuditDB(countStatement, context);
+ setCanSeeAuditDB(countStatement, context.getUsername());
return visitAuthorityInformation(countStatement, context);
}
@@ -1328,16 +1033,9 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
CountNodesStatement countStatement, TreeAccessCheckContext context) {
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
countStatement.setCanSeeAuditDB(true);
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () ->
- countStatement.getPaths().stream()
- .distinct()
- .collect(Collectors.toList())
- .toString());
return SUCCEED;
}
- setCanSeeAuditDB(countStatement, context);
+ setCanSeeAuditDB(countStatement, context.getUsername());
return visitAuthorityInformation(countStatement, context);
}
@@ -1346,16 +1044,9 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
ShowChildNodesStatement showChildNodesStatement, TreeAccessCheckContext context) {
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
showChildNodesStatement.setCanSeeAuditDB(true);
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () ->
- showChildNodesStatement.getPaths().stream()
- .distinct()
- .collect(Collectors.toList())
- .toString());
return SUCCEED;
}
- setCanSeeAuditDB(showChildNodesStatement, context);
+ setCanSeeAuditDB(showChildNodesStatement, context.getUsername());
return visitAuthorityInformation(showChildNodesStatement, context);
}
@@ -1364,16 +1055,9 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
ShowChildPathsStatement showChildPathsStatement, TreeAccessCheckContext context) {
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
showChildPathsStatement.setCanSeeAuditDB(true);
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () ->
- showChildPathsStatement.getPaths().stream()
- .distinct()
- .collect(Collectors.toList())
- .toString());
return SUCCEED;
}
- setCanSeeAuditDB(showChildPathsStatement, context);
+ setCanSeeAuditDB(showChildPathsStatement, context.getUsername());
return visitAuthorityInformation(showChildPathsStatement, context);
}
@@ -1383,13 +1067,11 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
// audit db is read-only
if (includeByAuditTreeDB(statement.getPath())
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
- return checkTimeSeriesPermission(context, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+ return checkTimeSeriesPermission(
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
@Override
@@ -1399,67 +1081,47 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
for (PartialPath path : statement.getPathPatternList()) {
if (includeByAuditTreeDB(path)
&& !context.getUsername().equals(AuthorityChecker.INTERNAL_AUDIT_USER)) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
}
- return checkTimeSeriesPermission(context, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+ return checkTimeSeriesPermission(
+ context.getUsername(), statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
}
// ================================== maintain related =============================
@Override
public TSStatus visitExtendRegion(
ExtendRegionStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.DDL),
- PrivilegeType.MAINTAIN,
- () -> statement.getRegionIds().toString());
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitGetRegionId(GetRegionIdStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.QUERY).setDatabase(statement.getDatabase()),
- PrivilegeType.MAINTAIN,
- statement::getDatabase);
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitGetSeriesSlotList(
GetSeriesSlotListStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.QUERY).setDatabase(statement.getDatabase()),
- PrivilegeType.MAINTAIN,
- statement::getDatabase);
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitGetTimeSlotList(
GetTimeSlotListStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.QUERY).setDatabase(statement.getDatabase()),
- PrivilegeType.MAINTAIN,
- statement::getDatabase);
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitCountTimeSlotList(
CountTimeSlotListStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.QUERY).setDatabase(statement.getDatabase()),
- PrivilegeType.MAINTAIN,
- statement::getDatabase);
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitKillQuery(KillQueryStatement statement, TreeAccessCheckContext context) {
- if (checkHasGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.CONTROL),
- PrivilegeType.MAINTAIN,
- () -> "")) {
+ if (checkHasGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN)) {
statement.setAllowedUsername(context.getUsername());
}
return SUCCEED;
@@ -1467,33 +1129,17 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitFlush(FlushStatement flushStatement, TreeAccessCheckContext context) {
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.CONTROL),
- PrivilegeType.SYSTEM,
- () ->
- flushStatement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM);
}
@Override
public TSStatus visitSetConfiguration(
SetConfigurationStatement setConfigurationStatement, TreeAccessCheckContext context) {
- List<PrivilegeType> relatedPrivileges;
try {
- relatedPrivileges = new ArrayList<>(setConfigurationStatement.getNeededPrivileges());
- TSStatus result =
- AuthorityChecker.getTSStatus(
- AuthorityChecker.checkUserMissingSystemPermissions(
- context.getUsername(), relatedPrivileges));
- recordObjectAuthenticationAuditLog(
- context
- .setResult(result.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode())
- .setAuditLogOperation(AuditLogOperation.CONTROL)
- .setPrivilegeTypes(relatedPrivileges),
- () -> "");
- return result;
+ return AuthorityChecker.getTSStatus(
+ AuthorityChecker.checkUserMissingSystemPermissions(
+ context.getUsername(), setConfigurationStatement.getNeededPrivileges()));
} catch (IOException e) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false).setAuditLogOperation(AuditLogOperation.CONTROL), () -> "");
return AuthorityChecker.getTSStatus(false, "Failed to check config item permission");
}
}
@@ -1501,63 +1147,61 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitSetSystemStatus(
SetSystemStatusStatement setSystemStatusStatement, TreeAccessCheckContext context) {
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.CONTROL), PrivilegeType.SYSTEM, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM);
}
@Override
public TSStatus visitStartRepairData(
StartRepairDataStatement startRepairDataStatement, TreeAccessCheckContext context) {
- return checkGlobalAuth(
- context.setAuditLogOperation(AuditLogOperation.CONTROL), PrivilegeType.SYSTEM, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM);
}
@Override
public TSStatus visitStopRepairData(
StopRepairDataStatement stopRepairDataStatement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM);
}
@Override
public TSStatus visitClearCache(
ClearCacheStatement clearCacheStatement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM);
}
@Override
public TSStatus visitMigrateRegion(
MigrateRegionStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitReconstructRegion(
ReconstructRegionStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitRemoveAINode(
RemoveAINodeStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitRemoveConfigNode(
RemoveConfigNodeStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitRemoveDataNode(
RemoveDataNodeStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitRemoveRegion(
RemoveRegionStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
@@ -1568,24 +1212,24 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitShowAINodes(ShowAINodesStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitShowClusterId(
ShowClusterIdStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitShowCluster(ShowClusterStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitShowConfigNodes(
ShowConfigNodesStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
@@ -1603,12 +1247,12 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitShowDataNodes(
ShowDataNodesStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitShowQueries(ShowQueriesStatement statement, TreeAccessCheckContext context) {
- if (checkHasGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "")) {
+ if (checkHasGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN)) {
statement.setAllowedUsername(context.getUsername());
}
return SUCCEED;
@@ -1616,48 +1260,48 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitShowRegion(ShowRegionStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitSetSpaceQuota(
SetSpaceQuotaStatement setSpaceQuotaStatement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM);
}
@Override
public TSStatus visitSetThrottleQuota(
SetThrottleQuotaStatement setThrottleQuotaStatement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM);
}
@Override
public TSStatus visitShowThrottleQuota(
ShowThrottleQuotaStatement showThrottleQuotaStatement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM);
}
@Override
public TSStatus visitShowSpaceQuota(
ShowSpaceQuotaStatement showSpaceQuotaStatement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM);
}
@Override
public TSStatus visitShowVariables(
ShowVariablesStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitShowVersion(ShowVersionStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
public TSStatus visitTestConnection(
TestConnectionStatement statement, TreeAccessCheckContext context) {
- return checkGlobalAuth(context, PrivilegeType.MAINTAIN, () -> "");
+ return checkGlobalAuth(context.getUsername(), PrivilegeType.MAINTAIN);
}
@Override
@@ -1669,18 +1313,17 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitLoadConfiguration(
LoadConfigurationStatement loadConfigurationStatement, TreeAccessCheckContext context) {
- return checkOnlySuperUser(context, null, () -> "");
+ return checkOnlySuperUser(context.getUsername());
}
// ======================== TTL related ===========================
@Override
public TSStatus visitSetTTL(SetTTLStatement statement, TreeAccessCheckContext context) {
- context.setPrivilegeType(PrivilegeType.SYSTEM).setAuditLogOperation(AuditLogOperation.DDL);
List<PartialPath> checkedPaths = statement.getPaths();
boolean[] pathsNotEndWithMultiLevelWildcard = null;
for (int i = 0; i < checkedPaths.size(); i++) {
PartialPath checkedPath = checkedPaths.get(i);
- TSStatus status = checkWriteOnReadOnlyPath(context, checkedPath);
+ TSStatus status = checkWriteOnReadOnlyPath(checkedPath);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
@@ -1692,7 +1335,7 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
pathsNotEndWithMultiLevelWildcard[i] = true;
}
}
- if (checkHasGlobalAuth(context, PrivilegeType.SYSTEM, checkedPaths::toString)) {
+ if (checkHasGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM)) {
return SUCCEED;
}
@@ -1709,33 +1352,16 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
pathsForCheckingPermissions.add(checkedPaths.get(i));
}
}
- TSStatus result =
- AuthorityChecker.getTSStatus(
- AuthorityChecker.checkFullPathOrPatternListPermission(
- context.getUsername(), pathsForCheckingPermissions, PrivilegeType.WRITE_SCHEMA),
- pathsForCheckingPermissions,
- PrivilegeType.WRITE_SCHEMA);
- recordObjectAuthenticationAuditLog(
- context
- .setPrivilegeType(PrivilegeType.WRITE_SCHEMA)
- .setResult(result.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()),
- pathsForCheckingPermissions::toString);
- return result;
+ return AuthorityChecker.getTSStatus(
+ AuthorityChecker.checkFullPathOrPatternListPermission(
+ context.getUsername(), pathsForCheckingPermissions, PrivilegeType.WRITE_SCHEMA),
+ pathsForCheckingPermissions,
+ PrivilegeType.WRITE_SCHEMA);
}
@Override
public TSStatus visitShowTTL(ShowTTLStatement showTTLStatement, TreeAccessCheckContext context) {
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeType(PrivilegeType.READ_SCHEMA);
- if (checkHasGlobalAuth(
- context,
- PrivilegeType.SYSTEM,
- () ->
- showTTLStatement.getPaths().stream()
- .distinct()
- .collect(Collectors.toList())
- .toString())) {
+ if (checkHasGlobalAuth(context.getUsername(), PrivilegeType.SYSTEM)) {
return SUCCEED;
}
for (PartialPath path : showTTLStatement.getPaths()) {
@@ -1746,7 +1372,6 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
context.getUsername(),
path.concatNode(IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD),
PrivilegeType.READ_SCHEMA)) {
- recordObjectAuthenticationAuditLog(context.setResult(false), path::getFullPath);
return AuthorityChecker.getTSStatus(false, path, PrivilegeType.READ_SCHEMA);
}
}
@@ -1762,17 +1387,11 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
// ================================= device related =============================
@Override
public TSStatus visitShowDevices(ShowDevicesStatement statement, TreeAccessCheckContext context) {
- context
- .setAuditLogOperation(AuditLogOperation.QUERY)
- .setPrivilegeTypes(Arrays.asList(PrivilegeType.READ_DATA, PrivilegeType.READ_SCHEMA));
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
statement.setCanSeeAuditDB(true);
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return SUCCEED;
}
- setCanSeeAuditDB(statement, context);
+ setCanSeeAuditDB(statement, context.getUsername());
if (statement.hasTimeCondition()) {
try {
statement.setAuthorityScope(
@@ -1782,14 +1401,8 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
AuthorityChecker.getAuthorizedPathTree(
context.getUsername(), PrivilegeType.READ_DATA)));
} catch (AuthException e) {
- recordObjectAuthenticationAuditLog(
- context.setResult(false),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(e.getCode().getStatusCode());
}
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
} else {
return visitAuthorityInformation(statement, context);
@@ -1799,16 +1412,10 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
@Override
public TSStatus visitCountDevices(
CountDevicesStatement statement, TreeAccessCheckContext context) {
- context
- .setPrivilegeTypes(Arrays.asList(PrivilegeType.READ_DATA, PrivilegeType.READ_SCHEMA))
- .setAuditLogOperation(AuditLogOperation.QUERY);
if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
- recordObjectAuthenticationAuditLog(
- context.setResult(true),
- () -> statement.getPaths().stream().distinct().collect(Collectors.toList()).toString());
return SUCCEED;
}
- setCanSeeAuditDB(statement, context);
+ setCanSeeAuditDB(statement, context.getUsername());
if (statement.hasTimeCondition()) {
try {
statement.setAuthorityScope(
@@ -1826,74 +1433,43 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
}
}
- protected TSStatus checkSystemAuth(IAuditEntity context, Supplier<String> auditObject) {
- return checkGlobalAuth(context, PrivilegeType.SYSTEM, auditObject);
+ protected TSStatus checkSystemAuth(String userName) {
+ return checkGlobalAuth(userName, PrivilegeType.SYSTEM);
}
- protected TSStatus checkGlobalAuth(
- IAuditEntity context, PrivilegeType requiredPrivilege, Supplier<String> auditObject) {
- if (checkHasGlobalAuth(context, requiredPrivilege, auditObject)) {
+ protected TSStatus checkGlobalAuth(String userName, PrivilegeType requiredPrivilege) {
+ if (checkHasGlobalAuth(userName, requiredPrivilege)) {
return SUCCEED;
}
- TSStatus result = AuthorityChecker.getTSStatus(false, requiredPrivilege);
- recordObjectAuthenticationAuditLog(
- context.setResult(result.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()),
- auditObject);
- return result;
+ return AuthorityChecker.getTSStatus(false, requiredPrivilege);
}
- protected boolean checkHasGlobalAuth(
- IAuditEntity context, PrivilegeType requiredPrivilege, Supplier<String> auditObject) {
- if (AuthorityChecker.SUPER_USER.equals(context.getUsername())) {
- recordObjectAuthenticationAuditLog(
- context.setPrivilegeType(requiredPrivilege).setResult(true), auditObject);
+ protected boolean checkHasGlobalAuth(String userName, PrivilegeType requiredPrivilege) {
+ if (AuthorityChecker.SUPER_USER.equals(userName)) {
return true;
}
- boolean result =
- AuthorityChecker.checkSystemPermission(context.getUsername(), requiredPrivilege);
- recordObjectAuthenticationAuditLog(
- context.setPrivilegeType(requiredPrivilege).setResult(result), auditObject);
- return result;
+ return AuthorityChecker.checkSystemPermission(userName, requiredPrivilege);
}
- protected TSStatus checkWriteOnReadOnlyPath(IAuditEntity auditEntity, PartialPath path) {
+ protected TSStatus checkWriteOnReadOnlyPath(PartialPath path) {
if (includeByAuditTreeDB(path)
&& !AuthorityChecker.INTERNAL_AUDIT_USER.equals(path.getFullPath())) {
- recordObjectAuthenticationAuditLog(auditEntity, path::getFullPath);
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));
}
return SUCCEED;
}
- protected void setCanSeeAuditDB(
- AuthorityInformationStatement statement, IAuditEntity auditEntity) {
- if (!checkHasGlobalAuth(auditEntity, PrivilegeType.AUDIT, () -> TREE_MODEL_AUDIT_DATABASE)) {
+ protected void setCanSeeAuditDB(AuthorityInformationStatement statement, String userName) {
+ if (!checkHasGlobalAuth(userName, PrivilegeType.AUDIT)) {
statement.setCanSeeAuditDB(false);
}
}
- private TSStatus checkOnlySuperUser(
- IAuditEntity auditEntity, PrivilegeType privilegeType, Supplier<String> auditObject) {
- auditEntity.setPrivilegeType(privilegeType);
- if (AuthorityChecker.SUPER_USER.equals(auditEntity.getUsername())) {
- recordObjectAuthenticationAuditLog(auditEntity.setResult(true), auditObject);
+ private TSStatus checkOnlySuperUser(String userName) {
+ if (AuthorityChecker.SUPER_USER.equals(userName)) {
return SUCCEED;
}
- recordObjectAuthenticationAuditLog(auditEntity.setResult(false), auditObject);
return AuthorityChecker.getTSStatus(false, "Only the admin user can perform this operation");
}
-
- private static void recordObjectAuthenticationAuditLog(
- IAuditEntity auditEntity, Supplier<String> auditObject) {
- AUDIT_LOGGER.log(
- auditEntity.setAuditEventType(AuditEventType.OBJECT_AUTHENTICATION),
- () ->
- String.format(
- OBJECT_AUTHENTICATION_AUDIT_STR,
- auditEntity.getUsername(),
- auditEntity.getUserId(),
- auditObject.get(),
- true));
- }
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipe.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipe.java
index 11feffe7da1..3f53c5e4504 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipe.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipe.java
@@ -29,23 +29,24 @@ public class CreatePipe extends PipeStatement {
private final String pipeName;
private final boolean ifNotExistsCondition;
- private final Map<String, String> sourceAttributes;
+ private final Map<String, String> extractorAttributes;
private final Map<String, String> processorAttributes;
- private final Map<String, String> sinkAttributes;
+ private final Map<String, String> connectorAttributes;
public CreatePipe(
final String pipeName,
final boolean ifNotExistsCondition,
- final Map<String, String> sourceAttributes,
+ final Map<String, String> extractorAttributes,
final Map<String, String> processorAttributes,
- final Map<String, String> sinkAttributes) {
+ final Map<String, String> connectorAttributes) {
this.pipeName = requireNonNull(pipeName, "pipe name can not be null");
this.ifNotExistsCondition = ifNotExistsCondition;
- this.sourceAttributes =
- requireNonNull(sourceAttributes, "extractor/source attributes can not be null");
+ this.extractorAttributes =
+ requireNonNull(extractorAttributes, "extractor/source attributes can not be null");
this.processorAttributes =
requireNonNull(processorAttributes, "processor attributes can not be null");
- this.sinkAttributes = requireNonNull(sinkAttributes, "connector attributes can not be null");
+ this.connectorAttributes =
+ requireNonNull(connectorAttributes, "connector attributes can not be null");
}
public String getPipeName() {
@@ -56,16 +57,16 @@ public class CreatePipe extends PipeStatement {
return ifNotExistsCondition;
}
- public Map<String, String> getSourceAttributes() {
- return sourceAttributes;
+ public Map<String, String> getExtractorAttributes() {
+ return extractorAttributes;
}
public Map<String, String> getProcessorAttributes() {
return processorAttributes;
}
- public Map<String, String> getSinkAttributes() {
- return sinkAttributes;
+ public Map<String, String> getConnectorAttributes() {
+ return connectorAttributes;
}
@Override
@@ -76,7 +77,11 @@ public class CreatePipe extends PipeStatement {
@Override
public int hashCode() {
return Objects.hash(
- pipeName, ifNotExistsCondition, sourceAttributes, processorAttributes, sinkAttributes);
+ pipeName,
+ ifNotExistsCondition,
+ extractorAttributes,
+ processorAttributes,
+ connectorAttributes);
}
@Override
@@ -90,9 +95,9 @@ public class CreatePipe extends PipeStatement {
CreatePipe other = (CreatePipe) obj;
return Objects.equals(pipeName, other.pipeName)
&& Objects.equals(ifNotExistsCondition, other.ifNotExistsCondition)
- && Objects.equals(sourceAttributes, other.sourceAttributes)
+ && Objects.equals(extractorAttributes, other.extractorAttributes)
&& Objects.equals(processorAttributes, other.processorAttributes)
- && Objects.equals(sinkAttributes, other.sinkAttributes);
+ && Objects.equals(connectorAttributes, other.connectorAttributes);
}
@Override
@@ -100,9 +105,9 @@ public class CreatePipe extends PipeStatement {
return toStringHelper(this)
.add("pipeName", pipeName)
.add("ifNotExistsCondition", ifNotExistsCondition)
- .add("extractorAttributes", sourceAttributes)
+ .add("extractorAttributes", extractorAttributes)
.add("processorAttributes", processorAttributes)
- .add("connectorAttributes", sinkAttributes)
+ .add("connectorAttributes", connectorAttributes)
.toString();
}
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java
index 0c1d862a886..e428b6cb783 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java
@@ -1146,12 +1146,12 @@ public final class SqlFormatter {
builder.append(node.getPipeName());
builder.append(" \n");
- if (!node.getSourceAttributes().isEmpty()) {
+ if (!node.getExtractorAttributes().isEmpty()) {
builder
.append("WITH SOURCE (")
.append("\n")
.append(
- node.getSourceAttributes().entrySet().stream()
+ node.getExtractorAttributes().entrySet().stream()
.map(
entry ->
indentString(1)
@@ -1182,12 +1182,12 @@ public final class SqlFormatter {
.append(")\n");
}
- if (!node.getSinkAttributes().isEmpty()) {
+ if (!node.getConnectorAttributes().isEmpty()) {
builder
.append("WITH SINK (")
.append("\n")
.append(
- node.getSinkAttributes().entrySet().stream()
+ node.getConnectorAttributes().entrySet().stream()
.map(
entry ->
indentString(1)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java
index 1dde7c5db3a..3bafdf8bfe0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java
@@ -200,7 +200,7 @@ public abstract class StatementVisitor<R, C> {
return visitStatement(deleteTimeSeriesStatement, context);
}
- public R visitDeleteDatabase(DeleteDatabaseStatement deleteDatabaseStatement, C context) {
+ public R visitDeleteStorageGroup(DeleteDatabaseStatement deleteDatabaseStatement, C context) {
return visitStatement(deleteDatabaseStatement, context);
}
@@ -384,7 +384,7 @@ public abstract class StatementVisitor<R, C> {
return visitStatement(authorStatement, context);
}
- public R visitShowDatabase(ShowDatabaseStatement showDatabaseStatement, C context) {
+ public R visitShowStorageGroup(ShowDatabaseStatement showDatabaseStatement, C context) {
return visitStatement(showDatabaseStatement, context);
}
@@ -396,7 +396,7 @@ public abstract class StatementVisitor<R, C> {
return visitStatement(showDevicesStatement, context);
}
- public R visitCountDatabase(CountDatabaseStatement countDatabaseStatement, C context) {
+ public R visitCountStorageGroup(CountDatabaseStatement countDatabaseStatement, C context) {
return visitStatement(countDatabaseStatement, context);
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalBatchActivateTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalBatchActivateTemplateStatement.java
index 48f3bf16b8b..7b7a19a9a8e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalBatchActivateTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalBatchActivateTemplateStatement.java
@@ -20,11 +20,11 @@
package org.apache.iotdb.db.queryengine.plan.statement.internal;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.utils.Pair;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/SeriesSchemaFetchStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/SeriesSchemaFetchStatement.java
index e41ce19fd48..4380767da2e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/SeriesSchemaFetchStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/SeriesSchemaFetchStatement.java
@@ -21,10 +21,10 @@ package org.apache.iotdb.db.queryengine.plan.statement.internal;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.List;
import java.util.Map;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountDatabaseStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountDatabaseStatement.java
index 2d186ce4173..4ff683f4436 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountDatabaseStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountDatabaseStatement.java
@@ -32,7 +32,7 @@ public class CountDatabaseStatement extends CountStatement implements IConfigSta
@Override
public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
- return visitor.visitCountDatabase(this, context);
+ return visitor.visitCountStorageGroup(this, context);
}
@Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteDatabaseStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteDatabaseStatement.java
index 6b538267555..9861331974b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteDatabaseStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteDatabaseStatement.java
@@ -63,7 +63,7 @@ public class DeleteDatabaseStatement extends Statement implements IConfigStateme
@Override
public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
- return visitor.visitDeleteDatabase(this, context);
+ return visitor.visitDeleteStorageGroup(this, context);
}
public void setPrefixPath(List<String> prefixPathList) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDatabaseStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDatabaseStatement.java
index e1a53662242..d91e1f65f0d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDatabaseStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDatabaseStatement.java
@@ -116,7 +116,7 @@ public class ShowDatabaseStatement extends ShowStatement implements IConfigState
@Override
public <R, C> R accept(final StatementVisitor<R, C> visitor, C context) {
- return visitor.visitShowDatabase(this, context);
+ return visitor.visitShowStorageGroup(this, context);
}
@Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/AlterPipeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/AlterPipeStatement.java
index a3738a15fbd..122139f3d4e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/AlterPipeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/AlterPipeStatement.java
@@ -35,12 +35,12 @@ public class AlterPipeStatement extends Statement implements IConfigStatement {
private String pipeName;
private String userName;
private boolean ifExistsCondition;
- private Map<String, String> sourceAttributes;
+ private Map<String, String> extractorAttributes;
private Map<String, String> processorAttributes;
- private Map<String, String> sinkAttributes;
- private boolean isReplaceAllSourceAttributes;
+ private Map<String, String> connectorAttributes;
+ private boolean isReplaceAllExtractorAttributes;
private boolean isReplaceAllProcessorAttributes;
- private boolean isReplaceAllSinkAttributes;
+ private boolean isReplaceAllConnectorAttributes;
private boolean isTableModel;
public AlterPipeStatement(final StatementType alterPipeStatement) {
@@ -55,28 +55,28 @@ public class AlterPipeStatement extends Statement implements IConfigStatement {
return ifExistsCondition;
}
- public Map<String, String> getSourceAttributes() {
- return sourceAttributes;
+ public Map<String, String> getExtractorAttributes() {
+ return extractorAttributes;
}
public Map<String, String> getProcessorAttributes() {
return processorAttributes;
}
- public Map<String, String> getSinkAttributes() {
- return sinkAttributes;
+ public Map<String, String> getConnectorAttributes() {
+ return connectorAttributes;
}
- public boolean isReplaceAllSourceAttributes() {
- return isReplaceAllSourceAttributes;
+ public boolean isReplaceAllExtractorAttributes() {
+ return isReplaceAllExtractorAttributes;
}
public boolean isReplaceAllProcessorAttributes() {
return isReplaceAllProcessorAttributes;
}
- public boolean isReplaceAllSinkAttributes() {
- return isReplaceAllSinkAttributes;
+ public boolean isReplaceAllConnectorAttributes() {
+ return isReplaceAllConnectorAttributes;
}
public boolean isTableModel() {
@@ -95,28 +95,28 @@ public class AlterPipeStatement extends Statement implements IConfigStatement {
this.ifExistsCondition = ifExistsCondition;
}
- public void setSourceAttributes(final Map<String, String> sourceAttributes) {
- this.sourceAttributes = sourceAttributes;
+ public void setExtractorAttributes(final Map<String, String> extractorAttributes) {
+ this.extractorAttributes = extractorAttributes;
}
public void setProcessorAttributes(final Map<String, String> processorAttributes) {
this.processorAttributes = processorAttributes;
}
- public void setSinkAttributes(final Map<String, String> sinkAttributes) {
- this.sinkAttributes = sinkAttributes;
+ public void setConnectorAttributes(final Map<String, String> connectorAttributes) {
+ this.connectorAttributes = connectorAttributes;
}
- public void setReplaceAllSourceAttributes(final boolean replaceAllSourceAttributes) {
- isReplaceAllSourceAttributes = replaceAllSourceAttributes;
+ public void setReplaceAllExtractorAttributes(final boolean replaceAllExtractorAttributes) {
+ isReplaceAllExtractorAttributes = replaceAllExtractorAttributes;
}
public void setReplaceAllProcessorAttributes(final boolean replaceAllProcessorAttributes) {
isReplaceAllProcessorAttributes = replaceAllProcessorAttributes;
}
- public void setReplaceAllSinkAttributes(final boolean replaceAllConnectorAttributes) {
- isReplaceAllSinkAttributes = replaceAllConnectorAttributes;
+ public void setReplaceAllConnectorAttributes(final boolean replaceAllConnectorAttributes) {
+ isReplaceAllConnectorAttributes = replaceAllConnectorAttributes;
}
public void setTableModel(final boolean tableModel) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipeStatement.java
index 718283182a7..66c7a85de79 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipeStatement.java
@@ -34,11 +34,11 @@ public class CreatePipeStatement extends Statement implements IConfigStatement {
private String pipeName;
private boolean ifNotExistsCondition;
- private Map<String, String> sourceAttributes;
+ private Map<String, String> extractorAttributes;
private Map<String, String> processorAttributes;
- private Map<String, String> sinkAttributes;
+ private Map<String, String> connectorAttributes;
- public CreatePipeStatement(final StatementType createPipeStatement) {
+ public CreatePipeStatement(StatementType createPipeStatement) {
this.statementType = createPipeStatement;
}
@@ -50,19 +50,19 @@ public class CreatePipeStatement extends Statement implements IConfigStatement {
return ifNotExistsCondition;
}
- public Map<String, String> getSourceAttributes() {
- return sourceAttributes;
+ public Map<String, String> getExtractorAttributes() {
+ return extractorAttributes;
}
public Map<String, String> getProcessorAttributes() {
return processorAttributes;
}
- public Map<String, String> getSinkAttributes() {
- return sinkAttributes;
+ public Map<String, String> getConnectorAttributes() {
+ return connectorAttributes;
}
- public void setPipeName(final String pipeName) {
+ public void setPipeName(String pipeName) {
this.pipeName = pipeName;
}
@@ -70,16 +70,16 @@ public class CreatePipeStatement extends Statement implements IConfigStatement {
this.ifNotExistsCondition = ifNotExistsCondition;
}
- public void setSourceAttributes(final Map<String, String> sourceAttributes) {
- this.sourceAttributes = sourceAttributes;
+ public void setExtractorAttributes(Map<String, String> extractorAttributes) {
+ this.extractorAttributes = extractorAttributes;
}
- public void setProcessorAttributes(final Map<String, String> processorAttributes) {
+ public void setProcessorAttributes(Map<String, String> processorAttributes) {
this.processorAttributes = processorAttributes;
}
- public void setSinkAttributes(final Map<String, String> sinkAttributes) {
- this.sinkAttributes = sinkAttributes;
+ public void setConnectorAttributes(Map<String, String> connectorAttributes) {
+ this.connectorAttributes = connectorAttributes;
}
@Override
@@ -93,7 +93,7 @@ public class CreatePipeStatement extends Statement implements IConfigStatement {
}
@Override
- public <R, C> R accept(final StatementVisitor<R, C> visitor, final C context) {
+ public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
return visitor.visitCreatePipe(this, context);
}
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ActivateTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ActivateTemplateStatement.java
index 67214c8bca1..e5abc9be3b3 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ActivateTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ActivateTemplateStatement.java
@@ -20,11 +20,11 @@
package org.apache.iotdb.db.queryengine.plan.statement.metadata.template;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.utils.Pair;
@@ -49,18 +49,13 @@ public class ActivateTemplateStatement extends Statement {
@Override
public List<PartialPath> getPaths() {
- return getPaths(path);
- }
-
- public static List<PartialPath> getPaths(final PartialPath devicePath) {
ClusterTemplateManager clusterTemplateManager = ClusterTemplateManager.getInstance();
- Pair<Template, PartialPath> templateSetInfo =
- clusterTemplateManager.checkTemplateSetInfo(devicePath);
+ Pair<Template, PartialPath> templateSetInfo = clusterTemplateManager.checkTemplateSetInfo(path);
if (templateSetInfo == null) {
return Collections.emptyList();
}
return templateSetInfo.left.getSchemaMap().keySet().stream()
- .map(devicePath::concatAsMeasurementPath)
+ .map(path::concatAsMeasurementPath)
.collect(Collectors.toList());
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/BatchActivateTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/BatchActivateTemplateStatement.java
index b92bc13abc8..e518eee0d1e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/BatchActivateTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/BatchActivateTemplateStatement.java
@@ -20,11 +20,11 @@
package org.apache.iotdb.db.queryengine.plan.statement.metadata.template;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.utils.Pair;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/DeactivateTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/DeactivateTemplateStatement.java
index 7057003d394..b2d7a5fef7b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/DeactivateTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/DeactivateTemplateStatement.java
@@ -21,13 +21,13 @@ package org.apache.iotdb.db.queryengine.plan.statement.metadata.template;
import org.apache.iotdb.commons.exception.IoTDBException;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.Collections;
import java.util.List;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
index e5ab6e7ba95..bd79953ee69 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
@@ -19,8 +19,8 @@
package org.apache.iotdb.db.schemaengine.rescon;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.Map;
import java.util.Objects;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java
index 0f96328112a..a9b002bbd6d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java
@@ -25,7 +25,6 @@ import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.exception.metadata.SchemaQuotaExceededException;
import org.apache.iotdb.db.queryengine.common.schematree.ClusterSchemaTree;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TableId;
@@ -55,6 +54,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.write.req.IPreDeactivateTem
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.IRollbackPreDeactivateTemplatePlan;
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.IAlterLogicalViewPlan;
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.ICreateLogicalViewPlan;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.IDeviceID;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
index a4a0758abb0..fbb407d3338 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
@@ -31,7 +31,6 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
import org.apache.iotdb.commons.utils.FileUtils;
@@ -123,6 +122,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.IDeleteLogic
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.IPreDeleteLogicalViewPlan;
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.IRollbackPreDeleteLogicalViewPlan;
import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
import org.apache.iotdb.db.utils.SchemaUtils;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
index 05adde04fac..0e180b2029b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
@@ -30,7 +30,6 @@ import org.apache.iotdb.commons.schema.SchemaConstant;
import org.apache.iotdb.commons.schema.filter.SchemaFilterType;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
import org.apache.iotdb.consensus.ConsensusFactory;
import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -98,6 +97,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.write.req.impl.CreateAligne
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.impl.CreateTimeSeriesPlanImpl;
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.IAlterLogicalViewPlan;
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.ICreateLogicalViewPlan;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
import org.apache.iotdb.db.utils.SchemaUtils;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/IMTreeStore.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/IMTreeStore.java
index 190c4794ff6..43286eafadd 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/IMTreeStore.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/IMTreeStore.java
@@ -24,8 +24,8 @@ import org.apache.iotdb.commons.schema.node.IMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.memory.ReleaseFlushMonitor;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.io.File;
import java.util.Map;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
index 8fe08bd1770..605dd3b7a28 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
@@ -30,7 +30,6 @@ import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -73,6 +72,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.reader.impl.Schem
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.reader.impl.TimeseriesReaderWithViewFetch;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.MetaFormatUtils;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.filter.DeviceFilterVisitor;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.db.storageengine.rescon.quotas.DataNodeSpaceQuotaManager;
import org.apache.iotdb.rpc.TSStatusCode;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MemMTreeStore.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MemMTreeStore.java
index 63a987b2cb7..08d03c29e69 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MemMTreeStore.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MemMTreeStore.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.metric.SchemaRegionMemMetric;
import org.apache.iotdb.db.schemaengine.rescon.MemSchemaRegionStatistics;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.IMTreeStore;
@@ -39,6 +38,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.snapshot.Mem
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.memory.ReleaseFlushMonitor;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.loader.MNodeFactoryLoader;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.MNodeUtils;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.io.File;
import java.io.IOException;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java
index 5f72358418b..6f95102a26f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java
@@ -24,9 +24,9 @@ import org.apache.iotdb.commons.schema.node.IMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.IMTreeStore;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.MNodeUtils;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.Iterator;
import java.util.Map;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java
index c222d5ecd86..15eb95df4ab 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java
@@ -22,8 +22,8 @@ import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.schema.node.IMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.IMTreeStore;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.Map;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java
index aa0108f9c1c..e15245d3c89 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException;
import org.apache.iotdb.db.schemaengine.metric.SchemaRegionCachedMetric;
import org.apache.iotdb.db.schemaengine.rescon.CachedSchemaRegionStatistics;
@@ -44,6 +43,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.ite
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.schemafile.ISchemaFile;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.loader.MNodeFactoryLoader;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.MNodeUtils;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
index ee52020f32e..b6b1a0777be 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
@@ -30,7 +30,6 @@ import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
import org.apache.iotdb.db.exception.metadata.AliasAlreadyExistException;
@@ -67,6 +66,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.reader.impl.Schem
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.reader.impl.TimeseriesReaderWithViewFetch;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.MetaFormatUtils;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.filter.DeviceFilterVisitor;
+import org.apache.iotdb.db.schemaengine.template.Template;
import com.google.common.util.concurrent.ListenableFuture;
import org.apache.tsfile.enums.TSDataType;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/ReentrantReadOnlyCachedMTreeStore.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/ReentrantReadOnlyCachedMTreeStore.java
index 88b61c1b4c3..bffb93f59ac 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/ReentrantReadOnlyCachedMTreeStore.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/ReentrantReadOnlyCachedMTreeStore.java
@@ -23,10 +23,10 @@ import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.IMTreeStore;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.memory.ReleaseFlushMonitor;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.ICachedMNode;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.io.File;
import java.util.Map;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java
index 529ddd44658..0d14e2251c4 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java
@@ -21,10 +21,10 @@ package org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.it
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.IMTreeStore;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.iterator.AbstractTraverserIterator;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.ICachedMNode;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.Map;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/traverser/Traverser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/traverser/Traverser.java
index 24b7e93939e..211f9e19999 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/traverser/Traverser.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/traverser/Traverser.java
@@ -29,13 +29,13 @@ import org.apache.iotdb.commons.schema.node.IMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.schema.tree.AbstractTreeVisitor;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.IMTreeStore;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.iterator.MNodeIterator;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.ReentrantReadOnlyCachedMTreeStore;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.memory.ReleaseFlushMonitor;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.MNodeUtils;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/IShowTimeSeriesPlan.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/IShowTimeSeriesPlan.java
index e05ee54f253..c4928070446 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/IShowTimeSeriesPlan.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/IShowTimeSeriesPlan.java
@@ -21,7 +21,7 @@
package org.apache.iotdb.db.schemaengine.schemaregion.read.req;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.commons.schema.template.Template;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.Map;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/SchemaRegionReadPlanFactory.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/SchemaRegionReadPlanFactory.java
index 84a2ca9cdf7..eb0c2f64acc 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/SchemaRegionReadPlanFactory.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/SchemaRegionReadPlanFactory.java
@@ -22,10 +22,10 @@ package org.apache.iotdb.db.schemaengine.schemaregion.read.req;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.schemaregion.read.req.impl.ShowDevicesPlanImpl;
import org.apache.iotdb.db.schemaengine.schemaregion.read.req.impl.ShowNodesPlanImpl;
import org.apache.iotdb.db.schemaengine.schemaregion.read.req.impl.ShowTimeSeriesPlanImpl;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.Map;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/impl/ShowTimeSeriesPlanImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/impl/ShowTimeSeriesPlanImpl.java
index 8aeb0e837be..ba9ea23cd3a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/impl/ShowTimeSeriesPlanImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/req/impl/ShowTimeSeriesPlanImpl.java
@@ -23,8 +23,8 @@ package org.apache.iotdb.db.schemaengine.schemaregion.read.req.impl;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.schemaregion.read.req.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.schemaengine.template.Template;
import java.util.Map;
import java.util.Objects;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MNodeUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MNodeUtils.java
index 6c5ac4b909d..96fd00c848a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MNodeUtils.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MNodeUtils.java
@@ -22,8 +22,8 @@ import org.apache.iotdb.commons.schema.node.IMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.info.TreeDeviceInfo;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.write.schema.IMeasurementSchema;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java
index 857db657077..ac89c86b819 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java
@@ -31,7 +31,6 @@ import org.apache.iotdb.commons.exception.runtime.SchemaExecutionException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.path.PathPatternUtil;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.confignode.rpc.thrift.TCreateSchemaTemplateReq;
import org.apache.iotdb.confignode.rpc.thrift.TGetAllTemplatesResp;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ITemplateManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ITemplateManager.java
index e92866956bd..3259e483ad0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ITemplateManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ITemplateManager.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.exception.IoTDBException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.CreateSchemaTemplateStatement;
import org.apache.tsfile.utils.Pair;
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/template/Template.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/Template.java
similarity index 99%
rename from iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/template/Template.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/Template.java
index ebf22e03514..04f26e12968 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/template/Template.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/Template.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.commons.schema.template;
+package org.apache.iotdb.db.schemaengine.template;
import org.apache.iotdb.commons.exception.IllegalPathException;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/TemplateInternalRPCUtil.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/TemplateInternalRPCUtil.java
index 0cec6abab0e..72ae10f8429 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/TemplateInternalRPCUtil.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/TemplateInternalRPCUtil.java
@@ -19,8 +19,6 @@
package org.apache.iotdb.db.schemaengine.template;
-import org.apache.iotdb.commons.schema.template.Template;
-
import org.apache.tsfile.utils.Pair;
import org.apache.tsfile.utils.ReadWriteIOUtils;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java
index bb37825ab0c..0c30078ce17 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java
@@ -276,8 +276,8 @@ public class DataNode extends ServerCommandLine implements DataNodeMBean {
DNAuditLogger.getInstance().setCoordinator(Coordinator.getInstance());
AuditLogFields fields =
new AuditLogFields(
- -1,
null,
+ -1,
null,
AuditEventType.CHANGE_AUDIT_OPTION,
AuditLogOperation.CONTROL,
@@ -292,7 +292,7 @@ public class DataNode extends ServerCommandLine implements DataNodeMBean {
CommonDescriptor.getInstance().getConfig().getAuditableOperationLevel().toString(),
CommonDescriptor.getInstance().getConfig().getAuditableOperationResult(),
thisNode);
- DNAuditLogger.getInstance().log(fields, () -> logMessage);
+ DNAuditLogger.getInstance().log(fields, logMessage);
}
if (isUsingPipeConsensus()) {
@@ -481,11 +481,8 @@ public class DataNode extends ServerCommandLine implements DataNodeMBean {
String clusterId = runtimeConfiguration.getClusterId();
storeClusterID(clusterId);
- /* Store table info */
+ /* Store table info*/
DataNodeTableCache.getInstance().init(runtimeConfiguration.getTableInfo());
-
- /* Store audit log configuration */
- CommonDescriptor.getInstance().loadAuditConfig(runtimeConfiguration.auditConfig);
}
/**
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeShutdownHook.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeShutdownHook.java
index be9ef315dd9..a21cc3dccd7 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeShutdownHook.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeShutdownHook.java
@@ -97,8 +97,8 @@ public class DataNodeShutdownHook extends Thread {
logger.info("DataNode exiting...");
AuditLogFields fields =
new AuditLogFields(
- -1,
null,
+ -1,
null,
AuditEventType.DN_SHUTDOWN,
AuditLogOperation.CONTROL,
@@ -107,7 +107,7 @@ public class DataNodeShutdownHook extends Thread {
null,
null);
String logMessage = String.format("DataNode %s exiting...", nodeLocation);
- DNAuditLogger.getInstance().log(fields, () -> logMessage);
+ DNAuditLogger.getInstance().log(fields, logMessage);
startWatcher();
// Stop external rpc service firstly.
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableStatementDataTypeConvertExecutionVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableStatementDataTypeConvertExecutionVisitor.java
index ab1701ceb01..667a2faf0de 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableStatementDataTypeConvertExecutionVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableStatementDataTypeConvertExecutionVisitor.java
@@ -82,7 +82,7 @@ public class LoadTableStatementDataTypeConvertExecutionVisitor
Long.MIN_VALUE,
Long.MAX_VALUE,
null,
- null,
+ "root",
null)) {
for (final TabletInsertionEvent tabletInsertionEvent : parser.toTabletInsertionEvents()) {
if (!(tabletInsertionEvent instanceof PipeRawTabletInsertionEvent)) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DataNodeAuthUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DataNodeAuthUtils.java
index 39af6bf24bb..05ab37a696c 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DataNodeAuthUtils.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DataNodeAuthUtils.java
@@ -25,10 +25,10 @@ import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.IoTDBException;
import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.pipe.config.constant.SystemConstant;
import org.apache.iotdb.commons.utils.AuthUtils;
import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import org.apache.iotdb.commons.utils.StatusUtils;
-import org.apache.iotdb.db.audit.DNAuditLogger;
import org.apache.iotdb.db.auth.AuthorityChecker;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.sql.SemanticException;
@@ -74,7 +74,7 @@ public class DataNodeAuthUtils {
Statement statement =
StatementGenerator.createStatement(
"SELECT password from "
- + DNAuditLogger.PREFIX_PASSWORD_HISTORY
+ + SystemConstant.PREFIX_PASSWORD_HISTORY
+ ".`_"
+ username
+ "` where oldPassword='"
@@ -86,8 +86,8 @@ public class DataNodeAuthUtils {
new SessionInfo(
0,
new UserEntity(
- AuthorityChecker.INTERNAL_AUDIT_USER_ID,
- AuthorityChecker.INTERNAL_AUDIT_USER,
+ AuthorityChecker.SUPER_USER_ID,
+ AuthorityChecker.SUPER_USER,
IoTDBDescriptor.getInstance().getConfig().getInternalAddress()),
ZoneId.systemDefault());
@@ -160,7 +160,7 @@ public class DataNodeAuthUtils {
InsertRowStatement insertRowStatement = new InsertRowStatement();
try {
insertRowStatement.setDevicePath(
- new PartialPath(DNAuditLogger.PREFIX_PASSWORD_HISTORY + ".`_" + username + "`"));
+ new PartialPath(SystemConstant.PREFIX_PASSWORD_HISTORY + ".`_" + username + "`"));
insertRowStatement.setTime(timeToRecord);
insertRowStatement.setMeasurements(new String[] {"password", "oldPassword"});
insertRowStatement.setValues(
@@ -183,8 +183,8 @@ public class DataNodeAuthUtils {
new SessionInfo(
0,
new UserEntity(
- AuthorityChecker.INTERNAL_AUDIT_USER_ID,
- AuthorityChecker.INTERNAL_AUDIT_USER,
+ AuthorityChecker.SUPER_USER_ID,
+ AuthorityChecker.SUPER_USER,
IoTDBDescriptor.getInstance().getConfig().getInternalAddress()),
ZoneId.systemDefault());
@@ -217,7 +217,7 @@ public class DataNodeAuthUtils {
DeleteTimeSeriesStatement deleteTimeSeriesStatement = new DeleteTimeSeriesStatement();
try {
PartialPath devicePath =
- new PartialPath(DNAuditLogger.PREFIX_PASSWORD_HISTORY + ".`_" + username + "`");
+ new PartialPath(SystemConstant.PREFIX_PASSWORD_HISTORY + ".`_" + username + "`");
deleteTimeSeriesStatement.setPathPatternList(
Arrays.asList(
devicePath.concatAsMeasurementPath("password"),
@@ -236,8 +236,8 @@ public class DataNodeAuthUtils {
new SessionInfo(
0,
new UserEntity(
- AuthorityChecker.INTERNAL_AUDIT_USER_ID,
- AuthorityChecker.INTERNAL_AUDIT_USER,
+ AuthorityChecker.SUPER_USER_ID,
+ AuthorityChecker.SUPER_USER,
IoTDBDescriptor.getInstance().getConfig().getInternalAddress()),
ZoneId.systemDefault());
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/cache/TreeDeviceSchemaCacheManagerTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/cache/TreeDeviceSchemaCacheManagerTest.java
index f21d1571b0f..b166e3d3772 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/cache/TreeDeviceSchemaCacheManagerTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/cache/TreeDeviceSchemaCacheManagerTest.java
@@ -22,12 +22,12 @@ package org.apache.iotdb.db.metadata.cache;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.common.schematree.ClusterSchemaTree;
import org.apache.iotdb.db.queryengine.common.schematree.ISchemaTree;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.SchemaCacheEntry;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TreeDeviceSchemaCacheManager;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.IDeviceID;
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java
index 4fae0f9fc0f..7ad13612c69 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.commons.file.SystemFileFactory;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.SchemaConstant;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.consensus.ConsensusFactory;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -32,6 +31,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.ISchemaRegion;
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.ISchemaInfo;
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.ITimeSeriesSchemaInfo;
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.SchemaRegionWritePlanFactory;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.enums.CompressionType;
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionSimpleRecoverTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionSimpleRecoverTest.java
index aaed7951518..e51032f47d3 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionSimpleRecoverTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionSimpleRecoverTest.java
@@ -27,7 +27,6 @@ import org.apache.iotdb.commons.schema.filter.impl.values.InFilter;
import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.column.AttributeColumnSchema;
import org.apache.iotdb.commons.schema.table.column.TagColumnSchema;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.consensus.ConsensusFactory;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
@@ -45,6 +44,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.write.req.SchemaRegionWrite
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.impl.CreateAlignedTimeSeriesPlanImpl;
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.impl.CreateTimeSeriesPlanImpl;
import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.isession.SessionConfig;
import org.apache.tsfile.common.conf.TSFileConfig;
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java
index f8590af0860..4da6ce191e1 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java
@@ -22,7 +22,6 @@ package org.apache.iotdb.db.metadata.schemaRegion;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.common.schematree.ClusterSchemaTree;
import org.apache.iotdb.db.queryengine.common.schematree.DeviceSchemaInfo;
import org.apache.iotdb.db.schemaengine.schemaregion.ISchemaRegion;
@@ -30,6 +29,7 @@ import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.ISchemaInfo;
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.ITimeSeriesSchemaInfo;
import org.apache.iotdb.db.schemaengine.schemaregion.write.req.SchemaRegionWritePlanFactory;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
+import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.enums.CompressionType;
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
index 42800c4e586..4f94de5d956 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
import org.apache.iotdb.commons.schema.filter.SchemaFilterFactory;
import org.apache.iotdb.commons.schema.filter.impl.DeviceFilterUtil;
-import org.apache.iotdb.commons.schema.template.Template;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.schema.CreateOrUpdateTableDeviceNode;
import org.apache.iotdb.db.schemaengine.schemaregion.ISchemaRegion;
... 887 lines suppressed ...
(iotdb) 02/03: Revert "Move password history under __audit (#16496)"
Posted by yo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yongzao pushed a commit to branch revert-recent-updates-of-audit-log
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit ed4868275aebaaca0b1c05321335e2a57d2f1249
Author: Yongzao <53...@qq.com>
AuthorDate: Sun Sep 28 09:44:38 2025 +0800
Revert "Move password history under __audit (#16496)"
This reverts commit 4b2913050c7df9653a3f6ccfb177b3c94ee3c6bd.
---
.../IoTDBMultiDBRegionGroupLeaderDistributionIT.java | 3 +--
.../it/partition/IoTDBAutoRegionGroupExtensionIT.java | 2 +-
.../confignode/it/partition/IoTDBPartitionGetterIT.java | 2 +-
.../IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java | 4 ++--
.../test/java/org/apache/iotdb/db/it/IoTDBMiscIT.java | 2 +-
.../apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java | 14 ++++++++++++++
.../java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java | 17 +++++++----------
.../iotdb/db/it/schema/IoTDBDeleteDatabaseIT.java | 3 +--
.../iotdb/relational/it/schema/IoTDBDatabaseIT.java | 1 -
.../impl/schema/DeleteTimeSeriesProcedure.java | 4 ++--
.../java/org/apache/iotdb/db/audit/DNAuditLogger.java | 4 +++-
.../iotdb/db/protocol/session/SessionManager.java | 4 ++--
.../relational/security/TreeAccessCheckVisitor.java | 5 +----
13 files changed, 36 insertions(+), 29 deletions(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/load/IoTDBMultiDBRegionGroupLeaderDistributionIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/load/IoTDBMultiDBRegionGroupLeaderDistributionIT.java
index bb6de6c11cf..98395aeb785 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/load/IoTDBMultiDBRegionGroupLeaderDistributionIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/load/IoTDBMultiDBRegionGroupLeaderDistributionIT.java
@@ -113,8 +113,7 @@ public class IoTDBMultiDBRegionGroupLeaderDistributionIT {
TShowRegionResp showRegionResp = client.showRegion(new TShowRegionReq());
showRegionResp
.getRegionInfoList()
- // Skip AUDIT database
- .removeIf(r -> r.database.startsWith(SystemConstant.AUDIT_DATABASE));
+ .removeIf(r -> r.database.startsWith("root." + SystemConstant.SYSTEM_PREFIX_KEY));
showRegionResp
.getRegionInfoList()
.forEach(
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBAutoRegionGroupExtensionIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBAutoRegionGroupExtensionIT.java
index a82b992a4df..7b074811e87 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBAutoRegionGroupExtensionIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBAutoRegionGroupExtensionIT.java
@@ -189,7 +189,7 @@ public class IoTDBAutoRegionGroupExtensionIT {
.merge(regionInfo.getDataNodeId(), 1, Integer::sum);
});
// The number of RegionGroups should not less than the testMinRegionGroupNum for each database
- // +1 for AUDIT database
+ // +1 for system database
Assert.assertEquals(TEST_DATABASE_NUM + 1, databaseRegionCounter.size());
databaseRegionCounter.forEach(
(database, regionCount) ->
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
index 6ca5d884b07..e097e2bc8cd 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
@@ -535,7 +535,7 @@ public class IoTDBPartitionGetterIT {
nodeManagementResp = client.getSchemaNodeManagementPartition(nodeManagementReq);
Assert.assertEquals(
TSStatusCode.SUCCESS_STATUS.getStatusCode(), nodeManagementResp.getStatus().getCode());
- // +1 for AUDIT database
+ // +1 for SYSTEM database
Assert.assertEquals(storageGroupNum + 1, nodeManagementResp.getMatchedNodeSize());
Assert.assertNotNull(nodeManagementResp.getSchemaRegionMap());
Assert.assertEquals(0, nodeManagementResp.getSchemaRegionMapSize());
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java
index 99d061a443c..c9d0687f7cf 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java
@@ -94,7 +94,7 @@ public class IoTDBRegionGroupExpandAndShrinkForIoTV1IT
Set<Integer> allDataNodeId = getAllDataNodes(statement);
// expect one data region, one schema region
- // plus one AUDIT data region, one AUDIT schema region
+ // plus one system data region, one system schema region
Assert.assertEquals(4, regionMap.size());
// expand
@@ -217,7 +217,7 @@ public class IoTDBRegionGroupExpandAndShrinkForIoTV1IT
Set<Integer> allDataNodeId = getAllDataNodes(statement);
// expect one data region, one schema region
- // plus one AUDIT data region, one AUDIT schema region
+ // plus one system data region, one system schema region
Assert.assertEquals(4, regionMap.size());
// select multiple regions for testing
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBMiscIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBMiscIT.java
index e5fffd3dbde..146a95fd024 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBMiscIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBMiscIT.java
@@ -55,7 +55,7 @@ public class IoTDBMiscIT {
Statement statement = connection.createStatement()) {
statement.execute("insert into root.comprssion_ratio_file.d1(timestamp,s1) values(1,1.0)");
statement.execute("flush");
- // one global file and two data region file (including one AUDIT region)
+ // one global file and two data region file (including one system region)
assertEquals(3, collectCompressionRatioFiles(nodeWrapper).size());
statement.execute("drop database root.comprssion_ratio_file");
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java
index 0f831ad8a74..a956b2033e0 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/audit/IoTDBAuditLogBasicIT.java
@@ -165,6 +165,20 @@ public class IoTDBAuditLogBasicIT {
"null",
"null",
"Successfully start the Audit service with configurations (auditableOperationType [DDL, DML, QUERY, CONTROL], auditableOperationLevel GLOBAL, auditableOperationResult SUCCESS,FAIL)"),
+ // Create password history TODO: @Hongzhi Gao move password history under __audit
+ Arrays.asList(
+ "node_1",
+ "u_0",
+ "root",
+ "",
+ "OBJECT_AUTHENTICATION",
+ "DDL",
+ "null",
+ "null",
+ "true",
+ "root.__system",
+ "null",
+ "User root (ID=0) requests authority on object root.__system with result true"),
// Show audit database TODO: Fix typo in tree model
Arrays.asList(
"node_1",
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
index e9ab956ed53..051afda3764 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
@@ -50,7 +50,6 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
-import static org.apache.iotdb.db.audit.DNAuditLogger.PREFIX_PASSWORD_HISTORY;
import static org.apache.iotdb.db.it.utils.TestUtils.createUser;
import static org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualTest;
import static org.junit.Assert.assertEquals;
@@ -1520,7 +1519,7 @@ public class IoTDBAuthIT {
try (ResultSet resultSet =
statement.executeQuery(
- String.format("select last password from %s.`_userA`", PREFIX_PASSWORD_HISTORY))) {
+ "select last password from root.__system.password_history.`_userA`")) {
if (!resultSet.next()) {
fail("Password history not found");
}
@@ -1529,7 +1528,7 @@ public class IoTDBAuthIT {
try (ResultSet resultSet =
statement.executeQuery(
- String.format("select last oldPassword from %s.`_userA`", PREFIX_PASSWORD_HISTORY))) {
+ "select last oldPassword from root.__system.password_history.`_userA`")) {
if (!resultSet.next()) {
fail("Password history not found");
}
@@ -1540,13 +1539,13 @@ public class IoTDBAuthIT {
try (ResultSet resultSet =
statement.executeQuery(
- String.format("select last password from %s.`_userA`", PREFIX_PASSWORD_HISTORY))) {
+ "select last password from root.__system.password_history.`_userA`")) {
assertFalse(resultSet.next());
}
try (ResultSet resultSet =
statement.executeQuery(
- String.format("select last oldPassword from %s.`_userA`", PREFIX_PASSWORD_HISTORY))) {
+ "select last oldPassword from root.__system.password_history.`_userA`")) {
assertFalse(resultSet.next());
}
}
@@ -1557,7 +1556,7 @@ public class IoTDBAuthIT {
try (ResultSet resultSet =
statement.executeQuery(
- String.format("select last password from %s.`_userA`", PREFIX_PASSWORD_HISTORY))) {
+ "select last password from root.__system.password_history.`_userA`")) {
if (!resultSet.next()) {
fail("Password history not found");
}
@@ -1566,15 +1565,13 @@ public class IoTDBAuthIT {
try (ResultSet resultSet =
statement.executeQuery(
- String.format(
- "select oldPassword from %s.`_userA` order by time desc limit 1",
- PREFIX_PASSWORD_HISTORY))) {
+ "select oldPassword from root.__system.password_history.`_userA` order by time desc limit 1")) {
if (!resultSet.next()) {
fail("Password history not found");
}
assertEquals(
AuthUtils.encryptPassword("abcdef123456"),
- resultSet.getString(String.format("%s._userA.oldPassword", PREFIX_PASSWORD_HISTORY)));
+ resultSet.getString("root.__system.password_history._userA.oldPassword"));
}
}
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteDatabaseIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteDatabaseIT.java
index 4de6b726d44..c1a08c2fd82 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteDatabaseIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteDatabaseIT.java
@@ -159,8 +159,7 @@ public class IoTDBDeleteDatabaseIT extends AbstractSchemaIT {
result.add(resultSet.getString(1));
}
}
- // One for un-deletable AUDIT database
- assertEquals(1, result.size());
+ assertEquals(0, result.size());
}
}
diff --git a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
index 0d09fc3a8a0..279e0c76b2b 100644
--- a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
@@ -804,7 +804,6 @@ public class IoTDBDatabaseIT {
try (final Connection connection = EnvFactory.getEnv().getConnection();
final Statement statement = connection.createStatement()) {
- // One for AUDIT database
TestUtils.assertResultSetSize(statement.executeQuery("show databases"), 2);
}
}
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java
index b953e8f1df0..0242e9d27a7 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java
@@ -141,7 +141,7 @@ public class DeleteTimeSeriesProcedure
// Return the total num of timeSeries in schemaEngine black list
private long constructBlackList(final ConfigNodeProcedureEnv env) {
final Map<TConsensusGroupId, TRegionReplicaSet> targetSchemaRegionGroup =
- env.getConfigManager().getRelatedSchemaRegionGroup(patternTree, true);
+ env.getConfigManager().getRelatedSchemaRegionGroup(patternTree, false);
if (targetSchemaRegionGroup.isEmpty()) {
return 0;
}
@@ -260,7 +260,7 @@ public class DeleteTimeSeriesProcedure
new DeleteTimeSeriesRegionTaskExecutor<>(
"delete time series in schema engine",
env,
- env.getConfigManager().getRelatedSchemaRegionGroup(patternTree, true),
+ env.getConfigManager().getRelatedSchemaRegionGroup(patternTree, false),
CnToDnAsyncRequestType.DELETE_TIMESERIES,
((dataNodeLocation, consensusGroupIdList) ->
new TDeleteTimeSeriesReq(consensusGroupIdList, patternTreeBytes)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
index c26bbb1a38d..e2f2abd4901 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
@@ -81,7 +81,9 @@ import java.util.function.Supplier;
import static org.apache.iotdb.db.pipe.receiver.protocol.legacy.loader.ILoader.SCHEMA_FETCHER;
public class DNAuditLogger extends AbstractAuditLogger {
- public static final String PREFIX_PASSWORD_HISTORY = "root.__audit.password_history";
+ // TODO: @Hongzhi Gao move this path under __audit
+ public static final String PREFIX_PASSWORD_HISTORY =
+ "root." + SystemConstant.SYSTEM_PREFIX_KEY + ".password_history";
private static final Logger logger = LoggerFactory.getLogger(DNAuditLogger.class);
// TODO: @zhujt20 Optimize the following stupid retry
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
index fde28d760d5..3cf9c5d33db 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
@@ -153,8 +153,8 @@ public class SessionManager implements SessionManagerMBean {
new SessionInfo(
0,
new UserEntity(
- AuthorityChecker.INTERNAL_AUDIT_USER_ID,
- AuthorityChecker.INTERNAL_AUDIT_USER,
+ AuthorityChecker.SUPER_USER_ID,
+ AuthorityChecker.SUPER_USER,
IoTDBDescriptor.getInstance().getConfig().getInternalAddress()),
ZoneId.systemDefault());
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
index 76761aab42f..1f5df01d202 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
@@ -978,11 +978,8 @@ public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAcces
.setDatabase(databaseName.getFullPath())
.setPrivilegeType(PrivilegeType.MANAGE_DATABASE)
.setAuditLogOperation(AuditLogOperation.DDL);
+ // root.__audit can never be created or alter
if (TREE_MODEL_AUDIT_DATABASE_PATH.equals(databaseName)) {
- if (AuthorityChecker.INTERNAL_AUDIT_USER.equals(auditEntity.getUsername())) {
- // root.__audit can never be created or alter by other users
- return SUCCEED;
- }
recordObjectAuthenticationAuditLog(auditEntity.setResult(false), databaseName::getFullPath);
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(String.format(READ_ONLY_DB_ERROR_MSG, TREE_MODEL_AUDIT_DATABASE));