This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch auth
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/auth by this push:
new f3e417cf9a0 Fix create user and grant
new 1092065e4f5 Merge branch 'auth' of https://github.com/apache/iotdb
into auth
f3e417cf9a0 is described below
commit f3e417cf9a015574d75d776f5416cae717cd851f
Author: JackieTien97 <[email protected]>
AuthorDate: Wed Aug 30 21:26:05 2023 +0800
Fix create user and grant
---
.../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 8 +++---
.../statemachine/ConfigRegionStateMachine.java | 4 +--
.../confignode/manager/PermissionManager.java | 2 +-
.../iotdb/confignode/manager/ProcedureManager.java | 2 +-
.../iotdb/confignode/persistence/AuthorInfo.java | 1 +
.../persistence/executor/ConfigPlanExecutor.java | 2 +-
.../impl/sync/AuthOperationProcedure.java | 31 ++++++++++++++--------
.../{ => auth}/AuthOperationProcedureState.java | 2 +-
.../procedure/store/ProcedureFactory.java | 2 ++
.../iotdb/db/auth/ClusterAuthorityFetcher.java | 2 +-
.../db/queryengine/plan/parser/ASTVisitor.java | 4 +--
.../plan/statement/sys/AuthorStatement.java | 8 +++---
.../apache/iotdb/commons/conf/CommonConfig.java | 6 ++---
13 files changed, 42 insertions(+), 32 deletions(-)
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 dfd70655a6d..381c1b48fbd 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
@@ -846,12 +846,12 @@ alterUser
// Grant User Privileges
grantUser
- : GRANT USER userName=identifier PRIVILEGES privileges (ON prefixPath
(COMMA prefixPath)*)? (grantOpt)?
+ : GRANT privileges ON prefixPath (COMMA prefixPath)* TO USER
userName=identifier (grantOpt)?
;
// Grant Role Privileges
grantRole
- : GRANT ROLE roleName=identifier PRIVILEGES privileges (ON prefixPath
(COMMA prefixPath)*)? (grantOpt)?
+ : GRANT privileges ON prefixPath (COMMA prefixPath)* TO ROLE
roleName=identifier (grantOpt)?
;
// Grant Option
@@ -866,12 +866,12 @@ grantRoleToUser
// Revoke User Privileges
revokeUser
- : REVOKE USER userName=identifier PRIVILEGES privileges (ON prefixPath
(COMMA prefixPath)*)?
+ : REVOKE privileges ON prefixPath (COMMA prefixPath)* FROM USER
userName=identifier
;
// Revoke Role Privileges
revokeRole
- : REVOKE ROLE roleName=identifier PRIVILEGES privileges (ON prefixPath
(COMMA prefixPath)*)?
+ : REVOKE privileges ON prefixPath (COMMA prefixPath)* FROM ROLE
roleName=identifier
;
// Revoke Role From User
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/statemachine/ConfigRegionStateMachine.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/statemachine/ConfigRegionStateMachine.java
index fdec21c1c00..6367655516f 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/statemachine/ConfigRegionStateMachine.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/statemachine/ConfigRegionStateMachine.java
@@ -115,7 +115,7 @@ public class ConfigRegionStateMachine
TSStatus result;
try {
result = executor.executeNonQueryPlan(plan);
- } catch (UnknownPhysicalPlanTypeException | AuthException e) {
+ } catch (UnknownPhysicalPlanTypeException e) {
LOGGER.error(e.getMessage());
result = new
TSStatus(TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode());
}
@@ -334,7 +334,7 @@ public class ConfigRegionStateMachine
ConfigPhysicalPlan nextPlan = logReader.next();
try {
executor.executeNonQueryPlan(nextPlan);
- } catch (UnknownPhysicalPlanTypeException | AuthException e) {
+ } catch (UnknownPhysicalPlanTypeException e) {
LOGGER.error(e.getMessage());
}
}
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 961e9396b62..cd849a7e311 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
@@ -68,7 +68,7 @@ public class PermissionManager {
} else {
List<TDataNodeConfiguration> allDataNodes =
configManager.getNodeManager().getRegisteredDataNodes();
- tsStatus =
configManager.getProcedureManager().OperateAuthPlan(authorPlan, allDataNodes);
+ tsStatus =
configManager.getProcedureManager().operateAuthPlan(authorPlan, allDataNodes);
}
return tsStatus;
} catch (ConsensusException e) {
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 a2af9bb6b85..a5b4045c565 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
@@ -886,7 +886,7 @@ public class ProcedureManager {
}
}
- public TSStatus OperateAuthPlan(AuthorPlan authorPlan,
List<TDataNodeConfiguration> dns) {
+ public TSStatus operateAuthPlan(AuthorPlan authorPlan,
List<TDataNodeConfiguration> dns) {
try {
final long procedureId =
executor.submitProcedure(new AuthOperationProcedure(authorPlan,
dns));
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/AuthorInfo.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/AuthorInfo.java
index cd0d5bd402b..75fcca3ed1e 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/AuthorInfo.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/AuthorInfo.java
@@ -563,6 +563,7 @@ public class AuthorInfo implements SnapshotProcessor {
tUserResp.setPrivilegeList(userPrivilegeList);
tUserResp.setRoleList(user.getRoleList());
tUserResp.setSysPriSet(user.getSysPrivilege());
+ tUserResp.setSysPriSetGrantOpt(user.getSysPriGrantOpt());
}
// Permission information for roles owned by users
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
index 2e226cd05b8..81dc6364350 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
@@ -293,7 +293,7 @@ public class ConfigPlanExecutor {
}
public TSStatus executeNonQueryPlan(ConfigPhysicalPlan physicalPlan)
- throws UnknownPhysicalPlanTypeException, AuthException {
+ throws UnknownPhysicalPlanTypeException {
switch (physicalPlan.getType()) {
case RegisterDataNode:
return nodeInfo.registerDataNode((RegisterDataNodePlan) physicalPlan);
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
index bf3edcedf8b..56e70ad1475 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
@@ -31,8 +31,8 @@ import
org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
import org.apache.iotdb.confignode.consensus.request.auth.AuthorPlan;
import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
-import
org.apache.iotdb.confignode.procedure.impl.statemachine.StateMachineProcedure;
-import org.apache.iotdb.confignode.procedure.state.AuthOperationProcedureState;
+import org.apache.iotdb.confignode.procedure.impl.node.AbstractNodeProcedure;
+import
org.apache.iotdb.confignode.procedure.state.auth.AuthOperationProcedureState;
import org.apache.iotdb.confignode.procedure.store.ProcedureType;
import org.apache.iotdb.consensus.exception.ConsensusException;
import org.apache.iotdb.mpp.rpc.thrift.TInvalidatePermissionCacheReq;
@@ -49,11 +49,11 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Objects;
-import static
org.apache.iotdb.confignode.procedure.state.AuthOperationProcedureState.DATANODE_AUTHCACHE_INVALIDING;
+import static
org.apache.iotdb.confignode.procedure.state.auth.AuthOperationProcedureState.DATANODE_AUTHCACHE_INVALIDING;
-public class AuthOperationProcedure
- extends StateMachineProcedure<ConfigNodeProcedureEnv,
AuthOperationProcedureState> {
+public class AuthOperationProcedure extends
AbstractNodeProcedure<AuthOperationProcedureState> {
private static final Logger LOGGER =
LoggerFactory.getLogger(AuthOperationProcedure.class);
private String user;
@@ -61,7 +61,7 @@ public class AuthOperationProcedure
private AuthorPlan plan;
- private int timeoutMS;
+ private long timeoutMS;
private static final String CONSENSUS_WRITE_ERROR =
"Failed in the write API executing the consensus layer due to: ";
@@ -99,14 +99,15 @@ public class AuthOperationProcedure
req.setRoleName(role);
Iterator<Pair<TDataNodeConfiguration, Long>> it =
dataNodesToInvalid.iterator();
while (it.hasNext()) {
- if (it.next().getRight() + this.timeoutMS <
System.currentTimeMillis()) {
+ Pair<TDataNodeConfiguration, Long> pair = it.next();
+ if (pair.getRight() + this.timeoutMS < System.currentTimeMillis())
{
it.remove();
continue;
}
status =
SyncDataNodeClientPool.getInstance()
.sendSyncRequestToDataNodeWithRetry(
-
it.next().getLeft().getLocation().getInternalEndPoint(),
+ pair.getLeft().getLocation().getInternalEndPoint(),
req,
DataNodeRequestType.INVALIDATE_PERMISSION_CACHE);
if (status.getCode() ==
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -123,7 +124,7 @@ public class AuthOperationProcedure
} catch (Exception e) {
if (isRollbackSupported(state)) {
LOGGER.error("Fail when execute {} ", plan);
- setFailure(new ProcedureException(e.getMessage()));
+ setFailure(new ProcedureException(e));
} else {
LOGGER.error("Retrievable error trying to execute plan {}, state: {}",
plan, state, e);
if (getCycles() > RETRY_THRESHOLD) {
@@ -203,7 +204,7 @@ public class AuthOperationProcedure
ThriftCommonsSerDeUtils.deserializeTDataNodeConfiguration(byteBuffer);
this.datanodes.add(datanode);
}
- this.timeoutMS = ReadWriteIOUtils.readInt(byteBuffer);
+ this.timeoutMS = ReadWriteIOUtils.readLong(byteBuffer);
try {
ReadWriteIOUtils.readInt(byteBuffer);
this.plan = (AuthorPlan) ConfigPhysicalPlan.Factory.create(byteBuffer);
@@ -221,6 +222,14 @@ public class AuthOperationProcedure
return false;
}
AuthOperationProcedure that = (AuthOperationProcedure) o;
- return plan.equals(that.plan) && datanodes.equals(that.datanodes);
+ return timeoutMS == that.timeoutMS
+ && Objects.equals(plan, that.plan)
+ && Objects.equals(dataNodesToInvalid, that.dataNodesToInvalid)
+ && Objects.equals(datanodes, that.datanodes);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(plan, timeoutMS, dataNodesToInvalid, datanodes);
}
}
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/AuthOperationProcedureState.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/auth/AuthOperationProcedureState.java
similarity index 93%
rename from
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/AuthOperationProcedureState.java
rename to
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/auth/AuthOperationProcedureState.java
index 5e75c726159..0bc263ad7ed 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/AuthOperationProcedureState.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/auth/AuthOperationProcedureState.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.confignode.procedure.state;
+package org.apache.iotdb.confignode.procedure.state.auth;
public enum AuthOperationProcedureState {
INIT,
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java
index 1f1f7e50217..997bbbbb8a4 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java
@@ -238,6 +238,8 @@ public class ProcedureFactory implements IProcedureFactory {
return ProcedureType.DELETE_LOGICAL_VIEW_PROCEDURE;
} else if (procedure instanceof AlterLogicalViewProcedure) {
return ProcedureType.ALTER_LOGICAL_VIEW_PROCEDURE;
+ } else if (procedure instanceof AuthOperationProcedure) {
+ return ProcedureType.AUTH_OPERATE_PROCEDURE;
}
return null;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/ClusterAuthorityFetcher.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/ClusterAuthorityFetcher.java
index 762dc4156f6..91893146fd8 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/ClusterAuthorityFetcher.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/ClusterAuthorityFetcher.java
@@ -305,7 +305,7 @@ public class ClusterAuthorityFetcher implements
IAuthorityFetcher {
TSStatus tsStatus = configNodeClient.operatePermission(authorizerReq);
// Get response or throw exception
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
- logger.error(
+ logger.warn(
"Failed to execute {} in config node, status is {}.",
AuthorType.values()[authorizerReq.getAuthorType()].toString().toLowerCase(Locale.ROOT),
tsStatus);
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 aab5770c0f9..700789dfa7e 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
@@ -2200,7 +2200,7 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
authorStatement.setUserName(parseIdentifier(ctx.userName.getText()));
authorStatement.setPrivilegeList(privileges);
authorStatement.setNodeNameList(nodeNameList);
- authorStatement.setGrantOpt(!ctx.grantOpt().isEmpty());
+ authorStatement.setGrantOpt(ctx.grantOpt() != null);
return authorStatement;
}
@@ -2220,7 +2220,7 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
authorStatement.setRoleName(parseIdentifier(ctx.roleName.getText()));
authorStatement.setPrivilegeList(privileges);
authorStatement.setNodeNameList(nodeNameList);
- authorStatement.setGrantOpt(!ctx.grantOpt().isEmpty());
+ authorStatement.setGrantOpt(ctx.grantOpt() != null);
return authorStatement;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
index 8bfbbc56861..dead54cd781 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
@@ -220,7 +220,7 @@ public class AuthorStatement extends Statement implements
IConfigStatement {
case CREATE_USER:
TSStatus status =
AuthorityChecker.getTSStatus(
- AuthorityChecker.SUPER_USER.equals(this.userName),
+ !AuthorityChecker.SUPER_USER.equals(this.userName),
"Cannot create user has same name with admin user");
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
@@ -252,6 +252,8 @@ public class AuthorStatement extends Statement implements
IConfigStatement {
case DROP_ROLE:
case LIST_ROLE:
case LIST_ROLE_PRIVILEGE:
+ case GRANT_USER_ROLE:
+ case REVOKE_USER_ROLE:
if (AuthorityChecker.SUPER_USER.equals(userName)) {
return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
}
@@ -269,10 +271,6 @@ public class AuthorStatement extends Statement implements
IConfigStatement {
return AuthorityChecker.getTSStatus(
AuthorityChecker.checkGrantOption(userName, privilegeList,
nodeNameList, authorType),
"Has no permission to " + authorType);
- case GRANT_USER_ROLE:
- case REVOKE_USER_ROLE:
- // TODO ?
- return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
default:
throw new IllegalArgumentException("Unknown authorType: " +
authorType);
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
index 509e9d329c0..dc03e905cb3 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
@@ -195,7 +195,7 @@ public class CommonConfig {
// maximum number of Cluster Databases allowed
private int databaseLimitThreshold = -1;
- private int datanodeTokenTimeoutMS = 180 * 1000; // 3 minutes
+ private long datanodeTokenTimeoutMS = 180 * 1000; // 3 minutes
CommonConfig() {
// Empty constructor
@@ -755,11 +755,11 @@ public class CommonConfig {
this.databaseLimitThreshold = databaseLimitThreshold;
}
- public int getDatanodeTokenTimeoutMS() {
+ public long getDatanodeTokenTimeoutMS() {
return datanodeTokenTimeoutMS;
}
- public void setDatanodeTokenTimeoutMS(int timeoutMS) {
+ public void setDatanodeTokenTimeoutMS(long timeoutMS) {
this.datanodeTokenTimeoutMS = timeoutMS;
}
}