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 f634c1f2ed..db24c6b427 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 123cd8d032..fa05289ce2 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 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 getFeList() { return Catalog.getCurrentCatalog().getFrontends(null) - .stream().filter(Frontend::isAlive) + .stream() .map(fe -> fe.getHost() + ":" + Config.http_port) .collect(Collectors.toList()); } private static List 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 84436f6519..13a2f08bd4 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 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) {