[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
This commit is contained in:
@ -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)
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user