You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2022/05/23 08:38:18 UTC
[iotdb] branch master updated: [IOTDB-3231] Return detailed failure message for opening a client (#5989)
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 18638376c1 [IOTDB-3231] Return detailed failure message for opening a client (#5989)
18638376c1 is described below
commit 18638376c1eb2eb58448cf39c8d3e26b6761e305
Author: Mrquan <50...@users.noreply.github.com>
AuthorDate: Mon May 23 16:38:13 2022 +0800
[IOTDB-3231] Return detailed failure message for opening a client (#5989)
---
.../main/java/org/apache/iotdb/db/auth/AuthorityChecker.java | 11 +++++++----
.../iotdb/db/service/thrift/impl/DataNodeTSIServiceImpl.java | 9 ++++++++-
.../org/apache/iotdb/rpc/ConfigNodeConnectionException.java | 2 +-
.../src/main/java/org/apache/iotdb/rpc/TSStatusCode.java | 1 +
4 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java b/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
index 2966953dec..b2e58c3610 100644
--- a/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
+++ b/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
@@ -117,7 +117,8 @@ public class AuthorityChecker {
* @return if permission-check is passed
*/
public static boolean checkPermission(
- String username, List<? extends PartialPath> paths, StatementType type, String targetUser) {
+ String username, List<? extends PartialPath> paths, StatementType type, String targetUser)
+ throws ConfigNodeConnectionException {
if (SUPER_USER.equals(username)) {
return true;
}
@@ -163,7 +164,8 @@ public class AuthorityChecker {
}
/** Check the user */
- public static TSStatus checkUser(String username, String password) {
+ public static TSStatus checkUser(String username, String password)
+ throws ConfigNodeConnectionException {
TLoginReq req = new TLoginReq(username, password);
TSStatus status = null;
try (ConfigNodeClient configNodeClient =
@@ -200,7 +202,7 @@ public class AuthorityChecker {
/** Check whether specific user has the authorization to given plan. */
public static boolean checkAuthorization(Statement statement, String username)
- throws AuthException {
+ throws AuthException, ConfigNodeConnectionException {
if (!statement.isAuthenticationRequired()) {
return true;
}
@@ -212,7 +214,8 @@ public class AuthorityChecker {
username, statement.getPaths(), statement.getType(), targetUser);
}
- public static TSStatus checkPath(String username, List<String> allPath, int permission) {
+ public static TSStatus checkPath(String username, List<String> allPath, int permission)
+ throws ConfigNodeConnectionException {
TCheckUserPrivilegesReq req = new TCheckUserPrivilegesReq(username, allPath, permission);
TSStatus status = null;
try (ConfigNodeClient configNodeClient =
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeTSIServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeTSIServiceImpl.java
index 04efb0a168..37c51deef6 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeTSIServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeTSIServiceImpl.java
@@ -57,6 +57,7 @@ import org.apache.iotdb.db.service.metrics.enums.Operation;
import org.apache.iotdb.db.utils.QueryDataSetUtils;
import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
import org.apache.iotdb.metrics.utils.MetricLevel;
+import org.apache.iotdb.rpc.ConfigNodeConnectionException;
import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.iotdb.service.rpc.thrift.ServerProperties;
@@ -144,7 +145,13 @@ public class DataNodeTSIServiceImpl implements TSIEventHandler {
@Override
public TSOpenSessionResp openSession(TSOpenSessionReq req) throws TException {
IoTDBConstant.ClientVersion clientVersion = parseClientVersion(req);
- TSStatus loginStatus = AuthorityChecker.checkUser(req.username, req.password);
+ TSStatus loginStatus;
+ try {
+ loginStatus = AuthorityChecker.checkUser(req.username, req.password);
+ } catch (ConfigNodeConnectionException e) {
+ TSStatus tsStatus = RpcUtils.getStatus(TSStatusCode.AUTHENTICATION_ERROR, e.getMessage());
+ return new TSOpenSessionResp(tsStatus, CURRENT_RPC_VERSION);
+ }
BasicOpenSessionResp openSessionResp = new BasicOpenSessionResp();
long sessionId = -1;
if (loginStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
diff --git a/service-rpc/src/main/java/org/apache/iotdb/rpc/ConfigNodeConnectionException.java b/service-rpc/src/main/java/org/apache/iotdb/rpc/ConfigNodeConnectionException.java
index ee77bc1ea3..a4030c16e5 100644
--- a/service-rpc/src/main/java/org/apache/iotdb/rpc/ConfigNodeConnectionException.java
+++ b/service-rpc/src/main/java/org/apache/iotdb/rpc/ConfigNodeConnectionException.java
@@ -18,7 +18,7 @@
*/
package org.apache.iotdb.rpc;
-public class ConfigNodeConnectionException extends RuntimeException {
+public class ConfigNodeConnectionException extends Exception {
public ConfigNodeConnectionException(String message) {
super(message);
diff --git a/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java b/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
index bb037da449..08146da4b4 100644
--- a/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
+++ b/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
@@ -103,6 +103,7 @@ public enum TSStatusCode {
EXECUTE_PERMISSION_EXCEPTION_ERROR(604),
USER_NOT_EXIST_ERROR(605),
ROLE_NOT_EXIST_ERROR(606),
+ AUTHENTICATION_ERROR(607),
// cluster-related errors
PARTITION_NOT_READY(700),