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

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


The following commit(s) were added to refs/heads/master by this push:
     new b3cb1e2  [bug] Fix the bug that http redirects to master cannot be 
authenticated, and redirect several http interfaces to master. (#6557)
b3cb1e2 is described below

commit b3cb1e271dab8109784c0d92b187776efb71f8af
Author: luozenglin <[email protected]>
AuthorDate: Mon Sep 6 11:00:39 2021 +0800

    [bug] Fix the bug that http redirects to master cannot be authenticated, 
and redirect several http interfaces to master. (#6557)
    
    Redirect the following http requests to master:
        /rest/v2/api/cluster_overview
        /rest/v2/manager/node/frontends
        /rest/v2/manager/node/backends
        /rest/v2/manager/node/brokers
---
 .../apache/doris/httpv2/rest/RestBaseController.java  | 11 +++++++----
 .../apache/doris/httpv2/rest/manager/NodeAction.java  | 19 ++++++++++++-------
 .../apache/doris/httpv2/restv2/StatisticAction.java   |  6 +++++-
 3 files changed, 24 insertions(+), 12 deletions(-)

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 f634c1f..db24c6b 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
@@ -66,14 +66,18 @@ public class RestBaseController extends BaseController {
         return authInfo;
     }
 
-
     public RedirectView redirectTo(HttpServletRequest request, TNetworkAddress 
addr) {
         URI urlObj = null;
         URI resultUriObj = null;
         String urlStr = request.getRequestURI();
+        String userInfo = null;
+        if (!Strings.isNullOrEmpty(request.getHeader("Authorization"))) {
+            ActionAuthorizationInfo authInfo = getAuthorizationInfo(request);
+            userInfo = authInfo.fullUserName + ":" + authInfo.password;
+        }
         try {
             urlObj = new URI(urlStr);
-            resultUriObj = new URI("http", null, addr.getHostname(),
+            resultUriObj = new URI("http", userInfo, addr.getHostname(),
                     addr.getPort(), urlObj.getPath(), "", null);
         } catch (Exception e) {
             throw new RuntimeException(e);
@@ -94,8 +98,7 @@ public class RestBaseController extends BaseController {
         if (catalog.isMaster()) {
             return null;
         }
-        RedirectView redirectView = redirectTo(request, new 
TNetworkAddress(catalog.getMasterIp(), catalog.getMasterHttpPort()));
-        return redirectView;
+        return redirectTo(request, new TNetworkAddress(catalog.getMasterIp(), 
catalog.getMasterHttpPort()));
     }
 
     public void getFile(HttpServletRequest request, HttpServletResponse 
response, Object obj, String fileName)
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 123cd8d..fa05289 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
@@ -109,7 +109,7 @@ public class NodeAction extends RestBaseController {
         executeCheckPassword(request, response);
         checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
 
-        return fetchNodeInfo("/frontends");
+        return fetchNodeInfo(request, response, "/frontends");
     }
 
     // Returns all be information, similar to 'show backends'.
@@ -118,7 +118,7 @@ public class NodeAction extends RestBaseController {
         executeCheckPassword(request, response);
         checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
 
-        return fetchNodeInfo("/backends");
+        return fetchNodeInfo(request, response, "/backends");
     }
 
     // Returns all broker information, similar to 'show broker'.
@@ -127,7 +127,7 @@ public class NodeAction extends RestBaseController {
         executeCheckPassword(request, response);
         checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
 
-        return fetchNodeInfo("/brokers");
+        return fetchNodeInfo(request, response, "/brokers");
     }
 
     // {
@@ -140,7 +140,12 @@ public class NodeAction extends RestBaseController {
     //             ]
     //     ]
     // }
-    private Object fetchNodeInfo(String procPath) throws AnalysisException {
+    private Object fetchNodeInfo(HttpServletRequest request, 
HttpServletResponse response, String procPath)
+            throws AnalysisException {
+        if (!Catalog.getCurrentCatalog().isMaster()) {
+            return redirectToMaster(request, response);
+        }
+
         try {
             ProcResult procResult = 
ProcService.getInstance().open(procPath).fetchResult();
             List<String> columnNames = 
Lists.newArrayList(procResult.getColumnNames());
@@ -202,7 +207,7 @@ public class NodeAction extends RestBaseController {
         return ResponseEntityBuilder.ok(result);
     }
 
-    // Return all living fe and be nodes.
+    // Return all fe and be nodes.
     // {
     //         "frontend": [
     //                 "host:httpPort"
@@ -224,13 +229,13 @@ public class NodeAction extends RestBaseController {
 
     private static List<String> getFeList() {
         return Catalog.getCurrentCatalog().getFrontends(null)
-                .stream().filter(Frontend::isAlive)
+                .stream()
                 .map(fe -> fe.getHost() + ":" + Config.http_port)
                 .collect(Collectors.toList());
     }
 
     private static List<String> getBeList() {
-        return Catalog.getCurrentSystemInfo().getBackendIds(true)
+        return Catalog.getCurrentSystemInfo().getBackendIds(false)
                 .stream().map(beId -> {
                     Backend be = 
Catalog.getCurrentSystemInfo().getBackend(beId);
                     return be.getHost() + ":" + be.getHttpPort();
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 84436f6..13a2f08 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
@@ -33,6 +33,7 @@ import com.google.common.collect.Maps;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -45,6 +46,9 @@ public class StatisticAction extends RestBaseController {
 
     @RequestMapping(path = "/api/cluster_overview", method = RequestMethod.GET)
     public Object clusterOverview(HttpServletRequest request, 
HttpServletResponse response) {
+        if (!Catalog.getCurrentCatalog().isMaster()) {
+            return redirectToMaster(request, response);
+        }
         Map<String, Object> resultMap = Maps.newHashMap();
         Catalog catalog = Catalog.getCurrentCatalog();
         SystemInfoService infoService = Catalog.getCurrentSystemInfo();
@@ -56,7 +60,7 @@ public class StatisticAction extends RestBaseController {
         resultMap.put("feCount", catalog.getFrontends(null).size());
         resultMap.put("remainDisk", getRemainDisk(infoService));
 
-        return  ResponseEntityBuilder.ok(resultMap);
+        return ResponseEntityBuilder.ok(resultMap);
     }
 
     private int getTblCount(Catalog catalog) {

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to