This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 8e84bb60718769e3114c77b176d52e8db35f0f22 Author: Jack Drogon <jack.xsuper...@gmail.com> AuthorDate: Sat Sep 2 14:05:31 2023 +0800 [Fix](thrift) Add fe master check in some thrift calls (#23757) Signed-off-by: Jack Drogon <jack.xsuper...@gmail.com> --- .../apache/doris/service/FrontendServiceImpl.java | 45 ++++++++++++++++++++++ gensrc/thrift/Status.thrift | 2 + 2 files changed, 47 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java index 4043114051..7c200f8024 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java +++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java @@ -208,6 +208,9 @@ import java.util.stream.Collectors; // thrift protocol public class FrontendServiceImpl implements FrontendService.Iface { private static final Logger LOG = LogManager.getLogger(FrontendServiceImpl.class); + + private static final String NOT_MASTER_ERR_MSG = "FE is not master"; + private MasterImpl masterImpl; private ExecuteEnv exeEnv; // key is txn id,value is index of plan fragment instance, it's used by multi table request plan @@ -1066,6 +1069,14 @@ public class FrontendServiceImpl implements FrontendService.Iface { TBeginTxnResult result = new TBeginTxnResult(); TStatus status = new TStatus(TStatusCode.OK); result.setStatus(status); + + if (!Env.getCurrentEnv().isMaster()) { + status.setStatusCode(TStatusCode.NOT_MASTER); + status.addToErrorMsgs(NOT_MASTER_ERR_MSG); + LOG.error("failed to get binlog: {}", NOT_MASTER_ERR_MSG); + return result; + } + try { TBeginTxnResult tmpRes = beginTxnImpl(request, clientAddr); result.setTxnId(tmpRes.getTxnId()).setDbId(tmpRes.getDbId()); @@ -1413,6 +1424,14 @@ public class FrontendServiceImpl implements FrontendService.Iface { TCommitTxnResult result = new TCommitTxnResult(); TStatus status = new TStatus(TStatusCode.OK); result.setStatus(status); + + if (!Env.getCurrentEnv().isMaster()) { + status.setStatusCode(TStatusCode.NOT_MASTER); + status.addToErrorMsgs(NOT_MASTER_ERR_MSG); + LOG.error("failed to get binlog: {}", NOT_MASTER_ERR_MSG); + return result; + } + try { if (!commitTxnImpl(request)) { // committed success but not visible @@ -1586,6 +1605,14 @@ public class FrontendServiceImpl implements FrontendService.Iface { TRollbackTxnResult result = new TRollbackTxnResult(); TStatus status = new TStatus(TStatusCode.OK); result.setStatus(status); + + if (!Env.getCurrentEnv().isMaster()) { + status.setStatusCode(TStatusCode.NOT_MASTER); + status.addToErrorMsgs(NOT_MASTER_ERR_MSG); + LOG.error("failed to get binlog: {}", NOT_MASTER_ERR_MSG); + return result; + } + try { rollbackTxnImpl(request); } catch (UserException e) { @@ -2462,6 +2489,14 @@ public class FrontendServiceImpl implements FrontendService.Iface { TGetSnapshotResult result = new TGetSnapshotResult(); TStatus status = new TStatus(TStatusCode.OK); result.setStatus(status); + + if (!Env.getCurrentEnv().isMaster()) { + status.setStatusCode(TStatusCode.NOT_MASTER); + status.addToErrorMsgs(NOT_MASTER_ERR_MSG); + LOG.error("failed to get binlog: {}", NOT_MASTER_ERR_MSG); + return result; + } + try { result = getSnapshotImpl(request, clientAddr); } catch (UserException e) { @@ -2540,6 +2575,14 @@ public class FrontendServiceImpl implements FrontendService.Iface { TRestoreSnapshotResult result = new TRestoreSnapshotResult(); TStatus status = new TStatus(TStatusCode.OK); result.setStatus(status); + + if (!Env.getCurrentEnv().isMaster()) { + status.setStatusCode(TStatusCode.NOT_MASTER); + status.addToErrorMsgs(NOT_MASTER_ERR_MSG); + LOG.error("failed to get binlog: {}", NOT_MASTER_ERR_MSG); + return result; + } + try { result = restoreSnapshotImpl(request, clientAddr); } catch (UserException e) { @@ -2640,6 +2683,7 @@ public class FrontendServiceImpl implements FrontendService.Iface { TGetMasterTokenResult result = new TGetMasterTokenResult(); TStatus status = new TStatus(TStatusCode.OK); result.setStatus(status); + try { checkPassword(request.getCluster(), request.getUser(), request.getPassword(), clientAddr); result.setToken(Env.getCurrentEnv().getToken()); @@ -2664,6 +2708,7 @@ public class FrontendServiceImpl implements FrontendService.Iface { TGetBinlogLagResult result = new TGetBinlogLagResult(); TStatus status = new TStatus(TStatusCode.OK); result.setStatus(status); + try { result = getBinlogLagImpl(request, clientAddr); } catch (UserException e) { diff --git a/gensrc/thrift/Status.thrift b/gensrc/thrift/Status.thrift index 16dfd6d662..7b12d3b060 100644 --- a/gensrc/thrift/Status.thrift +++ b/gensrc/thrift/Status.thrift @@ -99,6 +99,8 @@ enum TStatusCode { HTTP_ERROR = 71, TABLET_MISSING = 72, + + NOT_MASTER = 73, } struct TStatus { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org