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),