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 <[email protected]>
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 <[email protected]>
---
.../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: [email protected]
For additional commands, e-mail: [email protected]