This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 5dbc7e1c0e [fix](fe) add fe isReady check before getMasterIp (#18417)
5dbc7e1c0e is described below

commit 5dbc7e1c0e3cf6011638ce16765bf9955c028cf5
Author: xueweizhang <zxw520bl...@163.com>
AuthorDate: Wed Apr 12 14:33:31 2023 +0800

    [fix](fe) add fe isReady check before getMasterIp (#18417)
    
    when fe node is not ready, will get "" for master ip, and redirect will get 
error
    
    ---------
    
    Signed-off-by: nextdreamblue <zxw520bl...@163.com>
---
 .../doris/httpv2/meta/ColocateMetaService.java     | 14 ++++----
 .../apache/doris/httpv2/rest/CancelLoadAction.java |  3 +-
 .../doris/httpv2/rest/GetLoadInfoAction.java       |  3 +-
 .../doris/httpv2/rest/GetStreamLoadState.java      |  3 +-
 .../org/apache/doris/httpv2/rest/LoadAction.java   |  2 +-
 .../org/apache/doris/httpv2/rest/MultiAction.java  | 13 ++++---
 .../doris/httpv2/rest/RestBaseController.java      | 15 +++++++-
 .../org/apache/doris/httpv2/rest/ShowAction.java   | 10 ++++--
 .../doris/httpv2/rest/manager/NodeAction.java      | 40 +++++++++++-----------
 .../doris/httpv2/restv2/StatisticAction.java       |  9 +++--
 .../org/apache/doris/load/loadv2/TokenManager.java |  5 ++-
 11 files changed, 69 insertions(+), 48 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/meta/ColocateMetaService.java
 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/meta/ColocateMetaService.java
index 9d63a00501..be1b9fb3d2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/meta/ColocateMetaService.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/meta/ColocateMetaService.java
@@ -84,9 +84,9 @@ public class ColocateMetaService extends RestBaseController {
     }
 
     public Object executeWithoutPassword(HttpServletRequest request, 
HttpServletResponse response)
-            throws DdlException {
+            throws Exception {
         executeCheckPassword(request, response);
-        RedirectView redirectView = redirectToMaster(request, response);
+        RedirectView redirectView = redirectToMasterOrException(request, 
response);
         if (redirectView != null) {
             return redirectView;
         }
@@ -95,14 +95,14 @@ public class ColocateMetaService extends RestBaseController 
{
     }
 
     @RequestMapping(path = "/api/colocate", method = RequestMethod.GET)
-    public Object colocate(HttpServletRequest request, HttpServletResponse 
response) throws DdlException {
+    public Object colocate(HttpServletRequest request, HttpServletResponse 
response) throws Exception {
         executeWithoutPassword(request, response);
         return ResponseEntityBuilder.ok(Env.getCurrentColocateIndex());
     }
 
     @RequestMapping(path = "/api/colocate/group_stable", method = 
{RequestMethod.POST, RequestMethod.DELETE})
     public Object group_stable(HttpServletRequest request, HttpServletResponse 
response)
-            throws DdlException {
+            throws Exception {
         if (needRedirect(request.getScheme())) {
             return redirectToHttps(request);
         }
@@ -121,7 +121,7 @@ public class ColocateMetaService extends RestBaseController 
{
 
     @RequestMapping(path = "/api/colocate/bucketseq", method = 
RequestMethod.POST)
     public Object bucketseq(HttpServletRequest request, HttpServletResponse 
response, @RequestBody String meta)
-            throws DdlException {
+            throws Exception {
         if (needRedirect(request.getScheme())) {
             return redirectToHttps(request);
         }
@@ -165,7 +165,7 @@ public class ColocateMetaService extends RestBaseController 
{
     }
 
     private void updateBackendPerBucketSeq(GroupId groupId, List<List<Long>> 
backendsPerBucketSeq)
-            throws DdlException {
-        throw new DdlException("Currently not support");
+            throws Exception {
+        throw new Exception("Currently not support");
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/CancelLoadAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/CancelLoadAction.java
index 5468bf812a..6a2a8fed1d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/CancelLoadAction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/CancelLoadAction.java
@@ -31,7 +31,6 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.servlet.view.RedirectView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -50,7 +49,7 @@ public class CancelLoadAction extends RestBaseController {
         }
 
         executeCheckPassword(request, response);
-        RedirectView redirectView = redirectToMaster(request, response);
+        Object redirectView = redirectToMaster(request, response);
         if (redirectView != null) {
             return redirectView;
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/GetLoadInfoAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/GetLoadInfoAction.java
index 3f29a96b44..40cf8be18e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/GetLoadInfoAction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/GetLoadInfoAction.java
@@ -30,7 +30,6 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.servlet.view.RedirectView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -77,7 +76,7 @@ public class GetLoadInfoAction extends RestBaseController {
             return new RestBaseResult("No cluster selected");
         }
 
-        RedirectView redirectView = redirectToMaster(request, response);
+        Object redirectView = redirectToMaster(request, response);
         if (redirectView != null) {
             return redirectView;
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/GetStreamLoadState.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/GetStreamLoadState.java
index 4b195a9332..641c46668c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/GetStreamLoadState.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/GetStreamLoadState.java
@@ -27,7 +27,6 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.servlet.view.RedirectView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -40,7 +39,7 @@ public class GetStreamLoadState extends RestBaseController {
                           HttpServletRequest request, HttpServletResponse 
response) {
         executeCheckPassword(request, response);
 
-        RedirectView redirectView = redirectToMaster(request, response);
+        Object redirectView = redirectToMaster(request, response);
         if (redirectView != null) {
             return redirectView;
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/LoadAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/LoadAction.java
index df0f689953..7d2a110061 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/LoadAction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/LoadAction.java
@@ -154,7 +154,7 @@ public class LoadAction extends RestBaseController {
             if (!isStreamLoad && 
!Strings.isNullOrEmpty(request.getParameter(SUB_LABEL_NAME_PARAM))) {
                 // only multi mini load need to redirect to Master, because 
only Master has the info of table to
                 // the Backend which the file exists.
-                RedirectView redirectView = redirectToMaster(request, 
response);
+                Object redirectView = redirectToMaster(request, response);
                 if (redirectView != null) {
                     return redirectView;
                 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/MultiAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/MultiAction.java
index b04005ae7c..c4a3eb0d99 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/MultiAction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/MultiAction.java
@@ -31,7 +31,6 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.servlet.view.RedirectView;
 
 import java.util.List;
 import java.util.Map;
@@ -69,7 +68,7 @@ public class MultiAction extends RestBaseController {
             checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
fullDbName, PrivPredicate.LOAD);
 
             // only Master has these load info
-            RedirectView redirectView = redirectToMaster(request, response);
+            Object redirectView = redirectToMaster(request, response);
             if (redirectView != null) {
                 return redirectView;
             }
@@ -100,7 +99,7 @@ public class MultiAction extends RestBaseController {
             checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
fullDbName, PrivPredicate.LOAD);
 
             // only Master has these load info
-            RedirectView redirectView = redirectToMaster(request, response);
+            Object redirectView = redirectToMaster(request, response);
             if (redirectView != null) {
                 return redirectView;
             }
@@ -136,7 +135,7 @@ public class MultiAction extends RestBaseController {
             // Multi start request must redirect to master, because all 
following sub requests will be handled
             // on Master
 
-            RedirectView redirectView = redirectToMaster(request, response);
+            Object redirectView = redirectToMaster(request, response);
             if (redirectView != null) {
                 return redirectView;
             }
@@ -187,7 +186,7 @@ public class MultiAction extends RestBaseController {
             String fullDbName = getFullDbName(dbName);
             checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
fullDbName, PrivPredicate.LOAD);
 
-            RedirectView redirectView = redirectToMaster(request, response);
+            Object redirectView = redirectToMaster(request, response);
             if (redirectView != null) {
                 return redirectView;
             }
@@ -222,7 +221,7 @@ public class MultiAction extends RestBaseController {
 
             // only Master has these load info
 
-            RedirectView redirectView = redirectToMaster(request, response);
+            Object redirectView = redirectToMaster(request, response);
             if (redirectView != null) {
                 return redirectView;
             }
@@ -259,7 +258,7 @@ public class MultiAction extends RestBaseController {
             checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
fullDbName, PrivPredicate.LOAD);
 
             // only Master has these load info
-            RedirectView redirectView = redirectToMaster(request, response);
+            Object redirectView = redirectToMaster(request, response);
             if (redirectView != null) {
                 return redirectView;
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/RestBaseController.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/RestBaseController.java
index 2bbf914051..f8eccf567a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/RestBaseController.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/RestBaseController.java
@@ -22,6 +22,7 @@ import org.apache.doris.catalog.Env;
 import org.apache.doris.cluster.ClusterNamespace;
 import org.apache.doris.common.Config;
 import org.apache.doris.httpv2.controller.BaseController;
+import org.apache.doris.httpv2.entity.ResponseEntityBuilder;
 import org.apache.doris.httpv2.exception.UnauthorizedException;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.system.SystemInfoService;
@@ -108,14 +109,26 @@ public class RestBaseController extends BaseController {
         return redirectView;
     }
 
-    public RedirectView redirectToMaster(HttpServletRequest request, 
HttpServletResponse response) {
+    public RedirectView redirectToMasterOrException(HttpServletRequest 
request, HttpServletResponse response)
+                    throws Exception {
         Env env = Env.getCurrentEnv();
         if (env.isMaster()) {
             return null;
         }
+        if (!env.isReady()) {
+            throw new Exception("Node catalog is not ready, please wait for a 
while.");
+        }
         return redirectTo(request, new TNetworkAddress(env.getMasterIp(), 
env.getMasterHttpPort()));
     }
 
+    public Object redirectToMaster(HttpServletRequest request, 
HttpServletResponse response) {
+        try {
+            return redirectToMasterOrException(request, response);
+        } catch (Exception e) {
+            return ResponseEntityBuilder.okWithCommonError(e.getMessage());
+        }
+    }
+
     public void getFile(HttpServletRequest request, HttpServletResponse 
response, Object obj, String fileName)
             throws IOException {
         response.setHeader("Content-type", "application/octet-stream");
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/ShowAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/ShowAction.java
index ac9748c90e..efb3a0fe4a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/ShowAction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/ShowAction.java
@@ -115,9 +115,13 @@ public class ShowAction extends RestBaseController {
 
         // forward to master if necessary
         if (!Env.getCurrentEnv().isMaster() && isForward) {
-            RedirectView redirectView = redirectToMaster(request, response);
-            Preconditions.checkNotNull(redirectView);
-            return redirectView;
+            try {
+                RedirectView redirectView = 
redirectToMasterOrException(request, response);
+                Preconditions.checkNotNull(redirectView);
+                return redirectView;
+            } catch (Exception e) {
+                return ResponseEntityBuilder.okWithCommonError(e.getMessage());
+            }
         } else {
             ProcNodeInterface procNode = null;
             ProcService instance = ProcService.getInstance();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/manager/NodeAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/manager/NodeAction.java
index dc87292a22..421f63cba9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/manager/NodeAction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/manager/NodeAction.java
@@ -18,13 +18,11 @@
 package org.apache.doris.httpv2.rest.manager;
 
 import org.apache.doris.catalog.Env;
-import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.ConfigBase;
 import org.apache.doris.common.MarkedCountDownLatch;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.ThreadPoolManager;
-import org.apache.doris.common.UserException;
 import org.apache.doris.common.proc.ProcResult;
 import org.apache.doris.common.proc.ProcService;
 import org.apache.doris.common.util.PropertyAnalyzer;
@@ -107,7 +105,7 @@ public class NodeAction extends RestBaseController {
 
     // Returns all fe information, similar to 'show frontends'.
     @RequestMapping(path = "/frontends", method = RequestMethod.GET)
-    public Object frontends_info(HttpServletRequest request, 
HttpServletResponse response) throws AnalysisException {
+    public Object frontends_info(HttpServletRequest request, 
HttpServletResponse response) throws Exception {
         executeCheckPassword(request, response);
         checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
 
@@ -116,7 +114,7 @@ public class NodeAction extends RestBaseController {
 
     // Returns all be information, similar to 'show backends'.
     @RequestMapping(path = "/backends", method = RequestMethod.GET)
-    public Object backends_info(HttpServletRequest request, 
HttpServletResponse response) throws AnalysisException {
+    public Object backends_info(HttpServletRequest request, 
HttpServletResponse response) throws Exception {
         executeCheckPassword(request, response);
         checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
 
@@ -125,7 +123,7 @@ public class NodeAction extends RestBaseController {
 
     // Returns all broker information, similar to 'show broker'.
     @RequestMapping(path = "/brokers", method = RequestMethod.GET)
-    public Object brokers_info(HttpServletRequest request, HttpServletResponse 
response) throws AnalysisException {
+    public Object brokers_info(HttpServletRequest request, HttpServletResponse 
response) throws Exception {
         executeCheckPassword(request, response);
         checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
 
@@ -143,12 +141,12 @@ public class NodeAction extends RestBaseController {
     //   ]
     // }
     private Object fetchNodeInfo(HttpServletRequest request, 
HttpServletResponse response, String procPath)
-            throws AnalysisException {
-        if (!Env.getCurrentEnv().isMaster()) {
-            return redirectToMaster(request, response);
-        }
-
+            throws Exception {
         try {
+            if (!Env.getCurrentEnv().isMaster()) {
+                return redirectToMasterOrException(request, response);
+            }
+
             ProcResult procResult = 
ProcService.getInstance().open(procPath).fetchResult();
             List<String> columnNames = 
Lists.newArrayList(procResult.getColumnNames());
             return ResponseEntityBuilder.ok(new NodeInfo(columnNames, 
procResult.getRows()));
@@ -597,10 +595,11 @@ public class NodeAction extends RestBaseController {
     @PostMapping("/{action}/be")
     public Object operateBackend(HttpServletRequest request, 
HttpServletResponse response, @PathVariable String action,
             @RequestBody BackendReqInfo reqInfo) {
-        if (!Env.getCurrentEnv().isMaster()) {
-            return redirectToMaster(request, response);
-        }
         try {
+            if (!Env.getCurrentEnv().isMaster()) {
+                return redirectToMasterOrException(request, response);
+            }
+
             List<String> hostPorts = reqInfo.getHostPorts();
             List<HostInfo> hostInfos = new ArrayList<>();
             for (String hostPort : hostPorts) {
@@ -631,8 +630,8 @@ public class NodeAction extends RestBaseController {
                             });
                 });
             }
-        } catch (UserException userException) {
-            return 
ResponseEntityBuilder.okWithCommonError(userException.getMessage());
+        } catch (Exception e) {
+            return ResponseEntityBuilder.okWithCommonError(e.getMessage());
         }
         return ResponseEntityBuilder.ok();
     }
@@ -640,10 +639,11 @@ public class NodeAction extends RestBaseController {
     @PostMapping("/{action}/fe")
     public Object operateFrontends(HttpServletRequest request, 
HttpServletResponse response,
             @PathVariable String action, @RequestBody FrontendReqInfo reqInfo) 
{
-        if (!Env.getCurrentEnv().isMaster()) {
-            return redirectToMaster(request, response);
-        }
         try {
+            if (!Env.getCurrentEnv().isMaster()) {
+                return redirectToMasterOrException(request, response);
+            }
+
             String role = reqInfo.getRole();
             Env currentEnv = Env.getCurrentEnv();
             FrontendNodeType frontendNodeType;
@@ -658,8 +658,8 @@ public class NodeAction extends RestBaseController {
             } else if ("DROP".equals(action)) {
                 currentEnv.dropFrontend(frontendNodeType, info.getIp(), 
info.getHostName(), info.getPort());
             }
-        } catch (UserException userException) {
-            return 
ResponseEntityBuilder.okWithCommonError(userException.getMessage());
+        } catch (Exception e) {
+            return ResponseEntityBuilder.okWithCommonError(e.getMessage());
         }
         return ResponseEntityBuilder.ok();
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/restv2/StatisticAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/restv2/StatisticAction.java
index 368c870f31..623b651442 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/restv2/StatisticAction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/restv2/StatisticAction.java
@@ -50,9 +50,14 @@ public class StatisticAction extends RestBaseController {
             executeCheckPassword(request, response);
         }
 
-        if (!Env.getCurrentEnv().isMaster()) {
-            return redirectToMaster(request, response);
+        try {
+            if (!Env.getCurrentEnv().isMaster()) {
+                return redirectToMasterOrException(request, response);
+            }
+        } catch (Exception e) {
+            return ResponseEntityBuilder.okWithCommonError(e.getMessage());
         }
+
         Map<String, Object> resultMap = Maps.newHashMap();
         Env env = Env.getCurrentEnv();
         SystemInfoService infoService = Env.getCurrentSystemInfo();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/TokenManager.java 
b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/TokenManager.java
index cc50b5b902..a3ec62a7a1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/TokenManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/TokenManager.java
@@ -117,7 +117,10 @@ public class TokenManager {
     }
 
 
-    private TNetworkAddress getMasterAddress() {
+    private TNetworkAddress getMasterAddress() throws TException {
+        if (!Env.getCurrentEnv().isReady()) {
+            throw new TException("Node catalog is not ready, please wait for a 
while.");
+        }
         String masterHost = Env.getCurrentEnv().getMasterIp();
         int masterRpcPort = Env.getCurrentEnv().getMasterRpcPort();
         return new TNetworkAddress(masterHost, masterRpcPort);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to