From 68660ec96b20f431b5df7a34f691a9564493a245 Mon Sep 17 00:00:00 2001 From: Wenjun Ruan Date: Wed, 29 Mar 2023 17:54:57 +0800 Subject: [PATCH] Refactor remote command (#13809) * Refactor remote command * Rename Command to Message --- .../alert/AlertRequestProcessor.java | 35 ++- .../alert/AlertSenderService.java | 20 +- .../dolphinscheduler/alert/AlertServer.java | 32 +-- .../alert/AlertServerTest.java | 92 ------- .../processor/AlertRequestProcessorTest.java | 60 ----- .../alert/runner/AlertSenderServiceTest.java | 32 +-- .../api/aspect/CacheEvictAspect.java | 4 +- .../pause/pause/PauseExecuteFunction.java | 6 +- .../instance/stop/StopExecuteFunction.java | 6 +- .../api/rpc/ApiRpcClient.java | 6 +- .../api/service/impl/ExecutorServiceImpl.java | 59 ++-- .../impl/MetricsCleanUpServiceImpl.java | 8 +- .../service/impl/TaskInstanceServiceImpl.java | 8 +- .../service/ExecuteFunctionServiceTest.java | 5 + .../consumer/TaskPriorityQueueConsumer.java | 10 +- .../master/dispatch/ExecutorDispatcher.java | 2 +- .../dispatch/context/ExecutionContext.java | 12 +- .../executor/NettyExecutorManager.java | 37 ++- .../master/event/TaskDelayEventHandler.java | 20 +- .../event/TaskRejectByWorkerEventHandler.java | 6 +- .../master/event/TaskResultEventHandler.java | 4 +- .../master/event/TaskRunningEventHandler.java | 17 +- .../master/event/TaskStateEventHandler.java | 7 +- .../event/TaskUpdatePidEventHandler.java | 2 +- .../master/processor/CacheProcessor.java | 31 +-- .../master/processor/StateEventProcessor.java | 45 ++-- ...r.java => TaskExecuteResultProcessor.java} | 25 +- .../TaskExecuteRunningProcessor.java | 22 +- .../processor/TaskExecuteStartProcessor.java | 34 +-- .../processor/TaskForceStartProcessor.java | 66 +++++ .../processor/TaskKillResponseProcessor.java | 22 +- .../master/processor/TaskRecallProcessor.java | 20 +- .../processor/TaskUpdatePidProcessor.java | 28 +- ...rocessor.java => TaskWakeupProcessor.java} | 24 +- ...WorkflowExecutingDataRequestProcessor.java | 27 +- .../WorkflowMetricsCleanUpProcessor.java | 23 +- .../queue/StateEventResponseService.java | 4 +- .../master/processor/queue/TaskEvent.java | 16 +- .../server/master/rpc/MasterRPCServer.java | 76 +----- .../server/master/rpc/MasterRpcClient.java | 8 +- .../runner/StreamTaskExecuteRunnable.java | 33 ++- .../runner/WorkflowExecuteRunnable.java | 14 +- .../runner/WorkflowExecuteThreadPool.java | 6 +- .../runner/task/CommonTaskProcessor.java | 4 +- .../master/runner/task/SubTaskProcessor.java | 6 +- ...ommandTest.java => MasterMessageTest.java} | 4 +- .../dispatch/ExecutionContextTestUtils.java | 10 +- .../dispatch/ExecutorDispatcherTest.java | 4 +- .../executor/NettyExecutorManagerTest.java | 12 +- .../master/processor/CacheProcessorTest.java | 10 +- .../processor/TaskAckProcessorTest.java | 6 +- .../TaskKillResponseProcessorTest.java | 26 +- .../queue/TaskResponseServiceTest.java | 8 +- .../remote/NettyRemotingClient.java | 41 ++- .../remote/NettyRemotingServer.java | 15 +- .../remote/codec/NettyDecoder.java | 40 +-- .../remote/codec/NettyEncoder.java | 12 +- .../{BaseCommand.java => BaseMessage.java} | 4 +- .../remote/command/CacheExpireCommand.java | 67 ----- .../command/{Command.java => Message.java} | 20 +- ...ommandContext.java => MessageContext.java} | 6 +- ...{CommandHeader.java => MessageHeader.java} | 2 +- .../{CommandType.java => MessageType.java} | 18 +- ...ommand.java => RequestMessageBuilder.java} | 27 +- .../command/ResponseMessageBuilder.java | 35 +++ ...nseResult.java => StateEventResponse.java} | 18 +- .../command/StateEventResponseCommand.java | 49 ---- .../TaskStateEventResponseCommand.java | 42 --- ...uestCommand.java => AlertSendRequest.java} | 23 +- ...nseCommand.java => AlertSendResponse.java} | 33 +-- .../command/cache/CacheExpireRequest.java | 41 +++ ...questCommand.java => GetAppIdRequest.java} | 18 +- ...onseCommand.java => GetAppIdResponse.java} | 17 +- .../command/log/GetLogBytesRequest.java | 44 +++ .../log/GetLogBytesRequestCommand.java | 55 ---- .../command/log/GetLogBytesResponse.java | 45 ++++ .../log/GetLogBytesResponseCommand.java | 57 ---- ...Command.java => RemoveTaskLogRequest.java} | 23 +- ...ommand.java => RemoveTaskLogResponse.java} | 25 +- ...stCommand.java => RollViewLogRequest.java} | 23 +- ...eCommand.java => RollViewLogResponse.java} | 24 +- ...equestCommand.java => ViewLogRequest.java} | 23 +- .../command/log/ViewLogResponseCommand.java | 56 ---- .../command/log/ViewLogResponseResponse.java | 44 +++ .../TaskDispatchMessage.java} | 18 +- .../TaskExecuteResultMessage.java} | 23 +- .../TaskExecuteResultMessageAck.java} | 31 +-- .../TaskExecuteRunningMessage.java} | 23 +- .../task/TaskExecuteRunningMessageAck.java | 56 ++++ .../TaskExecuteStartMessage.java} | 23 +- .../TaskForceStartRequest.java} | 39 +-- .../TaskKillRequest.java} | 23 +- .../TaskKillResponse.java} | 23 +- .../TaskRejectMessage.java} | 23 +- .../TaskRejectMessageAck.java} | 23 +- .../TaskSavePointRequest.java} | 23 +- .../TaskSavePointResponse.java} | 23 +- .../{ => task}/TaskUpdatePidAckMessage.java | 23 +- .../TaskUpdatePidMessage.java} | 23 +- .../TaskWakeupRequest.java} | 44 ++- .../task/WorkflowHostChangeRequest.java | 23 +- .../task/WorkflowHostChangeResponse.java | 18 +- .../WorkflowExecutingDataRequest.java} | 23 +- .../WorkflowExecutingDataResponse.java} | 23 +- .../WorkflowMetricsCleanUpRequest.java | 34 +++ .../WorkflowStateEventChangeRequest.java} | 26 +- .../remote/future/ResponseFuture.java | 24 +- .../remote/handler/NettyClientHandler.java | 48 ++-- .../remote/handler/NettyServerHandler.java | 30 +-- .../remote/processor/BaseLogProcessor.java | 137 ++++++++++ .../remote/processor/GetAppIdProcessor.java | 59 ++++ .../processor/GetLogBytesProcessor.java | 50 ++++ .../processor/LoggerRequestProcessor.java | 251 ------------------ .../remote/processor/NettyRemoteChannel.java | 6 +- .../processor/NettyRequestProcessor.java | 9 +- .../processor/RemoveTaskLogProcessor.java | 62 +++++ .../remote/processor/RollViewLogRequest.java | 76 ++++++ .../processor/StateEventCallbackService.java | 20 +- .../processor/ViewWholeLogProcessor.java | 50 ++++ .../remote/utils/JsonSerializer.java | 26 +- .../remote/NettyRemotingClientTest.java | 66 +++-- ...andTest.java => AlertSendRequestTest.java} | 16 +- ...ndTest.java => AlertSendResponseTest.java} | 23 +- ...dTest.java => CacheExpireRequestTest.java} | 13 +- ...dTest.java => GetLogBytesRequestTest.java} | 12 +- ...Test.java => GetLogBytesResponseTest.java} | 10 +- ...est.java => RemoveTaskLogRequestTest.java} | 12 +- ...st.java => RemoveTaskLogResponseTest.java} | 12 +- .../log/RollViewLogRequestCommandTest.java | 36 --- .../command/log/RollViewLogRequestTest.java | 36 +++ .../service/alert/AlertClientService.java | 29 +- .../service/cache/CacheNotifyService.java | 4 +- .../cache/impl/CacheNotifyServiceImpl.java | 10 +- .../service/log/LogClient.java | 72 ++--- .../service/process/ProcessService.java | 3 - .../service/process/ProcessServiceImpl.java | 19 +- .../service/alert/AlertClientServiceTest.java | 85 +++--- .../service/cache/CacheNotifyServiceTest.java | 26 +- ...lTest.java => MessageServiceImplTest.java} | 2 +- .../log/LoggerRequestProcessorTest.java | 58 ++-- .../worker/message/MessageRetryRunner.java | 30 +-- .../server/worker/message/MessageSender.java | 8 +- .../TaskExecuteResultMessageSender.java | 18 +- .../TaskExecuteRunningMessageSender.java | 18 +- .../message/TaskRejectMessageSender.java | 16 +- .../message/TaskUpdatePidMessageSender.java | 28 +- .../processor/TaskDispatchProcessor.java | 34 +-- .../TaskExecuteResultAckProcessor.java | 31 ++- .../TaskExecuteRunningAckProcessor.java | 23 +- .../worker/processor/TaskKillProcessor.java | 51 ++-- .../processor/TaskRejectAckProcessor.java | 36 +-- .../processor/TaskSavePointProcessor.java | 43 +-- .../processor/TaskUpdatePidAckProcessor.java | 20 +- .../WorkflowHostChangeProcessor.java | 19 +- .../worker/rpc/WorkerMessageSender.java | 24 +- .../server/worker/rpc/WorkerRpcClient.java | 37 +-- .../server/worker/rpc/WorkerRpcServer.java | 63 +---- .../worker/runner/TaskCallbackImpl.java | 6 +- .../runner/WorkerTaskExecuteRunnable.java | 14 +- .../processor/TaskDispatchProcessorTest.java | 16 +- 160 files changed, 2169 insertions(+), 2397 deletions(-) delete mode 100644 dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/AlertServerTest.java delete mode 100644 dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/processor/AlertRequestProcessorTest.java rename dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/{TaskExecuteResponseProcessor.java => TaskExecuteResultProcessor.java} (75%) create mode 100644 dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskForceStartProcessor.java rename dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/{TaskEventProcessor.java => TaskWakeupProcessor.java} (75%) rename dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/{MasterCommandTest.java => MasterMessageTest.java} (98%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{BaseCommand.java => BaseMessage.java} (93%) delete mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CacheExpireCommand.java rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{Command.java => Message.java} (86%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{CommandContext.java => MessageContext.java} (89%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{CommandHeader.java => MessageHeader.java} (95%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{CommandType.java => MessageType.java} (90%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{WorkflowMetricsCleanUpCommand.java => RequestMessageBuilder.java} (62%) create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/ResponseMessageBuilder.java rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{alert/AlertSendResponseResult.java => StateEventResponse.java} (73%) delete mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/StateEventResponseCommand.java delete mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskStateEventResponseCommand.java rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/{AlertSendRequestCommand.java => AlertSendRequest.java} (64%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/{AlertSendResponseCommand.java => AlertSendResponse.java} (65%) create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/cache/CacheExpireRequest.java rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/{GetAppIdRequestCommand.java => GetAppIdRequest.java} (67%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/{GetAppIdResponseCommand.java => GetAppIdResponse.java} (66%) create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequest.java delete mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestCommand.java create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponse.java delete mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponseCommand.java rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/{RemoveTaskLogRequestCommand.java => RemoveTaskLogRequest.java} (64%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/{RemoveTaskLogResponseCommand.java => RemoveTaskLogResponse.java} (62%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/{RollViewLogRequestCommand.java => RollViewLogRequest.java} (67%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/{RollViewLogResponseCommand.java => RollViewLogResponse.java} (62%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/{ViewLogRequestCommand.java => ViewLogRequest.java} (64%) delete mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogResponseCommand.java create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogResponseResponse.java rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskDispatchCommand.java => task/TaskDispatchMessage.java} (76%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskExecuteResultCommand.java => task/TaskExecuteResultMessage.java} (77%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskExecuteAckCommand.java => task/TaskExecuteResultMessageAck.java} (62%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskExecuteRunningCommand.java => task/TaskExecuteRunningMessage.java} (77%) create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteRunningMessageAck.java rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskExecuteStartCommand.java => task/TaskExecuteStartMessage.java} (74%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskEventChangeCommand.java => task/TaskForceStartRequest.java} (56%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskKillRequestCommand.java => task/TaskKillRequest.java} (66%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskKillResponseCommand.java => task/TaskKillResponse.java} (71%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskRejectCommand.java => task/TaskRejectMessage.java} (72%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskRejectAckCommand.java => task/TaskRejectMessageAck.java} (73%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskSavePointRequestCommand.java => task/TaskSavePointRequest.java} (66%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskSavePointResponseCommand.java => task/TaskSavePointResponse.java} (66%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{ => task}/TaskUpdatePidAckMessage.java (67%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskUpdatePidCommand.java => task/TaskUpdatePidMessage.java} (74%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{TaskExecuteRunningAckMessage.java => task/TaskWakeupRequest.java} (56%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{WorkflowExecutingDataRequestCommand.java => workflow/WorkflowExecutingDataRequest.java} (65%) rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{WorkflowExecutingDataResponseCommand.java => workflow/WorkflowExecutingDataResponse.java} (66%) create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowMetricsCleanUpRequest.java rename dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/{WorkflowStateEventChangeCommand.java => workflow/WorkflowStateEventChangeRequest.java} (77%) create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/BaseLogProcessor.java create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/GetAppIdProcessor.java create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/GetLogBytesProcessor.java delete mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/LoggerRequestProcessor.java create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/RemoveTaskLogProcessor.java create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/RollViewLogRequest.java create mode 100644 dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/ViewWholeLogProcessor.java rename dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/{AlertSendRequestCommandTest.java => AlertSendRequestTest.java} (70%) rename dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/{AlertSendResponseCommandTest.java => AlertSendResponseTest.java} (59%) rename dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/cache/{CacheExpireCommandTest.java => CacheExpireRequestTest.java} (69%) rename dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/{GetLogBytesRequestCommandTest.java => GetLogBytesRequestTest.java} (69%) rename dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/{GetLogBytesResponseCommandTest.java => GetLogBytesResponseTest.java} (75%) rename dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/{RemoveTaskLogRequestCommandTest.java => RemoveTaskLogRequestTest.java} (72%) rename dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/{RemoveTaskLogResponseCommandTest.java => RemoveTaskLogResponseTest.java} (72%) delete mode 100644 dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestCommandTest.java create mode 100644 dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestTest.java rename dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/command/{CommandServiceImplTest.java => MessageServiceImplTest.java} (99%) diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertRequestProcessor.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertRequestProcessor.java index a034e9586a..9a9caa9f82 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertRequestProcessor.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertRequestProcessor.java @@ -17,12 +17,10 @@ package org.apache.dolphinscheduler.alert; -import static com.google.common.base.Preconditions.checkArgument; - -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendRequestCommand; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponseCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.alert.AlertSendRequest; +import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponse; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.remote.utils.JsonSerializer; @@ -43,20 +41,21 @@ public final class AlertRequestProcessor implements NettyRequestProcessor { } @Override - public void process(Channel channel, Command command) { - checkArgument(CommandType.ALERT_SEND_REQUEST == command.getType(), "invalid command type: %s", - command.getType()); + public void process(Channel channel, Message message) { + AlertSendRequest alertSendRequest = JsonSerializer.deserialize(message.getBody(), AlertSendRequest.class); - AlertSendRequestCommand alertSendRequestCommand = JsonSerializer.deserialize( - command.getBody(), AlertSendRequestCommand.class); + log.info("Received command : {}", alertSendRequest); - log.info("Received command : {}", alertSendRequestCommand); + AlertSendResponse alertSendResponse = alertSenderService.syncHandler( + alertSendRequest.getGroupId(), + alertSendRequest.getTitle(), + alertSendRequest.getContent(), + alertSendRequest.getWarnType()); + channel.writeAndFlush(alertSendResponse.convert2Command(message.getOpaque())); + } - AlertSendResponseCommand alertSendResponseCommand = alertSenderService.syncHandler( - alertSendRequestCommand.getGroupId(), - alertSendRequestCommand.getTitle(), - alertSendRequestCommand.getContent(), - alertSendRequestCommand.getWarnType()); - channel.writeAndFlush(alertSendResponseCommand.convert2Command(command.getOpaque())); + @Override + public MessageType getCommandType() { + return MessageType.ALERT_SEND_REQUEST; } } diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertSenderService.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertSenderService.java index 8309ae9ae3..20ce32f7ff 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertSenderService.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertSenderService.java @@ -33,8 +33,7 @@ import org.apache.dolphinscheduler.dao.AlertDao; import org.apache.dolphinscheduler.dao.entity.Alert; import org.apache.dolphinscheduler.dao.entity.AlertPluginInstance; import org.apache.dolphinscheduler.dao.entity.AlertSendStatus; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponseCommand; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponseResult; +import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponse; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -166,7 +165,7 @@ public final class AlertSenderService extends Thread { * @param content content * @return AlertSendResponseCommand */ - public AlertSendResponseCommand syncHandler(int alertGroupId, String title, String content, int warnType) { + public AlertSendResponse syncHandler(int alertGroupId, String title, String content, int warnType) { List alertInstanceList = alertDao.listInstanceByAlertGroupId(alertGroupId); AlertData alertData = AlertData.builder() .content(content) @@ -175,29 +174,32 @@ public final class AlertSenderService extends Thread { .build(); boolean sendResponseStatus = true; - List sendResponseResults = new ArrayList<>(); + List sendResponseResults = new ArrayList<>(); if (CollectionUtils.isEmpty(alertInstanceList)) { - AlertSendResponseResult alertSendResponseResult = new AlertSendResponseResult(); + AlertSendResponse.AlertSendResponseResult alertSendResponseResult = + new AlertSendResponse.AlertSendResponseResult(); String message = String.format("Alert GroupId %s send error : not found alert instance", alertGroupId); alertSendResponseResult.setSuccess(false); alertSendResponseResult.setMessage(message); sendResponseResults.add(alertSendResponseResult); log.error("Alert GroupId {} send error : not found alert instance", alertGroupId); - return new AlertSendResponseCommand(false, sendResponseResults); + return new AlertSendResponse(false, sendResponseResults); } for (AlertPluginInstance instance : alertInstanceList) { AlertResult alertResult = this.alertResultHandler(instance, alertData); if (alertResult != null) { - AlertSendResponseResult alertSendResponseResult = new AlertSendResponseResult( - Boolean.parseBoolean(String.valueOf(alertResult.getStatus())), alertResult.getMessage()); + AlertSendResponse.AlertSendResponseResult alertSendResponseResult = + new AlertSendResponse.AlertSendResponseResult( + Boolean.parseBoolean(String.valueOf(alertResult.getStatus())), + alertResult.getMessage()); sendResponseStatus = sendResponseStatus && alertSendResponseResult.isSuccess(); sendResponseResults.add(alertSendResponseResult); } } - return new AlertSendResponseCommand(sendResponseStatus, sendResponseResults); + return new AlertSendResponse(sendResponseStatus, sendResponseResults); } /** diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java index 5c6f57508b..dd1e53bc17 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java @@ -22,15 +22,17 @@ import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager; import org.apache.dolphinscheduler.common.thread.ThreadUtils; import org.apache.dolphinscheduler.dao.PluginDao; import org.apache.dolphinscheduler.remote.NettyRemotingServer; -import org.apache.dolphinscheduler.remote.command.CommandType; import org.apache.dolphinscheduler.remote.factory.NettyRemotingServerFactory; +import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import java.io.Closeable; +import java.util.List; import javax.annotation.PreDestroy; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.event.ApplicationReadyEvent; @@ -42,21 +44,16 @@ import org.springframework.context.event.EventListener; @Slf4j public class AlertServer implements Closeable { - private final PluginDao pluginDao; - private final AlertSenderService alertSenderService; - private final AlertRequestProcessor alertRequestProcessor; - private final AlertConfig alertConfig; - private NettyRemotingServer nettyRemotingServer; + @Autowired + private PluginDao pluginDao; - public AlertServer(PluginDao pluginDao, - AlertSenderService alertSenderService, - AlertRequestProcessor alertRequestProcessor, - AlertConfig alertConfig) { - this.pluginDao = pluginDao; - this.alertSenderService = alertSenderService; - this.alertRequestProcessor = alertRequestProcessor; - this.alertConfig = alertConfig; - } + @Autowired + private AlertSenderService alertSenderService; + @Autowired + private List nettyRequestProcessors; + @Autowired + private AlertConfig alertConfig; + private NettyRemotingServer nettyRemotingServer; public static void main(String[] args) { Thread.currentThread().setName(Constants.THREAD_NAME_ALERT_SERVER); @@ -116,7 +113,10 @@ public class AlertServer implements Closeable { protected void startServer() { nettyRemotingServer = NettyRemotingServerFactory.buildNettyRemotingServer(alertConfig.getPort()); - nettyRemotingServer.registerProcessor(CommandType.ALERT_SEND_REQUEST, alertRequestProcessor); + for (NettyRequestProcessor nettyRequestProcessor : nettyRequestProcessors) { + nettyRemotingServer.registerProcessor(nettyRequestProcessor); + log.info("Success register netty processor: {}", nettyRequestProcessor.getClass().getName()); + } nettyRemotingServer.start(); } } diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/AlertServerTest.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/AlertServerTest.java deleted file mode 100644 index 171c8ccbc4..0000000000 --- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/AlertServerTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.alert; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.mockStatic; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -import org.apache.dolphinscheduler.dao.PluginDao; -import org.apache.dolphinscheduler.remote.NettyRemotingServer; -import org.apache.dolphinscheduler.remote.factory.NettyRemotingServerFactory; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.Spy; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -public class AlertServerTest { - - @Mock - private PluginDao pluginDao; - - @Mock - private AlertConfig alertConfig; - - @Mock - private AlertSenderService alertSenderService; - - @Mock - private NettyRemotingServer nettyRemotingServer; - - @InjectMocks - @Spy - private AlertServer alertServer; - - @BeforeEach - void init() { - Mockito.lenient().when(pluginDao.checkPluginDefineTableExist()).thenReturn(true); - - Mockito.lenient().when(alertConfig.getPort()).thenReturn(50052); - } - - @Test - public void alertServerRunSuccessfully() { - doNothing().when(alertServer).checkTable(); - doNothing().when(alertServer).startServer(); - - alertServer.run(null); - - Mockito.verify(alertServer, times(1)).checkTable(); - Mockito.verify(alertServer, times(1)).startServer(); - Mockito.verify(alertSenderService, times(1)).start(); - } - - @Test - public void alertServerServerStartWithExpectedListeningPort() { - try ( - MockedStatic mockedNettyRemotingServerFactory = - mockStatic(NettyRemotingServerFactory.class)) { - mockedNettyRemotingServerFactory.when(() -> NettyRemotingServerFactory.buildNettyRemotingServer(anyInt())) - .thenReturn(nettyRemotingServer); - alertServer.startServer(); - mockedNettyRemotingServerFactory.verify(() -> NettyRemotingServerFactory.buildNettyRemotingServer(50052)); - verify(nettyRemotingServer, times(1)).registerProcessor(any(), any()); - verify(nettyRemotingServer, times(1)).start(); - } - } -} diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/processor/AlertRequestProcessorTest.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/processor/AlertRequestProcessorTest.java deleted file mode 100644 index 5ad6e26cdf..0000000000 --- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/processor/AlertRequestProcessorTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.alert.processor; - -import static org.mockito.Mockito.mock; - -import org.apache.dolphinscheduler.alert.AlertRequestProcessor; -import org.apache.dolphinscheduler.alert.AlertSenderService; -import org.apache.dolphinscheduler.common.enums.WarningType; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendRequestCommand; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponseCommand; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.jupiter.MockitoExtension; - -import io.netty.channel.Channel; - -@ExtendWith(MockitoExtension.class) -public class AlertRequestProcessorTest { - - @InjectMocks - private AlertRequestProcessor alertRequestProcessor; - - @Mock - private AlertSenderService alertSenderService; - - @Test - public void testProcess() { - Mockito.when(alertSenderService.syncHandler(1, "title", "content", WarningType.FAILURE.getCode())) - .thenReturn(new AlertSendResponseCommand()); - Channel channel = mock(Channel.class); - AlertSendRequestCommand alertSendRequestCommand = - new AlertSendRequestCommand(1, "title", "content", WarningType.FAILURE.getCode()); - Command reqCommand = alertSendRequestCommand.convert2Command(); - Assertions.assertEquals(CommandType.ALERT_SEND_REQUEST, reqCommand.getType()); - alertRequestProcessor.process(channel, reqCommand); - } -} diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/runner/AlertSenderServiceTest.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/runner/AlertSenderServiceTest.java index 371ea71f16..eb4183c0e0 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/runner/AlertSenderServiceTest.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/runner/AlertSenderServiceTest.java @@ -31,7 +31,7 @@ import org.apache.dolphinscheduler.dao.PluginDao; import org.apache.dolphinscheduler.dao.entity.Alert; import org.apache.dolphinscheduler.dao.entity.AlertPluginInstance; import org.apache.dolphinscheduler.dao.entity.PluginDefine; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponseCommand; +import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponse; import java.util.ArrayList; import java.util.List; @@ -79,10 +79,10 @@ public class AlertSenderServiceTest { when(alertDao.listInstanceByAlertGroupId(alertGroupId)).thenReturn(null); when(alertConfig.getWaitTimeout()).thenReturn(0); - AlertSendResponseCommand alertSendResponseCommand = + AlertSendResponse alertSendResponse = alertSenderService.syncHandler(alertGroupId, title, content, WarningType.ALL.getCode()); - Assertions.assertFalse(alertSendResponseCommand.isSuccess()); - alertSendResponseCommand.getResResults().forEach(result -> logger + Assertions.assertFalse(alertSendResponse.isSuccess()); + alertSendResponse.getResResults().forEach(result -> logger .info("alert send response result, status:{}, message:{}", result.isSuccess(), result.getMessage())); // 2.alert plugin does not exist @@ -100,10 +100,10 @@ public class AlertSenderServiceTest { PluginDefine pluginDefine = new PluginDefine(pluginName, "1", null); when(pluginDao.getPluginDefineById(pluginDefineId)).thenReturn(pluginDefine); - alertSendResponseCommand = + alertSendResponse = alertSenderService.syncHandler(alertGroupId, title, content, WarningType.ALL.getCode()); - Assertions.assertFalse(alertSendResponseCommand.isSuccess()); - alertSendResponseCommand.getResResults().forEach(result -> logger + Assertions.assertFalse(alertSendResponse.isSuccess()); + alertSendResponse.getResResults().forEach(result -> logger .info("alert send response result, status:{}, message:{}", result.isSuccess(), result.getMessage())); // 3.alert result value is null @@ -112,10 +112,10 @@ public class AlertSenderServiceTest { when(alertPluginManager.getAlertChannel(1)).thenReturn(Optional.of(alertChannelMock)); when(alertConfig.getWaitTimeout()).thenReturn(0); - alertSendResponseCommand = + alertSendResponse = alertSenderService.syncHandler(alertGroupId, title, content, WarningType.ALL.getCode()); - Assertions.assertFalse(alertSendResponseCommand.isSuccess()); - alertSendResponseCommand.getResResults().forEach(result -> logger + Assertions.assertFalse(alertSendResponse.isSuccess()); + alertSendResponse.getResResults().forEach(result -> logger .info("alert send response result, status:{}, message:{}", result.isSuccess(), result.getMessage())); // 4.abnormal information inside the alert plug-in code @@ -125,10 +125,10 @@ public class AlertSenderServiceTest { when(alertChannelMock.process(Mockito.any())).thenReturn(alertResult); when(alertPluginManager.getAlertChannel(1)).thenReturn(Optional.of(alertChannelMock)); - alertSendResponseCommand = + alertSendResponse = alertSenderService.syncHandler(alertGroupId, title, content, WarningType.ALL.getCode()); - Assertions.assertFalse(alertSendResponseCommand.isSuccess()); - alertSendResponseCommand.getResResults().forEach(result -> logger + Assertions.assertFalse(alertSendResponse.isSuccess()); + alertSendResponse.getResResults().forEach(result -> logger .info("alert send response result, status:{}, message:{}", result.isSuccess(), result.getMessage())); // 5.alert plugin send success @@ -139,10 +139,10 @@ public class AlertSenderServiceTest { when(alertPluginManager.getAlertChannel(1)).thenReturn(Optional.of(alertChannelMock)); when(alertConfig.getWaitTimeout()).thenReturn(5000); - alertSendResponseCommand = + alertSendResponse = alertSenderService.syncHandler(alertGroupId, title, content, WarningType.ALL.getCode()); - Assertions.assertTrue(alertSendResponseCommand.isSuccess()); - alertSendResponseCommand.getResResults().forEach(result -> logger + Assertions.assertTrue(alertSendResponse.isSuccess()); + alertSendResponse.getResResults().forEach(result -> logger .info("alert send response result, status:{}, message:{}", result.isSuccess(), result.getMessage())); } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/aspect/CacheEvictAspect.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/aspect/CacheEvictAspect.java index 8f3a057b7f..3d7a4c0afe 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/aspect/CacheEvictAspect.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/aspect/CacheEvictAspect.java @@ -18,7 +18,7 @@ package org.apache.dolphinscheduler.api.aspect; import org.apache.dolphinscheduler.common.enums.CacheType; -import org.apache.dolphinscheduler.remote.command.CacheExpireCommand; +import org.apache.dolphinscheduler.remote.command.cache.CacheExpireRequest; import org.apache.dolphinscheduler.service.cache.CacheNotifyService; import org.apache.dolphinscheduler.service.cache.impl.CacheKeyGenerator; @@ -96,7 +96,7 @@ public class CacheEvictAspect { } } if (StringUtils.isNotEmpty(cacheKey)) { - cacheNotifyService.notifyMaster(new CacheExpireCommand(cacheType, cacheKey).convert2Command()); + cacheNotifyService.notifyMaster(new CacheExpireRequest(cacheType, cacheKey).convert2Command()); } } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/workflow/instance/pause/pause/PauseExecuteFunction.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/workflow/instance/pause/pause/PauseExecuteFunction.java index 83711660f8..0020e4df77 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/workflow/instance/pause/pause/PauseExecuteFunction.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/workflow/instance/pause/pause/PauseExecuteFunction.java @@ -25,7 +25,7 @@ import org.apache.dolphinscheduler.common.enums.CommandType; import org.apache.dolphinscheduler.common.enums.WorkflowExecutionStatus; import org.apache.dolphinscheduler.dao.entity.ProcessInstance; import org.apache.dolphinscheduler.dao.repository.ProcessInstanceDao; -import org.apache.dolphinscheduler.remote.command.WorkflowStateEventChangeCommand; +import org.apache.dolphinscheduler.remote.command.workflow.WorkflowStateEventChangeRequest; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import org.apache.dolphinscheduler.remote.utils.Host; @@ -59,10 +59,10 @@ public class PauseExecuteFunction implements ExecuteFunction masterServerList = monitorService.getServerListFromRegistry(true); Host host = new Host(masterServerList.get(0).getHost(), masterServerList.get(0).getPort()); - TaskExecuteStartCommand taskExecuteStartCommand = new TaskExecuteStartCommand(); - taskExecuteStartCommand.setExecutorId(loginUser.getId()); - taskExecuteStartCommand.setExecutorName(loginUser.getUserName()); - taskExecuteStartCommand.setProjectCode(projectCode); - taskExecuteStartCommand.setTaskDefinitionCode(taskDefinitionCode); - taskExecuteStartCommand.setTaskDefinitionVersion(taskDefinitionVersion); - taskExecuteStartCommand.setWorkerGroup(workerGroup); - taskExecuteStartCommand.setWarningGroupId(warningGroupId); - taskExecuteStartCommand.setEnvironmentCode(environmentCode); - taskExecuteStartCommand.setStartParams(startParams); - taskExecuteStartCommand.setDryRun(dryRun); - - org.apache.dolphinscheduler.remote.command.Command response = - stateEventCallbackService.sendSync(host, taskExecuteStartCommand.convert2Command()); + TaskExecuteStartMessage taskExecuteStartMessage = new TaskExecuteStartMessage(); + taskExecuteStartMessage.setExecutorId(loginUser.getId()); + taskExecuteStartMessage.setExecutorName(loginUser.getUserName()); + taskExecuteStartMessage.setProjectCode(projectCode); + taskExecuteStartMessage.setTaskDefinitionCode(taskDefinitionCode); + taskExecuteStartMessage.setTaskDefinitionVersion(taskDefinitionVersion); + taskExecuteStartMessage.setWorkerGroup(workerGroup); + taskExecuteStartMessage.setWarningGroupId(warningGroupId); + taskExecuteStartMessage.setEnvironmentCode(environmentCode); + taskExecuteStartMessage.setStartParams(startParams); + taskExecuteStartMessage.setDryRun(dryRun); + + Message response = + stateEventCallbackService.sendSync(host, taskExecuteStartMessage.convert2Command()); if (response != null) { log.info("Send task execute start command complete, response is {}.", response); putMsg(result, Status.SUCCESS); diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/MetricsCleanUpServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/MetricsCleanUpServiceImpl.java index abea381251..20ac139065 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/MetricsCleanUpServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/MetricsCleanUpServiceImpl.java @@ -22,7 +22,7 @@ import org.apache.dolphinscheduler.api.service.MetricsCleanUpService; import org.apache.dolphinscheduler.common.enums.NodeType; import org.apache.dolphinscheduler.common.model.Server; import org.apache.dolphinscheduler.registry.api.RegistryClient; -import org.apache.dolphinscheduler.remote.command.WorkflowMetricsCleanUpCommand; +import org.apache.dolphinscheduler.remote.command.workflow.WorkflowMetricsCleanUpRequest; import org.apache.dolphinscheduler.remote.utils.Host; import java.util.List; @@ -44,13 +44,13 @@ public class MetricsCleanUpServiceImpl implements MetricsCleanUpService { @Override public void cleanUpWorkflowMetricsByDefinitionCode(String workflowDefinitionCode) { - WorkflowMetricsCleanUpCommand workflowMetricsCleanUpCommand = new WorkflowMetricsCleanUpCommand(); - workflowMetricsCleanUpCommand.setProcessDefinitionCode(workflowDefinitionCode); + WorkflowMetricsCleanUpRequest workflowMetricsCleanUpRequest = new WorkflowMetricsCleanUpRequest(); + workflowMetricsCleanUpRequest.setProcessDefinitionCode(workflowDefinitionCode); List masterNodeList = registryClient.getServerList(NodeType.MASTER); for (Server server : masterNodeList) { try { final String host = String.format("%s:%s", server.getHost(), server.getPort()); - apiRpcClient.send(Host.of(host), workflowMetricsCleanUpCommand.convert2Command()); + apiRpcClient.send(Host.of(host), workflowMetricsCleanUpRequest.convert2Command()); } catch (Exception e) { log.error( "Fail to clean up workflow related metrics on {} when deleting workflow definition {}, error message {}", diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskInstanceServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskInstanceServiceImpl.java index 8ab4557635..f3d4f0e6e6 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskInstanceServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskInstanceServiceImpl.java @@ -44,8 +44,8 @@ import org.apache.dolphinscheduler.dao.repository.DqExecuteResultDao; import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao; import org.apache.dolphinscheduler.dao.utils.TaskCacheUtils; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; -import org.apache.dolphinscheduler.remote.command.TaskKillRequestCommand; -import org.apache.dolphinscheduler.remote.command.TaskSavePointRequestCommand; +import org.apache.dolphinscheduler.remote.command.task.TaskKillRequest; +import org.apache.dolphinscheduler.remote.command.task.TaskSavePointRequest; import org.apache.dolphinscheduler.remote.processor.StateEventCallbackService; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.service.log.LogClient; @@ -291,7 +291,7 @@ public class TaskInstanceServiceImpl extends BaseServiceImpl implements TaskInst return result; } - TaskSavePointRequestCommand command = new TaskSavePointRequestCommand(taskInstanceId); + TaskSavePointRequest command = new TaskSavePointRequest(taskInstanceId); Host host = new Host(taskInstance.getHost()); stateEventCallbackService.sendResult(host, command.convert2Command()); @@ -322,7 +322,7 @@ public class TaskInstanceServiceImpl extends BaseServiceImpl implements TaskInst return result; } - TaskKillRequestCommand command = new TaskKillRequestCommand(taskInstanceId); + TaskKillRequest command = new TaskKillRequest(taskInstanceId); Host host = new Host(taskInstance.getHost()); stateEventCallbackService.sendResult(host, command.convert2Command()); putMsg(result, Status.SUCCESS); diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ExecuteFunctionServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ExecuteFunctionServiceTest.java index 21630b0e1d..2a00a6aa65 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ExecuteFunctionServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ExecuteFunctionServiceTest.java @@ -65,6 +65,7 @@ import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionLogMapper; import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper; import org.apache.dolphinscheduler.dao.mapper.TaskGroupQueueMapper; import org.apache.dolphinscheduler.dao.repository.ProcessInstanceDao; +import org.apache.dolphinscheduler.remote.processor.StateEventCallbackService; import org.apache.dolphinscheduler.service.command.CommandService; import org.apache.dolphinscheduler.service.process.ProcessService; import org.apache.dolphinscheduler.service.process.TriggerRelationService; @@ -155,6 +156,9 @@ public class ExecuteFunctionServiceTest { @Mock private ProcessDefinitionService processDefinitionService; + @Mock + private StateEventCallbackService stateEventCallbackService; + private int processDefinitionId = 1; private int processDefinitionVersion = 1; @@ -207,6 +211,7 @@ public class ExecuteFunctionServiceTest { processInstance.setState(WorkflowExecutionStatus.FAILURE); processInstance.setExecutorId(userId); processInstance.setTenantId(tenantId); + processInstance.setHost("127.0.0.1:5678"); processInstance.setProcessDefinitionVersion(1); processInstance.setProcessDefinitionCode(1L); diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java index c28c01ee58..9a34ff1bb2 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java @@ -30,8 +30,8 @@ import org.apache.dolphinscheduler.dao.utils.TaskCacheUtils; import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.TaskDispatchCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.task.TaskDispatchMessage; import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager; import org.apache.dolphinscheduler.server.master.config.MasterConfig; import org.apache.dolphinscheduler.server.master.dispatch.ExecutorDispatcher; @@ -225,7 +225,7 @@ public class TaskPriorityQueueConsumer extends BaseDaemonThread { .taskInstance(taskInstance) .workerGroup(context.getWorkerGroup()) .executorType(ExecutorType.WORKER) - .command(toCommand(context)) + .message(toCommand(context)) .build(); if (isTaskNeedToCheck(taskPriority)) { @@ -276,9 +276,9 @@ public class TaskPriorityQueueConsumer extends BaseDaemonThread { taskEventService.addEvent(taskEvent); } - private Command toCommand(TaskExecutionContext taskExecutionContext) { + private Message toCommand(TaskExecutionContext taskExecutionContext) { // todo: we didn't set the host here, since right now we didn't need to retry this message. - TaskDispatchCommand requestCommand = new TaskDispatchCommand(taskExecutionContext, + TaskDispatchMessage requestCommand = new TaskDispatchMessage(taskExecutionContext, masterConfig.getMasterAddress(), taskExecutionContext.getHost(), System.currentTimeMillis()); diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcher.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcher.java index 1880f9295f..f247e9db31 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcher.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcher.java @@ -84,7 +84,7 @@ public class ExecutorDispatcher implements InitializingBean { Host host = hostManager.select(context); if (StringUtils.isEmpty(host.getAddress())) { log.warn("fail to execute : {} due to no suitable worker, current task needs worker group {} to execute", - context.getCommand(), context.getWorkerGroup()); + context.getMessage(), context.getWorkerGroup()); throw new ExecuteException("no suitable worker"); } context.setHost(host); diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/context/ExecutionContext.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/context/ExecutionContext.java index 3294f04a01..e0b49a531a 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/context/ExecutionContext.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/context/ExecutionContext.java @@ -20,7 +20,7 @@ package org.apache.dolphinscheduler.server.master.dispatch.context; import static org.apache.dolphinscheduler.common.constants.Constants.DEFAULT_WORKER_GROUP; import org.apache.dolphinscheduler.dao.entity.TaskInstance; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.server.master.dispatch.enums.ExecutorType; @@ -43,7 +43,7 @@ public class ExecutionContext { /** * command */ - private Command command; + private Message message; private TaskInstance taskInstance; @@ -54,12 +54,12 @@ public class ExecutionContext { */ private String workerGroup; - public ExecutionContext(Command command, ExecutorType executorType, TaskInstance taskInstance) { - this(command, executorType, DEFAULT_WORKER_GROUP, taskInstance); + public ExecutionContext(Message message, ExecutorType executorType, TaskInstance taskInstance) { + this(message, executorType, DEFAULT_WORKER_GROUP, taskInstance); } - public ExecutionContext(Command command, ExecutorType executorType, String workerGroup, TaskInstance taskInstance) { - this.command = command; + public ExecutionContext(Message message, ExecutorType executorType, String workerGroup, TaskInstance taskInstance) { + this.message = message; this.executorType = executorType; this.workerGroup = workerGroup; this.taskInstance = taskInstance; diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManager.java index 3df401f8fd..7ceb6e2977 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManager.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManager.java @@ -20,16 +20,14 @@ package org.apache.dolphinscheduler.server.master.dispatch.executor; import org.apache.dolphinscheduler.common.constants.Constants; import org.apache.dolphinscheduler.common.thread.ThreadUtils; import org.apache.dolphinscheduler.remote.NettyRemotingClient; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; import org.apache.dolphinscheduler.remote.config.NettyClientConfig; +import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.server.master.dispatch.context.ExecutionContext; import org.apache.dolphinscheduler.server.master.dispatch.enums.ExecutorType; import org.apache.dolphinscheduler.server.master.dispatch.exceptions.ExecuteException; import org.apache.dolphinscheduler.server.master.dispatch.exceptions.WorkerGroupNotFoundException; -import org.apache.dolphinscheduler.server.master.processor.TaskKillResponseProcessor; -import org.apache.dolphinscheduler.server.master.processor.TaskRecallProcessor; import org.apache.dolphinscheduler.server.master.registry.ServerNodeManager; import org.apache.commons.collections4.CollectionUtils; @@ -37,6 +35,7 @@ import org.apache.commons.collections4.CollectionUtils; import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; import javax.annotation.PostConstruct; @@ -60,10 +59,7 @@ public class NettyExecutorManager extends AbstractExecutorManager { private ServerNodeManager serverNodeManager; @Autowired - private TaskKillResponseProcessor taskKillResponseProcessor; - - @Autowired - private TaskRecallProcessor taskRecallProcessor; + private List nettyRequestProcessors; /** * netty remote client @@ -80,8 +76,9 @@ public class NettyExecutorManager extends AbstractExecutorManager { @PostConstruct public void init() { - this.nettyRemotingClient.registerProcessor(CommandType.TASK_KILL_RESPONSE, taskKillResponseProcessor); - this.nettyRemotingClient.registerProcessor(CommandType.TASK_REJECT, taskRecallProcessor); + for (NettyRequestProcessor nettyRequestProcessor : nettyRequestProcessors) { + this.nettyRemotingClient.registerProcessor(nettyRequestProcessor); + } } /** @@ -98,12 +95,12 @@ public class NettyExecutorManager extends AbstractExecutorManager { // fail nodes Set failNodeSet = new HashSet<>(); // build command accord executeContext - Command command = context.getCommand(); + Message message = context.getMessage(); // execute task host Host host = context.getHost(); for (int i = 0; i < allNodes.size(); i++) { try { - doExecute(host, command); + doExecute(host, message); context.setHost(host); // We set the host to taskInstance to avoid when the worker down, this taskInstance may not be // failovered, due to the taskInstance's host @@ -111,14 +108,14 @@ public class NettyExecutorManager extends AbstractExecutorManager { context.getTaskInstance().setHost(host.getAddress()); return; } catch (ExecuteException ex) { - log.error("Execute command {} error", command, ex); + log.error("Execute command {} error", message, ex); try { failNodeSet.add(host.getAddress()); Set tmpAllIps = new HashSet<>(allNodes); Collection remained = CollectionUtils.subtract(tmpAllIps, failNodeSet); if (CollectionUtils.isNotEmpty(remained)) { host = Host.of(remained.iterator().next()); - log.error("retry execute command : {} host : {}", command, host); + log.error("retry execute command : {} host : {}", message, host); } else { throw new ExecuteException("fail after try all nodes"); } @@ -132,33 +129,33 @@ public class NettyExecutorManager extends AbstractExecutorManager { @Override public void executeDirectly(ExecutionContext context) throws ExecuteException { Host host = context.getHost(); - doExecute(host, context.getCommand()); + doExecute(host, context.getMessage()); } /** * execute logic * * @param host host - * @param command command + * @param message command * @throws ExecuteException if error throws ExecuteException */ - public void doExecute(final Host host, final Command command) throws ExecuteException { + public void doExecute(final Host host, final Message message) throws ExecuteException { // retry count,default retry 3 int retryCount = 3; boolean success = false; do { try { - nettyRemotingClient.send(host, command); + nettyRemotingClient.send(host, message); success = true; } catch (Exception ex) { - log.error("Send command to {} error, command: {}", host, command, ex); + log.error("Send command to {} error, command: {}", host, message, ex); retryCount--; ThreadUtils.sleep(Constants.SLEEP_TIME_MILLIS); } } while (retryCount >= 0 && !success); if (!success) { - throw new ExecuteException(String.format("send command : %s to %s error", command, host)); + throw new ExecuteException(String.format("send command : %s to %s error", message, host)); } } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskDelayEventHandler.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskDelayEventHandler.java index 6355e8278d..cc8000092b 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskDelayEventHandler.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskDelayEventHandler.java @@ -22,12 +22,12 @@ import org.apache.dolphinscheduler.common.enums.TaskEventType; import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao; import org.apache.dolphinscheduler.dao.utils.TaskInstanceUtils; -import org.apache.dolphinscheduler.remote.command.TaskExecuteRunningAckMessage; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteRunningMessageAck; import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager; +import org.apache.dolphinscheduler.server.master.config.MasterConfig; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent; import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable; import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThreadPool; -import org.apache.dolphinscheduler.service.process.ProcessService; import java.util.Optional; @@ -43,15 +43,15 @@ public class TaskDelayEventHandler implements TaskEventHandler { @Autowired private ProcessInstanceExecCacheManager processInstanceExecCacheManager; - @Autowired - private ProcessService processService; - @Autowired private TaskInstanceDao taskInstanceDao; @Autowired private WorkflowExecuteThreadPool workflowExecuteThreadPool; + @Autowired + private MasterConfig masterConfig; + @Override public void handleTaskEvent(TaskEvent taskEvent) throws TaskEventHandleError { int taskInstanceId = taskEvent.getTaskInstanceId(); @@ -111,9 +111,13 @@ public class TaskDelayEventHandler implements TaskEventHandler { private void sendAckToWorker(TaskEvent taskEvent) { // If event handle success, send ack to worker to otherwise the worker will retry this event - TaskExecuteRunningAckMessage taskExecuteRunningAckMessage = - new TaskExecuteRunningAckMessage(true, taskEvent.getTaskInstanceId()); - taskEvent.getChannel().writeAndFlush(taskExecuteRunningAckMessage.convert2Command()); + TaskExecuteRunningMessageAck taskExecuteRunningMessageAck = + new TaskExecuteRunningMessageAck(true, + taskEvent.getTaskInstanceId(), + masterConfig.getMasterAddress(), + taskEvent.getWorkerAddress(), + System.currentTimeMillis()); + taskEvent.getChannel().writeAndFlush(taskExecuteRunningMessageAck.convert2Command()); } @Override diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskRejectByWorkerEventHandler.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskRejectByWorkerEventHandler.java index 77ac5e52a2..77c6f77f85 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskRejectByWorkerEventHandler.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskRejectByWorkerEventHandler.java @@ -19,7 +19,7 @@ package org.apache.dolphinscheduler.server.master.event; import org.apache.dolphinscheduler.common.enums.TaskEventType; import org.apache.dolphinscheduler.dao.entity.TaskInstance; -import org.apache.dolphinscheduler.remote.command.TaskRejectAckCommand; +import org.apache.dolphinscheduler.remote.command.task.TaskRejectMessageAck; import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager; import org.apache.dolphinscheduler.server.master.config.MasterConfig; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent; @@ -69,12 +69,12 @@ public class TaskRejectByWorkerEventHandler implements TaskEventHandler { } public void sendAckToWorker(TaskEvent taskEvent) { - TaskRejectAckCommand taskRejectAckMessage = new TaskRejectAckCommand(true, + TaskRejectMessageAck taskRejectMessageAck = new TaskRejectMessageAck(true, taskEvent.getTaskInstanceId(), masterConfig.getMasterAddress(), taskEvent.getWorkerAddress(), System.currentTimeMillis()); - taskEvent.getChannel().writeAndFlush(taskRejectAckMessage.convert2Command()); + taskEvent.getChannel().writeAndFlush(taskRejectMessageAck.convert2Command()); } @Override diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskResultEventHandler.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskResultEventHandler.java index 1d4b221313..fb8a3fbc74 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskResultEventHandler.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskResultEventHandler.java @@ -22,7 +22,7 @@ import org.apache.dolphinscheduler.common.enums.TaskEventType; import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao; import org.apache.dolphinscheduler.dao.utils.TaskInstanceUtils; -import org.apache.dolphinscheduler.remote.command.TaskExecuteAckCommand; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteResultMessageAck; import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager; import org.apache.dolphinscheduler.server.master.config.MasterConfig; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent; @@ -120,7 +120,7 @@ public class TaskResultEventHandler implements TaskEventHandler { return; } // we didn't set the receiver address, since the ack doen's need to retry - TaskExecuteAckCommand taskExecuteAckMessage = new TaskExecuteAckCommand(true, + TaskExecuteResultMessageAck taskExecuteAckMessage = new TaskExecuteResultMessageAck(true, taskEvent.getTaskInstanceId(), masterConfig.getMasterAddress(), taskEvent.getWorkerAddress(), diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskRunningEventHandler.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskRunningEventHandler.java index 5bfa75733d..3edb6c3006 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskRunningEventHandler.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskRunningEventHandler.java @@ -22,8 +22,9 @@ import org.apache.dolphinscheduler.common.enums.TaskEventType; import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao; import org.apache.dolphinscheduler.dao.utils.TaskInstanceUtils; -import org.apache.dolphinscheduler.remote.command.TaskExecuteRunningAckMessage; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteRunningMessageAck; import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager; +import org.apache.dolphinscheduler.server.master.config.MasterConfig; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent; import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable; import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThreadPool; @@ -45,6 +46,9 @@ public class TaskRunningEventHandler implements TaskEventHandler { @Autowired private TaskInstanceDao taskInstanceDao; + @Autowired + private MasterConfig masterConfig; + @Override public void handleTaskEvent(TaskEvent taskEvent) throws TaskEventHandleError { int taskInstanceId = taskEvent.getTaskInstanceId(); @@ -103,9 +107,14 @@ public class TaskRunningEventHandler implements TaskEventHandler { private void sendAckToWorker(TaskEvent taskEvent) { // If event handle success, send ack to worker to otherwise the worker will retry this event - TaskExecuteRunningAckMessage taskExecuteRunningAckMessage = - new TaskExecuteRunningAckMessage(true, taskEvent.getTaskInstanceId()); - taskEvent.getChannel().writeAndFlush(taskExecuteRunningAckMessage.convert2Command()); + TaskExecuteRunningMessageAck taskExecuteRunningMessageAck = + new TaskExecuteRunningMessageAck( + true, + taskEvent.getTaskInstanceId(), + masterConfig.getMasterAddress(), + taskEvent.getWorkerAddress(), + System.currentTimeMillis()); + taskEvent.getChannel().writeAndFlush(taskExecuteRunningMessageAck.convert2Command()); } @Override diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskStateEventHandler.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskStateEventHandler.java index 7a6e0c3072..28c048d05c 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskStateEventHandler.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskStateEventHandler.java @@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.server.master.event; import org.apache.dolphinscheduler.common.enums.StateEventType; import org.apache.dolphinscheduler.dao.entity.TaskInstance; +import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import org.apache.dolphinscheduler.server.master.metrics.TaskMetrics; import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable; import org.apache.dolphinscheduler.server.master.runner.task.ITaskProcessor; @@ -76,7 +77,11 @@ public class TaskStateEventHandler implements StateEventHandler { workflowExecuteRunnable.taskFinished(task); if (task.getTaskGroupId() > 0) { log.info("The task instance need to release task Group: {}", task.getTaskGroupId()); - workflowExecuteRunnable.releaseTaskGroup(task); + try { + workflowExecuteRunnable.releaseTaskGroup(task); + } catch (RemotingException | InterruptedException e) { + throw new StateEventHandleException("Release task group failed", e); + } } return true; } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskUpdatePidEventHandler.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskUpdatePidEventHandler.java index 1f81139ae2..3ade584ac9 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskUpdatePidEventHandler.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/event/TaskUpdatePidEventHandler.java @@ -21,7 +21,7 @@ import org.apache.dolphinscheduler.common.enums.TaskEventType; import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao; import org.apache.dolphinscheduler.dao.utils.TaskInstanceUtils; -import org.apache.dolphinscheduler.remote.command.TaskUpdatePidAckMessage; +import org.apache.dolphinscheduler.remote.command.task.TaskUpdatePidAckMessage; import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent; import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable; diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/CacheProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/CacheProcessor.java index b69937357a..3f6789a523 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/CacheProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/CacheProcessor.java @@ -19,9 +19,9 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.enums.CacheType; import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.CacheExpireCommand; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.cache.CacheExpireRequest; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import lombok.extern.slf4j.Slf4j; @@ -31,7 +31,6 @@ import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -45,28 +44,30 @@ public class CacheProcessor implements NettyRequestProcessor { private CacheManager cacheManager; @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.CACHE_EXPIRE == command.getType(), - String.format("invalid command type: %s", command.getType())); + public void process(Channel channel, Message message) { + CacheExpireRequest cacheExpireRequest = JSONUtils.parseObject(message.getBody(), CacheExpireRequest.class); - CacheExpireCommand cacheExpireCommand = JSONUtils.parseObject(command.getBody(), CacheExpireCommand.class); + log.info("received command : {}", cacheExpireRequest); - log.info("received command : {}", cacheExpireCommand); + this.cacheExpire(cacheExpireRequest); + } - this.cacheExpire(cacheExpireCommand); + @Override + public MessageType getCommandType() { + return MessageType.CACHE_EXPIRE; } - private void cacheExpire(CacheExpireCommand cacheExpireCommand) { + private void cacheExpire(CacheExpireRequest cacheExpireRequest) { - if (cacheExpireCommand.getCacheKey().isEmpty()) { + if (cacheExpireRequest.getCacheKey().isEmpty()) { return; } - CacheType cacheType = cacheExpireCommand.getCacheType(); + CacheType cacheType = cacheExpireRequest.getCacheType(); Cache cache = cacheManager.getCache(cacheType.getCacheName()); if (cache != null) { - cache.evict(cacheExpireCommand.getCacheKey()); - log.info("cache evict, type:{}, key:{}", cacheType.getCacheName(), cacheExpireCommand.getCacheKey()); + cache.evict(cacheExpireRequest.getCacheKey()); + log.info("cache evict, type:{}, key:{}", cacheType.getCacheName(), cacheExpireRequest.getCacheKey()); } } } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/StateEventProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/StateEventProcessor.java index 167aa156b7..d4a784f120 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/StateEventProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/StateEventProcessor.java @@ -21,9 +21,9 @@ import org.apache.dolphinscheduler.common.enums.StateEventType; import org.apache.dolphinscheduler.common.enums.WorkflowExecutionStatus; import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.WorkflowStateEventChangeCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.workflow.WorkflowStateEventChangeRequest; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.master.event.StateEvent; import org.apache.dolphinscheduler.server.master.event.TaskStateEvent; @@ -35,7 +35,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -49,17 +48,14 @@ public class StateEventProcessor implements NettyRequestProcessor { private StateEventResponseService stateEventResponseService; @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.STATE_EVENT_REQUEST == command.getType(), - String.format("invalid command type: %s", command.getType())); - - WorkflowStateEventChangeCommand workflowStateEventChangeCommand = - JSONUtils.parseObject(command.getBody(), WorkflowStateEventChangeCommand.class); + public void process(Channel channel, Message message) { + WorkflowStateEventChangeRequest workflowStateEventChangeRequest = + JSONUtils.parseObject(message.getBody(), WorkflowStateEventChangeRequest.class); StateEvent stateEvent; - if (workflowStateEventChangeCommand.getDestTaskInstanceId() == 0) { - stateEvent = createWorkflowStateEvent(workflowStateEventChangeCommand); + if (workflowStateEventChangeRequest.getDestTaskInstanceId() == 0) { + stateEvent = createWorkflowStateEvent(workflowStateEventChangeRequest); } else { - stateEvent = createTaskStateEvent(workflowStateEventChangeCommand); + stateEvent = createTaskStateEvent(workflowStateEventChangeRequest); } try ( @@ -71,26 +67,31 @@ public class StateEventProcessor implements NettyRequestProcessor { } - private TaskStateEvent createTaskStateEvent(WorkflowStateEventChangeCommand workflowStateEventChangeCommand) { + @Override + public MessageType getCommandType() { + return MessageType.STATE_EVENT_REQUEST; + } + + private TaskStateEvent createTaskStateEvent(WorkflowStateEventChangeRequest workflowStateEventChangeRequest) { return TaskStateEvent.builder() - .processInstanceId(workflowStateEventChangeCommand.getDestProcessInstanceId()) - .taskInstanceId(workflowStateEventChangeCommand.getDestTaskInstanceId()) + .processInstanceId(workflowStateEventChangeRequest.getDestProcessInstanceId()) + .taskInstanceId(workflowStateEventChangeRequest.getDestTaskInstanceId()) .type(StateEventType.TASK_STATE_CHANGE) - .key(workflowStateEventChangeCommand.getKey()) + .key(workflowStateEventChangeRequest.getKey()) .build(); } - private WorkflowStateEvent createWorkflowStateEvent(WorkflowStateEventChangeCommand workflowStateEventChangeCommand) { - WorkflowExecutionStatus workflowExecutionStatus = workflowStateEventChangeCommand.getSourceStatus(); - if (workflowStateEventChangeCommand.getSourceProcessInstanceId() != workflowStateEventChangeCommand + private WorkflowStateEvent createWorkflowStateEvent(WorkflowStateEventChangeRequest workflowStateEventChangeRequest) { + WorkflowExecutionStatus workflowExecutionStatus = workflowStateEventChangeRequest.getSourceStatus(); + if (workflowStateEventChangeRequest.getSourceProcessInstanceId() != workflowStateEventChangeRequest .getDestProcessInstanceId()) { workflowExecutionStatus = WorkflowExecutionStatus.RUNNING_EXECUTION; } return WorkflowStateEvent.builder() - .processInstanceId(workflowStateEventChangeCommand.getDestProcessInstanceId()) + .processInstanceId(workflowStateEventChangeRequest.getDestProcessInstanceId()) .type(StateEventType.PROCESS_STATE_CHANGE) .status(workflowExecutionStatus) - .key(workflowStateEventChangeCommand.getKey()) + .key(workflowStateEventChangeRequest.getKey()) .build(); } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteResponseProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteResultProcessor.java similarity index 75% rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteResponseProcessor.java rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteResultProcessor.java index f40473e0f9..81436e3c70 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteResponseProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteResultProcessor.java @@ -19,9 +19,9 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskExecuteResultCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteResultMessage; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService; @@ -31,7 +31,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -39,7 +38,7 @@ import io.netty.channel.Channel; */ @Component @Slf4j -public class TaskExecuteResponseProcessor implements NettyRequestProcessor { +public class TaskExecuteResultProcessor implements NettyRequestProcessor { @Autowired private TaskEventService taskEventService; @@ -49,15 +48,12 @@ public class TaskExecuteResponseProcessor implements NettyRequestProcessor { * need master process , state persistence * * @param channel channel - * @param command command + * @param message command */ @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_EXECUTE_RESULT == command.getType(), - String.format("invalid command type : %s", command.getType())); - - TaskExecuteResultCommand taskExecuteResultMessage = JSONUtils.parseObject(command.getBody(), - TaskExecuteResultCommand.class); + public void process(Channel channel, Message message) { + TaskExecuteResultMessage taskExecuteResultMessage = JSONUtils.parseObject(message.getBody(), + TaskExecuteResultMessage.class); TaskEvent taskResultEvent = TaskEvent.newResultEvent(taskExecuteResultMessage, channel, taskExecuteResultMessage.getMessageSenderAddress()); @@ -69,4 +65,9 @@ public class TaskExecuteResponseProcessor implements NettyRequestProcessor { taskEventService.addEvent(taskResultEvent); } } + + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_RESULT_MESSAGE; + } } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteRunningProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteRunningProcessor.java index 1a1788f5df..55f15a31cf 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteRunningProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteRunningProcessor.java @@ -18,9 +18,9 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskExecuteRunningCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteRunningMessage; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService; @@ -30,7 +30,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -47,14 +46,12 @@ public class TaskExecuteRunningProcessor implements NettyRequestProcessor { * task ack process * * @param channel channel channel - * @param command command TaskExecuteAckCommand + * @param message command TaskExecuteAckCommand */ @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_EXECUTE_RUNNING == command.getType(), - String.format("invalid command type : %s", command.getType())); - TaskExecuteRunningCommand taskExecuteRunningMessage = - JSONUtils.parseObject(command.getBody(), TaskExecuteRunningCommand.class); + public void process(Channel channel, Message message) { + TaskExecuteRunningMessage taskExecuteRunningMessage = + JSONUtils.parseObject(message.getBody(), TaskExecuteRunningMessage.class); log.info("taskExecuteRunningCommand: {}", taskExecuteRunningMessage); TaskEvent taskEvent = TaskEvent.newRunningEvent(taskExecuteRunningMessage, @@ -63,4 +60,9 @@ public class TaskExecuteRunningProcessor implements NettyRequestProcessor { taskEventService.addEvent(taskEvent); } + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_RUNNING_MESSAGE; + } + } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteStartProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteStartProcessor.java index b9d302e2fb..63f07f5b3d 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteStartProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteStartProcessor.java @@ -20,9 +20,9 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.dao.entity.TaskDefinition; import org.apache.dolphinscheduler.dao.repository.TaskDefinitionDao; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskExecuteStartCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteStartMessage; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.master.runner.StreamTaskExecuteRunnable; import org.apache.dolphinscheduler.server.master.runner.StreamTaskExecuteThreadPool; @@ -32,7 +32,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -49,28 +48,31 @@ public class TaskExecuteStartProcessor implements NettyRequestProcessor { private TaskDefinitionDao taskDefinitionDao; @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_EXECUTE_START == command.getType(), - String.format("invalid command type : %s", command.getType())); - TaskExecuteStartCommand taskExecuteStartCommand = - JSONUtils.parseObject(command.getBody(), TaskExecuteStartCommand.class); - log.info("taskExecuteStartCommand: {}", taskExecuteStartCommand); + public void process(Channel channel, Message message) { + TaskExecuteStartMessage taskExecuteStartMessage = + JSONUtils.parseObject(message.getBody(), TaskExecuteStartMessage.class); + log.info("taskExecuteStartCommand: {}", taskExecuteStartMessage); TaskDefinition taskDefinition = taskDefinitionDao.findTaskDefinition( - taskExecuteStartCommand.getTaskDefinitionCode(), taskExecuteStartCommand.getTaskDefinitionVersion()); + taskExecuteStartMessage.getTaskDefinitionCode(), taskExecuteStartMessage.getTaskDefinitionVersion()); if (taskDefinition == null) { log.error("Task definition can not be found, taskDefinitionCode:{}, taskDefinitionVersion:{}", - taskExecuteStartCommand.getTaskDefinitionCode(), - taskExecuteStartCommand.getTaskDefinitionVersion()); + taskExecuteStartMessage.getTaskDefinitionCode(), + taskExecuteStartMessage.getTaskDefinitionVersion()); return; } - streamTaskExecuteThreadPool.execute(new StreamTaskExecuteRunnable(taskDefinition, taskExecuteStartCommand)); + streamTaskExecuteThreadPool.execute(new StreamTaskExecuteRunnable(taskDefinition, taskExecuteStartMessage)); // response - Command response = new Command(command.getOpaque()); - response.setType(CommandType.TASK_EXECUTE_START); + Message response = new Message(message.getOpaque()); + response.setType(MessageType.TASK_EXECUTE_START); response.setBody(new byte[0]); channel.writeAndFlush(response); } + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_START; + } + } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskForceStartProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskForceStartProcessor.java new file mode 100644 index 0000000000..9185a0c700 --- /dev/null +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskForceStartProcessor.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.server.master.processor; + +import org.apache.dolphinscheduler.common.enums.StateEventType; +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskForceStartRequest; +import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; +import org.apache.dolphinscheduler.server.master.event.TaskStateEvent; +import org.apache.dolphinscheduler.server.master.processor.queue.StateEventResponseService; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import io.netty.channel.Channel; + +@Component +@Slf4j +public class TaskForceStartProcessor implements NettyRequestProcessor { + + @Autowired + private StateEventResponseService stateEventResponseService; + + @Override + public void process(Channel channel, Message message) { + TaskForceStartRequest taskEventChangeCommand = + JSONUtils.parseObject(message.getBody(), TaskForceStartRequest.class); + TaskStateEvent stateEvent = TaskStateEvent.builder() + .processInstanceId(taskEventChangeCommand.getProcessInstanceId()) + .taskInstanceId(taskEventChangeCommand.getTaskInstanceId()) + .key(taskEventChangeCommand.getKey()) + .type(StateEventType.WAKE_UP_TASK_GROUP) + .build(); + try ( + LogUtils.MDCAutoClosableContext mdcAutoClosableContext = LogUtils.setWorkflowAndTaskInstanceIDMDC( + stateEvent.getProcessInstanceId(), stateEvent.getTaskInstanceId())) { + log.info("Received task event change command, event: {}", stateEvent); + stateEventResponseService.addEvent2WorkflowExecute(stateEvent); + } + } + + @Override + public MessageType getCommandType() { + return MessageType.TASK_FORCE_STATE_EVENT_REQUEST; + } +} diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessor.java index 02ee30257a..c2c5b73ab2 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessor.java @@ -18,16 +18,15 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskKillResponseCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskKillResponse; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -42,17 +41,18 @@ public class TaskKillResponseProcessor implements NettyRequestProcessor { * need master process , state persistence * * @param channel channel - * @param command command + * @param message command */ @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_KILL_RESPONSE == command.getType(), - String.format("invalid command type : %s", command.getType())); - - TaskKillResponseCommand responseCommand = - JSONUtils.parseObject(command.getBody(), TaskKillResponseCommand.class); + public void process(Channel channel, Message message) { + TaskKillResponse responseCommand = JSONUtils.parseObject(message.getBody(), TaskKillResponse.class); log.info("[TaskInstance-{}] Received task kill response command : {}", responseCommand.getTaskInstanceId(), responseCommand); } + @Override + public MessageType getCommandType() { + return MessageType.TASK_KILL_RESPONSE; + } + } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskRecallProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskRecallProcessor.java index a903131c9f..9a8967a12f 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskRecallProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskRecallProcessor.java @@ -19,9 +19,9 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskRejectCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskRejectMessage; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService; @@ -31,7 +31,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -48,13 +47,11 @@ public class TaskRecallProcessor implements NettyRequestProcessor { * task ack process * * @param channel channel channel - * @param command command TaskExecuteAckCommand + * @param message command TaskExecuteAckCommand */ @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_REJECT == command.getType(), - String.format("invalid command type : %s", command.getType())); - TaskRejectCommand recallCommand = JSONUtils.parseObject(command.getBody(), TaskRejectCommand.class); + public void process(Channel channel, Message message) { + TaskRejectMessage recallCommand = JSONUtils.parseObject(message.getBody(), TaskRejectMessage.class); TaskEvent taskEvent = TaskEvent.newRecallEvent(recallCommand, channel); try ( final LogUtils.MDCAutoClosableContext mdcAutoClosableContext = LogUtils.setWorkflowAndTaskInstanceIDMDC( @@ -63,4 +60,9 @@ public class TaskRecallProcessor implements NettyRequestProcessor { taskEventService.addEvent(taskEvent); } } + + @Override + public MessageType getCommandType() { + return MessageType.TASK_REJECT; + } } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskUpdatePidProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskUpdatePidProcessor.java index bca59a079f..414012900e 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskUpdatePidProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskUpdatePidProcessor.java @@ -18,9 +18,9 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskUpdatePidCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskUpdatePidMessage; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService; @@ -30,7 +30,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -47,20 +46,23 @@ public class TaskUpdatePidProcessor implements NettyRequestProcessor { * task ack process * * @param channel channel channel - * @param command command TaskExecuteAckCommand + * @param message command TaskExecuteAckCommand */ @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_UPDATE_PID == command.getType(), - String.format("invalid command type : %s", command.getType())); - TaskUpdatePidCommand taskUpdatePidCommand = - JSONUtils.parseObject(command.getBody(), TaskUpdatePidCommand.class); - log.info("taskUpdatePidCommand: {}", taskUpdatePidCommand); + public void process(Channel channel, Message message) { + TaskUpdatePidMessage taskUpdatePidRequest = + JSONUtils.parseObject(message.getBody(), TaskUpdatePidMessage.class); + log.info("taskUpdatePidCommand: {}", taskUpdatePidRequest); - TaskEvent taskEvent = TaskEvent.newUpdatePidEvent(taskUpdatePidCommand, + TaskEvent taskEvent = TaskEvent.newUpdatePidEvent(taskUpdatePidRequest, channel, - taskUpdatePidCommand.getMessageSenderAddress()); + taskUpdatePidRequest.getMessageSenderAddress()); taskEventService.addEvent(taskEvent); } + @Override + public MessageType getCommandType() { + return MessageType.TASK_UPDATE_PID_MESSAGE; + } + } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskEventProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskWakeupProcessor.java similarity index 75% rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskEventProcessor.java rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskWakeupProcessor.java index d4fa52445e..4799024e79 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskEventProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskWakeupProcessor.java @@ -20,9 +20,9 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.enums.StateEventType; import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskEventChangeCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskWakeupRequest; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.master.event.TaskStateEvent; import org.apache.dolphinscheduler.server.master.processor.queue.StateEventResponseService; @@ -32,7 +32,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -40,19 +39,15 @@ import io.netty.channel.Channel; */ @Component @Slf4j -public class TaskEventProcessor implements NettyRequestProcessor { +public class TaskWakeupProcessor implements NettyRequestProcessor { @Autowired private StateEventResponseService stateEventResponseService; @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_FORCE_STATE_EVENT_REQUEST == command.getType() - || CommandType.TASK_WAKEUP_EVENT_REQUEST == command.getType(), - String.format("invalid command type: %s", command.getType())); - - TaskEventChangeCommand taskEventChangeCommand = - JSONUtils.parseObject(command.getBody(), TaskEventChangeCommand.class); + public void process(Channel channel, Message message) { + TaskWakeupRequest taskEventChangeCommand = + JSONUtils.parseObject(message.getBody(), TaskWakeupRequest.class); TaskStateEvent stateEvent = TaskStateEvent.builder() .processInstanceId(taskEventChangeCommand.getProcessInstanceId()) .taskInstanceId(taskEventChangeCommand.getTaskInstanceId()) @@ -67,4 +62,9 @@ public class TaskEventProcessor implements NettyRequestProcessor { } } + @Override + public MessageType getCommandType() { + return MessageType.TASK_WAKEUP_EVENT_REQUEST; + } + } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/WorkflowExecutingDataRequestProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/WorkflowExecutingDataRequestProcessor.java index 6977789b5b..b3fb6f2518 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/WorkflowExecutingDataRequestProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/WorkflowExecutingDataRequestProcessor.java @@ -18,10 +18,10 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.WorkflowExecutingDataRequestCommand; -import org.apache.dolphinscheduler.remote.command.WorkflowExecutingDataResponseCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.workflow.WorkflowExecutingDataRequest; +import org.apache.dolphinscheduler.remote.command.workflow.WorkflowExecutingDataResponse; import org.apache.dolphinscheduler.remote.dto.WorkflowExecuteDto; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.master.service.ExecutingService; @@ -33,7 +33,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -47,20 +46,22 @@ public class WorkflowExecutingDataRequestProcessor implements NettyRequestProces private ExecutingService executingService; @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.WORKFLOW_EXECUTING_DATA_REQUEST == command.getType(), - String.format("invalid command type: %s", command.getType())); - - WorkflowExecutingDataRequestCommand requestCommand = - JSONUtils.parseObject(command.getBody(), WorkflowExecutingDataRequestCommand.class); + public void process(Channel channel, Message message) { + WorkflowExecutingDataRequest requestCommand = + JSONUtils.parseObject(message.getBody(), WorkflowExecutingDataRequest.class); log.info("received command, processInstanceId:{}", requestCommand.getProcessInstanceId()); Optional workflowExecuteDtoOptional = executingService.queryWorkflowExecutingData(requestCommand.getProcessInstanceId()); - WorkflowExecutingDataResponseCommand responseCommand = new WorkflowExecutingDataResponseCommand(); + WorkflowExecutingDataResponse responseCommand = new WorkflowExecutingDataResponse(); workflowExecuteDtoOptional.ifPresent(responseCommand::setWorkflowExecuteDto); - channel.writeAndFlush(responseCommand.convert2Command(command.getOpaque())); + channel.writeAndFlush(responseCommand.convert2Command(message.getOpaque())); + } + + @Override + public MessageType getCommandType() { + return MessageType.WORKFLOW_EXECUTING_DATA_REQUEST; } } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/WorkflowMetricsCleanUpProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/WorkflowMetricsCleanUpProcessor.java index 30254d63a8..ea08426266 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/WorkflowMetricsCleanUpProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/WorkflowMetricsCleanUpProcessor.java @@ -18,30 +18,31 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.WorkflowMetricsCleanUpCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.workflow.WorkflowMetricsCleanUpRequest; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.master.metrics.ProcessInstanceMetrics; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; @Component public class WorkflowMetricsCleanUpProcessor implements NettyRequestProcessor { @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.WORKFLOW_METRICS_CLEANUP == command.getType(), - String.format("invalid command type: %s", command.getType())); - - WorkflowMetricsCleanUpCommand workflowMetricsCleanUpCommand = - JSONUtils.parseObject(command.getBody(), WorkflowMetricsCleanUpCommand.class); + public void process(Channel channel, Message message) { + WorkflowMetricsCleanUpRequest workflowMetricsCleanUpRequest = + JSONUtils.parseObject(message.getBody(), WorkflowMetricsCleanUpRequest.class); ProcessInstanceMetrics.cleanUpProcessInstanceCountMetricsByDefinitionCode( - workflowMetricsCleanUpCommand.getProcessDefinitionCode()); + workflowMetricsCleanUpRequest.getProcessDefinitionCode()); + } + + @Override + public MessageType getCommandType() { + return MessageType.WORKFLOW_METRICS_CLEANUP; } } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/StateEventResponseService.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/StateEventResponseService.java index 41dc8948f2..bfa5d00945 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/StateEventResponseService.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/StateEventResponseService.java @@ -20,7 +20,7 @@ package org.apache.dolphinscheduler.server.master.processor.queue; import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager; import org.apache.dolphinscheduler.common.thread.BaseDaemonThread; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.StateEventResponseCommand; +import org.apache.dolphinscheduler.remote.command.StateEventResponse; import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager; import org.apache.dolphinscheduler.server.master.event.StateEvent; import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable; @@ -133,7 +133,7 @@ public class StateEventResponseService { private void writeResponse(StateEvent stateEvent) { Channel channel = stateEvent.getChannel(); if (channel != null) { - StateEventResponseCommand command = new StateEventResponseCommand(stateEvent.getKey()); + StateEventResponse command = new StateEventResponse(stateEvent.getKey()); channel.writeAndFlush(command.convert2Command()); } } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskEvent.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskEvent.java index 1d2827223c..5f2097f58d 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskEvent.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskEvent.java @@ -20,10 +20,10 @@ package org.apache.dolphinscheduler.server.master.processor.queue; import org.apache.dolphinscheduler.common.enums.TaskEventType; import org.apache.dolphinscheduler.common.utils.DateUtils; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; -import org.apache.dolphinscheduler.remote.command.TaskExecuteResultCommand; -import org.apache.dolphinscheduler.remote.command.TaskExecuteRunningCommand; -import org.apache.dolphinscheduler.remote.command.TaskRejectCommand; -import org.apache.dolphinscheduler.remote.command.TaskUpdatePidCommand; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteResultMessage; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteRunningMessage; +import org.apache.dolphinscheduler.remote.command.task.TaskRejectMessage; +import org.apache.dolphinscheduler.remote.command.task.TaskUpdatePidMessage; import java.util.Date; @@ -112,7 +112,7 @@ public class TaskEvent { return event; } - public static TaskEvent newRunningEvent(TaskExecuteRunningCommand command, Channel channel, String workerAddress) { + public static TaskEvent newRunningEvent(TaskExecuteRunningMessage command, Channel channel, String workerAddress) { TaskEvent event = new TaskEvent(); event.setProcessInstanceId(command.getProcessInstanceId()); event.setTaskInstanceId(command.getTaskInstanceId()); @@ -127,7 +127,7 @@ public class TaskEvent { return event; } - public static TaskEvent newResultEvent(TaskExecuteResultCommand command, Channel channel, String workerAddress) { + public static TaskEvent newResultEvent(TaskExecuteResultMessage command, Channel channel, String workerAddress) { TaskEvent event = new TaskEvent(); event.setProcessInstanceId(command.getProcessInstanceId()); event.setTaskInstanceId(command.getTaskInstanceId()); @@ -145,7 +145,7 @@ public class TaskEvent { return event; } - public static TaskEvent newRecallEvent(TaskRejectCommand command, Channel channel) { + public static TaskEvent newRecallEvent(TaskRejectMessage command, Channel channel) { TaskEvent event = new TaskEvent(); event.setTaskInstanceId(command.getTaskInstanceId()); event.setProcessInstanceId(command.getProcessInstanceId()); @@ -163,7 +163,7 @@ public class TaskEvent { return event; } - public static TaskEvent newUpdatePidEvent(TaskUpdatePidCommand command, Channel channel, String workerAddress) { + public static TaskEvent newUpdatePidEvent(TaskUpdatePidMessage command, Channel channel, String workerAddress) { TaskEvent event = new TaskEvent(); event.setProcessInstanceId(command.getProcessInstanceId()); event.setTaskInstanceId(command.getTaskInstanceId()); diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRPCServer.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRPCServer.java index d039aac814..56df578461 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRPCServer.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRPCServer.java @@ -18,21 +18,11 @@ package org.apache.dolphinscheduler.server.master.rpc; import org.apache.dolphinscheduler.remote.NettyRemotingServer; -import org.apache.dolphinscheduler.remote.command.CommandType; import org.apache.dolphinscheduler.remote.config.NettyServerConfig; -import org.apache.dolphinscheduler.remote.processor.LoggerRequestProcessor; +import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.master.config.MasterConfig; -import org.apache.dolphinscheduler.server.master.processor.CacheProcessor; -import org.apache.dolphinscheduler.server.master.processor.StateEventProcessor; -import org.apache.dolphinscheduler.server.master.processor.TaskEventProcessor; -import org.apache.dolphinscheduler.server.master.processor.TaskExecuteResponseProcessor; -import org.apache.dolphinscheduler.server.master.processor.TaskExecuteRunningProcessor; -import org.apache.dolphinscheduler.server.master.processor.TaskExecuteStartProcessor; -import org.apache.dolphinscheduler.server.master.processor.TaskKillResponseProcessor; -import org.apache.dolphinscheduler.server.master.processor.TaskRecallProcessor; -import org.apache.dolphinscheduler.server.master.processor.TaskUpdatePidProcessor; -import org.apache.dolphinscheduler.server.master.processor.WorkflowExecutingDataRequestProcessor; -import org.apache.dolphinscheduler.server.master.processor.WorkflowMetricsCleanUpProcessor; + +import java.util.List; import lombok.extern.slf4j.Slf4j; @@ -52,40 +42,7 @@ public class MasterRPCServer implements AutoCloseable { private MasterConfig masterConfig; @Autowired - private TaskExecuteRunningProcessor taskExecuteRunningProcessor; - - @Autowired - private TaskExecuteResponseProcessor taskExecuteResponseProcessor; - - @Autowired - private TaskEventProcessor taskEventProcessor; - - @Autowired - private StateEventProcessor stateEventProcessor; - - @Autowired - private CacheProcessor cacheProcessor; - - @Autowired - private TaskKillResponseProcessor taskKillResponseProcessor; - - @Autowired - private TaskUpdatePidProcessor updatePidProcessor; - - @Autowired - private TaskRecallProcessor taskRecallProcessor; - - @Autowired - private LoggerRequestProcessor loggerRequestProcessor; - - @Autowired - private WorkflowExecutingDataRequestProcessor workflowExecutingDataRequestProcessor; - - @Autowired - private TaskExecuteStartProcessor taskExecuteStartProcessor; - - @Autowired - private WorkflowMetricsCleanUpProcessor workflowMetricsCleanUpProcessor; + private List nettyRequestProcessors; public void start() { log.info("Starting Master RPC Server..."); @@ -93,27 +50,10 @@ public class MasterRPCServer implements AutoCloseable { NettyServerConfig serverConfig = new NettyServerConfig(); serverConfig.setListenPort(masterConfig.getListenPort()); this.nettyRemotingServer = new NettyRemotingServer(serverConfig); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_RUNNING, taskExecuteRunningProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_UPDATE_PID, updatePidProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_RESULT, taskExecuteResponseProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_KILL_RESPONSE, taskKillResponseProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.STATE_EVENT_REQUEST, stateEventProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_FORCE_STATE_EVENT_REQUEST, taskEventProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_WAKEUP_EVENT_REQUEST, taskEventProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.CACHE_EXPIRE, cacheProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_REJECT, taskRecallProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.WORKFLOW_EXECUTING_DATA_REQUEST, - workflowExecutingDataRequestProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_START, taskExecuteStartProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.WORKFLOW_METRICS_CLEANUP, - workflowMetricsCleanUpProcessor); - - // log server - this.nettyRemotingServer.registerProcessor(CommandType.GET_LOG_BYTES_REQUEST, loggerRequestProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.ROLL_VIEW_LOG_REQUEST, loggerRequestProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.VIEW_WHOLE_LOG_REQUEST, loggerRequestProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.REMOVE_TAK_LOG_REQUEST, loggerRequestProcessor); - + for (NettyRequestProcessor nettyRequestProcessor : nettyRequestProcessors) { + this.nettyRemotingServer.registerProcessor(nettyRequestProcessor); + log.info("Success register netty processor: {}", nettyRequestProcessor.getClass().getName()); + } this.nettyRemotingServer.start(); log.info("Started Master RPC Server..."); } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRpcClient.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRpcClient.java index 4bc9788685..a8f587f347 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRpcClient.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRpcClient.java @@ -18,7 +18,7 @@ package org.apache.dolphinscheduler.server.master.rpc; import org.apache.dolphinscheduler.remote.NettyRemotingClient; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; import org.apache.dolphinscheduler.remote.config.NettyClientConfig; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import org.apache.dolphinscheduler.remote.utils.Host; @@ -41,9 +41,9 @@ public class MasterRpcClient { log.info("Success initialized ApiServerRPCClient..."); } - public Command sendSyncCommand(@NonNull Host host, - @NonNull Command rpcCommand) throws RemotingException, InterruptedException { - return client.sendSync(host, rpcCommand, DEFAULT_TIME_OUT_MILLS); + public Message sendSyncCommand(@NonNull Host host, + @NonNull Message rpcMessage) throws RemotingException, InterruptedException { + return client.sendSync(host, rpcMessage, DEFAULT_TIME_OUT_MILLS); } } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/StreamTaskExecuteRunnable.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/StreamTaskExecuteRunnable.java index 7ff33b1667..cda2310ef6 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/StreamTaskExecuteRunnable.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/StreamTaskExecuteRunnable.java @@ -43,9 +43,9 @@ import org.apache.dolphinscheduler.plugin.task.api.parameters.ParametersNode; import org.apache.dolphinscheduler.plugin.task.api.parameters.resource.ResourceParametersHelper; import org.apache.dolphinscheduler.plugin.task.api.parser.ParamUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.TaskDispatchCommand; -import org.apache.dolphinscheduler.remote.command.TaskExecuteRunningAckMessage; -import org.apache.dolphinscheduler.remote.command.TaskExecuteStartCommand; +import org.apache.dolphinscheduler.remote.command.task.TaskDispatchMessage; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteRunningMessageAck; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteStartMessage; import org.apache.dolphinscheduler.server.master.builder.TaskExecutionContextBuilder; import org.apache.dolphinscheduler.server.master.cache.StreamTaskInstanceExecCacheManager; import org.apache.dolphinscheduler.server.master.config.MasterConfig; @@ -103,7 +103,7 @@ public class StreamTaskExecuteRunnable implements Runnable { protected ProcessDefinition processDefinition; - protected TaskExecuteStartCommand taskExecuteStartCommand; + protected TaskExecuteStartMessage taskExecuteStartMessage; /** * task event queue @@ -112,7 +112,7 @@ public class StreamTaskExecuteRunnable implements Runnable { private TaskRunnableStatus taskRunnableStatus = TaskRunnableStatus.CREATED; - public StreamTaskExecuteRunnable(TaskDefinition taskDefinition, TaskExecuteStartCommand taskExecuteStartCommand) { + public StreamTaskExecuteRunnable(TaskDefinition taskDefinition, TaskExecuteStartMessage taskExecuteStartMessage) { this.processService = SpringApplicationContext.getBean(ProcessService.class); this.masterConfig = SpringApplicationContext.getBean(MasterConfig.class); this.dispatcher = SpringApplicationContext.getBean(ExecutorDispatcher.class); @@ -122,7 +122,7 @@ public class StreamTaskExecuteRunnable implements Runnable { this.streamTaskInstanceExecCacheManager = SpringApplicationContext.getBean(StreamTaskInstanceExecCacheManager.class); this.taskDefinition = taskDefinition; - this.taskExecuteStartCommand = taskExecuteStartCommand; + this.taskExecuteStartMessage = taskExecuteStartMessage; } public TaskInstance getTaskInstance() { @@ -153,7 +153,7 @@ public class StreamTaskExecuteRunnable implements Runnable { return; } - TaskDispatchCommand dispatchCommand = new TaskDispatchCommand(taskExecutionContext, + TaskDispatchMessage dispatchCommand = new TaskDispatchMessage(taskExecutionContext, masterConfig.getMasterAddress(), taskExecutionContext.getHost(), System.currentTimeMillis()); @@ -296,7 +296,7 @@ public class StreamTaskExecuteRunnable implements Runnable { taskInstance.setDelayTime(taskDefinition.getDelayTime()); // task dry run flag - taskInstance.setDryRun(taskExecuteStartCommand.getDryRun()); + taskInstance.setDryRun(taskExecuteStartMessage.getDryRun()); taskInstance.setWorkerGroup(StringUtils.isBlank(taskDefinition.getWorkerGroup()) ? DEFAULT_WORKER_GROUP : taskDefinition.getWorkerGroup()); @@ -318,8 +318,8 @@ public class StreamTaskExecuteRunnable implements Runnable { } taskInstance.setTaskExecuteType(taskDefinition.getTaskExecuteType()); - taskInstance.setExecutorId(taskExecuteStartCommand.getExecutorId()); - taskInstance.setExecutorName(taskExecuteStartCommand.getExecutorName()); + taskInstance.setExecutorId(taskExecuteStartMessage.getExecutorId()); + taskInstance.setExecutorName(taskExecuteStartMessage.getExecutorName()); return taskInstance; } @@ -461,7 +461,7 @@ public class StreamTaskExecuteRunnable implements Runnable { public Map paramParsingPreparation(@NonNull TaskInstance taskInstance, @NonNull AbstractParameters parameters) { // assign value to definedParams here - Map globalParamsMap = taskExecuteStartCommand.getStartParams(); + Map globalParamsMap = taskExecuteStartMessage.getStartParams(); Map globalParams = ParamUtils.getUserDefParamsMap(globalParamsMap); // combining local and global parameters @@ -487,9 +487,14 @@ public class StreamTaskExecuteRunnable implements Runnable { private void sendAckToWorker(TaskEvent taskEvent) { // If event handle success, send ack to worker to otherwise the worker will retry this event - TaskExecuteRunningAckMessage taskExecuteRunningAckMessage = - new TaskExecuteRunningAckMessage(true, taskEvent.getTaskInstanceId()); - taskEvent.getChannel().writeAndFlush(taskExecuteRunningAckMessage.convert2Command()); + TaskExecuteRunningMessageAck taskExecuteRunningMessageAck = + new TaskExecuteRunningMessageAck( + true, + taskEvent.getTaskInstanceId(), + masterConfig.getMasterAddress(), + taskEvent.getWorkerAddress(), + System.currentTimeMillis()); + taskEvent.getChannel().writeAndFlush(taskExecuteRunningMessageAck.convert2Command()); } private enum TaskRunnableStatus { diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java index 7f79ea6967..8930cba8af 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java @@ -67,6 +67,8 @@ import org.apache.dolphinscheduler.plugin.task.api.enums.Direct; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; import org.apache.dolphinscheduler.plugin.task.api.model.Property; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.task.TaskWakeupRequest; import org.apache.dolphinscheduler.remote.command.task.WorkflowHostChangeRequest; import org.apache.dolphinscheduler.remote.command.task.WorkflowHostChangeResponse; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; @@ -476,7 +478,7 @@ public class WorkflowExecuteRunnable implements Callable { * release task group * */ - public void releaseTaskGroup(TaskInstance taskInstance) { + public void releaseTaskGroup(TaskInstance taskInstance) throws RemotingException, InterruptedException { if (taskInstance.getTaskGroupId() > 0) { TaskInstance nextTaskInstance = this.processService.releaseTaskGroup(taskInstance); if (nextTaskInstance != null) { @@ -490,8 +492,8 @@ public class WorkflowExecuteRunnable implements Callable { } else { ProcessInstance processInstance = this.processService.findProcessInstanceById(nextTaskInstance.getProcessInstanceId()); - this.processService.sendStartTask2Master(processInstance, nextTaskInstance.getId(), - org.apache.dolphinscheduler.remote.command.CommandType.TASK_WAKEUP_EVENT_REQUEST); + this.masterRpcClient.sendSyncCommand(Host.of(processInstance.getHost()), + new TaskWakeupRequest(processInstance.getId(), nextTaskInstance.getId()).convert2Command()); } } } @@ -1420,17 +1422,17 @@ public class WorkflowExecuteRunnable implements Callable { return false; } try { - org.apache.dolphinscheduler.remote.command.Command command = + Message message = masterRpcClient.sendSyncCommand(Host.of(taskInstance.getHost()), new WorkflowHostChangeRequest(taskInstance.getId(), masterAddress).convert2Command()); - if (command == null) { + if (message == null) { log.error( "Takeover task instance failed, the worker {} might not be alive, will try to create a new task instance", taskInstance.getHost()); return false; } WorkflowHostChangeResponse workflowHostChangeResponse = - JSONUtils.parseObject(command.getBody(), WorkflowHostChangeResponse.class); + JSONUtils.parseObject(message.getBody(), WorkflowHostChangeResponse.class); if (workflowHostChangeResponse == null || !workflowHostChangeResponse.isSuccess()) { log.error( "Takeover task instance failed, receive a failed response from worker: {}, will try to create a new task instance", diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThreadPool.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThreadPool.java index 00a54cc5d9..6a62be507b 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThreadPool.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThreadPool.java @@ -24,7 +24,7 @@ import org.apache.dolphinscheduler.dao.entity.ProcessInstance; import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.WorkflowStateEventChangeCommand; +import org.apache.dolphinscheduler.remote.command.workflow.WorkflowStateEventChangeRequest; import org.apache.dolphinscheduler.remote.processor.StateEventCallbackService; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager; @@ -203,10 +203,10 @@ public class WorkflowExecuteThreadPool extends ThreadPoolTaskExecutor { taskInstance.getName(), taskInstance.getId()); return; } - WorkflowStateEventChangeCommand workflowStateEventChangeCommand = new WorkflowStateEventChangeCommand( + WorkflowStateEventChangeRequest workflowStateEventChangeRequest = new WorkflowStateEventChangeRequest( finishProcessInstance.getId(), 0, finishProcessInstance.getState(), processInstance.getId(), taskInstance.getId()); Host host = new Host(processInstanceHost); - stateEventCallbackService.sendResult(host, workflowStateEventChangeCommand.convert2Command()); + stateEventCallbackService.sendResult(host, workflowStateEventChangeRequest.convert2Command()); } } diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/CommonTaskProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/CommonTaskProcessor.java index 4b63fb3ea7..068e8be084 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/CommonTaskProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/CommonTaskProcessor.java @@ -23,7 +23,7 @@ import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.TaskConstants; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; -import org.apache.dolphinscheduler.remote.command.TaskKillRequestCommand; +import org.apache.dolphinscheduler.remote.command.task.TaskKillRequest; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.server.master.dispatch.context.ExecutionContext; import org.apache.dolphinscheduler.server.master.dispatch.enums.ExecutorType; @@ -173,7 +173,7 @@ public class CommonTaskProcessor extends BaseTaskProcessor { } private void killRemoteTask() throws ExecuteException { - TaskKillRequestCommand killCommand = new TaskKillRequestCommand(); + TaskKillRequest killCommand = new TaskKillRequest(); killCommand.setTaskInstanceId(taskInstance.getId()); ExecutionContext executionContext = diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/SubTaskProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/SubTaskProcessor.java index 1f8f125b19..76d7356484 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/SubTaskProcessor.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/SubTaskProcessor.java @@ -29,7 +29,7 @@ import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskTimeoutStrategy; import org.apache.dolphinscheduler.plugin.task.api.model.Property; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.WorkflowStateEventChangeCommand; +import org.apache.dolphinscheduler.remote.command.workflow.WorkflowStateEventChangeRequest; import org.apache.dolphinscheduler.remote.processor.StateEventCallbackService; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.service.bean.SpringApplicationContext; @@ -224,11 +224,11 @@ public class SubTaskProcessor extends BaseTaskProcessor { } private void sendToSubProcess() { - WorkflowStateEventChangeCommand workflowStateEventChangeCommand = new WorkflowStateEventChangeCommand( + WorkflowStateEventChangeRequest workflowStateEventChangeRequest = new WorkflowStateEventChangeRequest( processInstance.getId(), taskInstance.getId(), subProcessInstance.getState(), subProcessInstance.getId(), 0); Host host = new Host(subProcessInstance.getHost()); - this.stateEventCallbackService.sendResult(host, workflowStateEventChangeCommand.convert2Command()); + this.stateEventCallbackService.sendResult(host, workflowStateEventChangeRequest.convert2Command()); } @Override diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/MasterCommandTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/MasterMessageTest.java similarity index 98% rename from dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/MasterCommandTest.java rename to dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/MasterMessageTest.java index 3ab7781489..932aa1f865 100644 --- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/MasterCommandTest.java +++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/MasterMessageTest.java @@ -33,9 +33,9 @@ import org.slf4j.LoggerFactory; * master test */ @Disabled -public class MasterCommandTest { +public class MasterMessageTest { - private final Logger logger = LoggerFactory.getLogger(MasterCommandTest.class); + private final Logger logger = LoggerFactory.getLogger(MasterMessageTest.class); private CommandMapper commandMapper; diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutionContextTestUtils.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutionContextTestUtils.java index b95356acc6..d2b56890b8 100644 --- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutionContextTestUtils.java +++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutionContextTestUtils.java @@ -23,8 +23,8 @@ import org.apache.dolphinscheduler.dao.entity.ProcessDefinition; import org.apache.dolphinscheduler.dao.entity.ProcessInstance; import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.TaskDispatchCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.task.TaskDispatchMessage; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.server.master.builder.TaskExecutionContextBuilder; import org.apache.dolphinscheduler.server.master.dispatch.context.ExecutionContext; @@ -52,13 +52,13 @@ public class ExecutionContextTestUtils { .buildProcessDefinitionRelatedInfo(processDefinition) .create(); - TaskDispatchCommand requestCommand = new TaskDispatchCommand(context, + TaskDispatchMessage requestCommand = new TaskDispatchMessage(context, "127.0.0.1:5678", "127.0.0.1:5678", System.currentTimeMillis()); - Command command = requestCommand.convert2Command(); + Message message = requestCommand.convert2Command(); - ExecutionContext executionContext = new ExecutionContext(command, ExecutorType.WORKER, taskInstance); + ExecutionContext executionContext = new ExecutionContext(message, ExecutorType.WORKER, taskInstance); executionContext.setHost(Host.of(NetUtils.getAddr(port))); return executionContext; diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcherTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcherTest.java index 20a8d2a9f7..ce1bef11f9 100644 --- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcherTest.java +++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcherTest.java @@ -18,7 +18,6 @@ package org.apache.dolphinscheduler.server.master.dispatch; import org.apache.dolphinscheduler.remote.NettyRemotingServer; -import org.apache.dolphinscheduler.remote.command.CommandType; import org.apache.dolphinscheduler.remote.config.NettyServerConfig; import org.apache.dolphinscheduler.server.master.dispatch.context.ExecutionContext; import org.apache.dolphinscheduler.server.master.dispatch.exceptions.ExecuteException; @@ -64,8 +63,7 @@ public class ExecutorDispatcherTest { final NettyServerConfig serverConfig = new NettyServerConfig(); serverConfig.setListenPort(port); NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(serverConfig); - nettyRemotingServer.registerProcessor(CommandType.TASK_DISPATCH_REQUEST, Mockito.mock( - TaskDispatchProcessor.class)); + nettyRemotingServer.registerProcessor(Mockito.mock(TaskDispatchProcessor.class)); nettyRemotingServer.start(); // workerConfig.setListenPort(port); diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManagerTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManagerTest.java index f5be1ed86f..f03ee3b4e0 100644 --- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManagerTest.java +++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManagerTest.java @@ -24,8 +24,8 @@ import org.apache.dolphinscheduler.dao.entity.ProcessInstance; import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; import org.apache.dolphinscheduler.remote.NettyRemotingServer; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.TaskDispatchCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.task.TaskDispatchMessage; import org.apache.dolphinscheduler.remote.config.NettyServerConfig; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.server.master.builder.TaskExecutionContextBuilder; @@ -56,9 +56,7 @@ public class NettyExecutorManagerTest { final NettyServerConfig serverConfig = new NettyServerConfig(); serverConfig.setListenPort(30000); NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(serverConfig); - nettyRemotingServer.registerProcessor( - org.apache.dolphinscheduler.remote.command.CommandType.TASK_DISPATCH_REQUEST, - new TaskDispatchProcessor()); + nettyRemotingServer.registerProcessor(new TaskDispatchProcessor()); nettyRemotingServer.start(); TaskInstance taskInstance = Mockito.mock(TaskInstance.class); ProcessDefinition processDefinition = Mockito.mock(ProcessDefinition.class); @@ -95,8 +93,8 @@ public class NettyExecutorManagerTest { }); } - private Command toCommand(TaskExecutionContext taskExecutionContext) { - TaskDispatchCommand requestCommand = new TaskDispatchCommand(taskExecutionContext, + private Message toCommand(TaskExecutionContext taskExecutionContext) { + TaskDispatchMessage requestCommand = new TaskDispatchMessage(taskExecutionContext, "127.0.0.1:5678", "127.0.0.1:1234", System.currentTimeMillis()); diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/CacheProcessorTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/CacheProcessorTest.java index ebddeb45d1..cf44b66ed7 100644 --- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/CacheProcessorTest.java +++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/CacheProcessorTest.java @@ -19,8 +19,8 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.common.enums.CacheType; import org.apache.dolphinscheduler.dao.entity.Tenant; -import org.apache.dolphinscheduler.remote.command.CacheExpireCommand; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.cache.CacheExpireRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -61,9 +61,9 @@ public class CacheProcessorTest { public void testProcess() { Tenant tenant = new Tenant(); tenant.setId(1); - CacheExpireCommand cacheExpireCommand = new CacheExpireCommand(CacheType.TENANT, "1"); - Command command = cacheExpireCommand.convert2Command(); + CacheExpireRequest cacheExpireRequest = new CacheExpireRequest(CacheType.TENANT, "1"); + Message message = cacheExpireRequest.convert2Command(); - cacheProcessor.process(channel, command); + cacheProcessor.process(channel, message); } } diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/TaskAckProcessorTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/TaskAckProcessorTest.java index c0fe33a137..f5eaa4424d 100644 --- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/TaskAckProcessorTest.java +++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/TaskAckProcessorTest.java @@ -18,7 +18,7 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; -import org.apache.dolphinscheduler.remote.command.TaskExecuteRunningCommand; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteRunningMessage; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent; import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService; import org.apache.dolphinscheduler.service.bean.SpringApplicationContext; @@ -43,7 +43,7 @@ public class TaskAckProcessorTest { private TaskExecuteRunningProcessor taskExecuteRunningProcessor; private TaskEventService taskEventService; private ProcessService processService; - private TaskExecuteRunningCommand taskExecuteRunningMessage; + private TaskExecuteRunningMessage taskExecuteRunningMessage; private TaskEvent taskResponseEvent; private Channel channel; @@ -66,7 +66,7 @@ public class TaskAckProcessorTest { channel = Mockito.mock(Channel.class); taskResponseEvent = Mockito.mock(TaskEvent.class); - taskExecuteRunningMessage = new TaskExecuteRunningCommand("127.0.0.1:5678", + taskExecuteRunningMessage = new TaskExecuteRunningMessage("127.0.0.1:5678", " 127.0.0.1:1234", System.currentTimeMillis()); taskExecuteRunningMessage.setStatus(TaskExecutionStatus.RUNNING_EXECUTION); diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessorTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessorTest.java index 2626ed1eb7..6e94bcd8ac 100644 --- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessorTest.java +++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessorTest.java @@ -18,9 +18,9 @@ package org.apache.dolphinscheduler.server.master.processor; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskKillResponseCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskKillResponse; import java.util.ArrayList; @@ -38,7 +38,7 @@ public class TaskKillResponseProcessorTest { private TaskKillResponseProcessor taskKillResponseProcessor; - private TaskKillResponseCommand taskKillResponseCommand; + private TaskKillResponse taskKillResponse; private Channel channel; @@ -46,25 +46,25 @@ public class TaskKillResponseProcessorTest { public void before() { taskKillResponseProcessor = new TaskKillResponseProcessor(); channel = Mockito.mock(Channel.class); - taskKillResponseCommand = new TaskKillResponseCommand(); - taskKillResponseCommand.setAppIds( + taskKillResponse = new TaskKillResponse(); + taskKillResponse.setAppIds( new ArrayList() { { add("task_1"); } }); - taskKillResponseCommand.setHost("localhost"); - taskKillResponseCommand.setProcessId(1); - taskKillResponseCommand.setStatus(TaskExecutionStatus.RUNNING_EXECUTION); - taskKillResponseCommand.setTaskInstanceId(1); + taskKillResponse.setHost("localhost"); + taskKillResponse.setProcessId(1); + taskKillResponse.setStatus(TaskExecutionStatus.RUNNING_EXECUTION); + taskKillResponse.setTaskInstanceId(1); } @Test public void testProcess() { - Command command = taskKillResponseCommand.convert2Command(); - Assertions.assertEquals(CommandType.TASK_KILL_RESPONSE, command.getType()); - taskKillResponseProcessor.process(channel, command); + Message message = taskKillResponse.convert2Command(1); + Assertions.assertEquals(MessageType.TASK_KILL_RESPONSE, message.getType()); + taskKillResponseProcessor.process(channel, message); } } diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseServiceTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseServiceTest.java index 4b9e37a601..92031ee824 100644 --- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseServiceTest.java +++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseServiceTest.java @@ -20,8 +20,8 @@ package org.apache.dolphinscheduler.server.master.processor.queue; import org.apache.dolphinscheduler.common.utils.NetUtils; import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; -import org.apache.dolphinscheduler.remote.command.TaskExecuteResultCommand; -import org.apache.dolphinscheduler.remote.command.TaskExecuteRunningCommand; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteResultMessage; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteRunningMessage; import org.apache.dolphinscheduler.server.master.cache.impl.ProcessInstanceExecCacheManagerImpl; import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThreadPool; import org.apache.dolphinscheduler.server.master.utils.DataQualityResultOperator; @@ -71,7 +71,7 @@ public class TaskResponseServiceTest { public void before() { taskEventService.start(); - TaskExecuteRunningCommand taskExecuteRunningMessage = new TaskExecuteRunningCommand("127.0.0.1:5678", + TaskExecuteRunningMessage taskExecuteRunningMessage = new TaskExecuteRunningMessage("127.0.0.1:5678", "127.0.0.1:1234", System.currentTimeMillis()); taskExecuteRunningMessage.setProcessId(1); @@ -86,7 +86,7 @@ public class TaskResponseServiceTest { channel, taskExecuteRunningMessage.getMessageSenderAddress()); - TaskExecuteResultCommand taskExecuteResultMessage = new TaskExecuteResultCommand(NetUtils.getAddr(1234), + TaskExecuteResultMessage taskExecuteResultMessage = new TaskExecuteResultMessage(NetUtils.getAddr(1234), NetUtils.getAddr(5678), System.currentTimeMillis()); taskExecuteResultMessage.setProcessInstanceId(1); diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java index d1f081617c..e92ffd4961 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java @@ -19,8 +19,7 @@ package org.apache.dolphinscheduler.remote; import org.apache.dolphinscheduler.remote.codec.NettyDecoder; import org.apache.dolphinscheduler.remote.codec.NettyEncoder; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; import org.apache.dolphinscheduler.remote.config.NettyClientConfig; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import org.apache.dolphinscheduler.remote.exceptions.RemotingTimeoutException; @@ -142,7 +141,7 @@ public class NettyRemotingClient implements AutoCloseable { * @param timeoutMillis timeoutMillis * @param invokeCallback callback function */ - public void sendAsync(final Host host, final Command command, + public void sendAsync(final Host host, final Message command, final long timeoutMillis, final InvokeCallback invokeCallback) throws InterruptedException, RemotingException { final Channel channel = getChannel(host); @@ -201,19 +200,19 @@ public class NettyRemotingClient implements AutoCloseable { * sync send * * @param host host - * @param command command + * @param message command * @param timeoutMillis timeoutMillis * @return command */ - public Command sendSync(final Host host, final Command command, + public Message sendSync(final Host host, final Message message, final long timeoutMillis) throws InterruptedException, RemotingException { final Channel channel = getChannel(host); if (channel == null) { throw new RemotingException(String.format("connect to : %s fail", host)); } - final long opaque = command.getOpaque(); + final long opaque = message.getOpaque(); final ResponseFuture responseFuture = new ResponseFuture(opaque, timeoutMillis, null, null); - channel.writeAndFlush(command).addListener(future -> { + channel.writeAndFlush(message).addListener(future -> { if (future.isSuccess()) { responseFuture.setSendOk(true); return; @@ -222,12 +221,12 @@ public class NettyRemotingClient implements AutoCloseable { } responseFuture.setCause(future.cause()); responseFuture.putResponse(null); - log.error("send command {} to host {} failed", command, host); + log.error("send command {} to host {} failed", message, host); }); /* * sync wait for result */ - Command result = responseFuture.waitResponse(); + Message result = responseFuture.waitResponse(); if (result == null) { if (responseFuture.isSendOK()) { throw new RemotingTimeoutException(host.toString(), timeoutMillis, responseFuture.getCause()); @@ -242,51 +241,49 @@ public class NettyRemotingClient implements AutoCloseable { * send task * * @param host host - * @param command command + * @param message command */ - public void send(final Host host, final Command command) throws RemotingException { + public void send(final Host host, final Message message) throws RemotingException { Channel channel = getChannel(host); if (channel == null) { throw new RemotingException(String.format("connect to : %s fail", host)); } try { - ChannelFuture future = channel.writeAndFlush(command).await(); + ChannelFuture future = channel.writeAndFlush(message).await(); if (future.isSuccess()) { - log.debug("send command : {} , to : {} successfully.", command, host.getAddress()); + log.debug("send command : {} , to : {} successfully.", message, host.getAddress()); } else { - String msg = String.format("send command : %s , to :%s failed", command, host.getAddress()); + String msg = String.format("send command : %s , to :%s failed", message, host.getAddress()); log.error(msg, future.cause()); throw new RemotingException(msg); } } catch (RemotingException remotingException) { throw remotingException; } catch (Exception e) { - log.error("Send command {} to address {} encounter error.", command, host.getAddress()); + log.error("Send command {} to address {} encounter error.", message, host.getAddress()); throw new RemotingException( - String.format("Send command : %s , to :%s encounter error", command, host.getAddress()), e); + String.format("Send command : %s , to :%s encounter error", message, host.getAddress()), e); } } /** * register processor * - * @param commandType command type * @param processor processor */ - public void registerProcessor(final CommandType commandType, final NettyRequestProcessor processor) { - this.registerProcessor(commandType, processor, null); + public void registerProcessor(final NettyRequestProcessor processor) { + this.registerProcessor(processor, null); } /** * register processor * - * @param commandType command type * @param processor processor * @param executor thread executor */ - public void registerProcessor(final CommandType commandType, final NettyRequestProcessor processor, + public void registerProcessor(final NettyRequestProcessor processor, final ExecutorService executor) { - this.clientHandler.registerProcessor(commandType, processor, executor); + this.clientHandler.registerProcessor(processor.getCommandType(), processor, executor); } /** diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingServer.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingServer.java index 8480dbd301..740910a9a5 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingServer.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingServer.java @@ -19,7 +19,6 @@ package org.apache.dolphinscheduler.remote; import org.apache.dolphinscheduler.remote.codec.NettyDecoder; import org.apache.dolphinscheduler.remote.codec.NettyEncoder; -import org.apache.dolphinscheduler.remote.command.CommandType; import org.apache.dolphinscheduler.remote.config.NettyServerConfig; import org.apache.dolphinscheduler.remote.exceptions.RemoteException; import org.apache.dolphinscheduler.remote.handler.NettyServerHandler; @@ -171,23 +170,21 @@ public class NettyRemotingServer { /** * register processor * - * @param commandType command type * @param processor processor */ - public void registerProcessor(final CommandType commandType, final NettyRequestProcessor processor) { - this.registerProcessor(commandType, processor, null); + public void registerProcessor(final NettyRequestProcessor processor) { + this.registerProcessor(processor, null); } /** * register processor * - * @param commandType command type - * @param processor processor - * @param executor thread executor + * @param processor processor + * @param executor thread executor */ - public void registerProcessor(final CommandType commandType, final NettyRequestProcessor processor, + public void registerProcessor(final NettyRequestProcessor processor, final ExecutorService executor) { - this.serverHandler.registerProcessor(commandType, processor, executor); + this.serverHandler.registerProcessor(processor.getCommandType(), processor, executor); } /** diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/codec/NettyDecoder.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/codec/NettyDecoder.java index 2881d3c91c..f7bb944b5e 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/codec/NettyDecoder.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/codec/NettyDecoder.java @@ -17,10 +17,10 @@ package org.apache.dolphinscheduler.remote.codec; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandContext; -import org.apache.dolphinscheduler.remote.command.CommandHeader; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageContext; +import org.apache.dolphinscheduler.remote.command.MessageHeader; +import org.apache.dolphinscheduler.remote.command.MessageType; import java.util.List; @@ -39,7 +39,7 @@ public class NettyDecoder extends ReplayingDecoder { super(State.MAGIC); } - private final CommandHeader commandHeader = new CommandHeader(); + private final MessageHeader messageHeader = new MessageHeader(); /** * decode @@ -60,35 +60,35 @@ public class NettyDecoder extends ReplayingDecoder { checkpoint(State.COMMAND); // fallthru case COMMAND: - commandHeader.setType(in.readByte()); + messageHeader.setType(in.readByte()); checkpoint(State.OPAQUE); // fallthru case OPAQUE: - commandHeader.setOpaque(in.readLong()); + messageHeader.setOpaque(in.readLong()); checkpoint(State.CONTEXT_LENGTH); // fallthru case CONTEXT_LENGTH: - commandHeader.setContextLength(in.readInt()); + messageHeader.setContextLength(in.readInt()); checkpoint(State.CONTEXT); // fallthru case CONTEXT: - byte[] context = new byte[commandHeader.getContextLength()]; + byte[] context = new byte[messageHeader.getContextLength()]; in.readBytes(context); - commandHeader.setContext(context); + messageHeader.setContext(context); checkpoint(State.BODY_LENGTH); // fallthru case BODY_LENGTH: - commandHeader.setBodyLength(in.readInt()); + messageHeader.setBodyLength(in.readInt()); checkpoint(State.BODY); // fallthru case BODY: - byte[] body = new byte[commandHeader.getBodyLength()]; + byte[] body = new byte[messageHeader.getBodyLength()]; in.readBytes(body); // - Command packet = new Command(); - packet.setType(commandType(commandHeader.getType())); - packet.setOpaque(commandHeader.getOpaque()); - packet.setContext(CommandContext.valueOf(commandHeader.getContext())); + Message packet = new Message(); + packet.setType(commandType(messageHeader.getType())); + packet.setOpaque(messageHeader.getOpaque()); + packet.setContext(MessageContext.valueOf(messageHeader.getContext())); packet.setBody(body); out.add(packet); // @@ -104,8 +104,8 @@ public class NettyDecoder extends ReplayingDecoder { * * @param type type */ - private CommandType commandType(byte type) { - for (CommandType ct : CommandType.values()) { + private MessageType commandType(byte type) { + for (MessageType ct : MessageType.values()) { if (ct.ordinal() == type) { return ct; } @@ -119,7 +119,7 @@ public class NettyDecoder extends ReplayingDecoder { * @param magic magic */ private void checkMagic(byte magic) { - if (magic != Command.MAGIC) { + if (magic != Message.MAGIC) { throw new IllegalArgumentException("illegal packet [magic]" + magic); } } @@ -128,7 +128,7 @@ public class NettyDecoder extends ReplayingDecoder { * check version */ private void checkVersion(byte version) { - if (version != Command.VERSION) { + if (version != Message.VERSION) { throw new IllegalArgumentException("illegal protocol [version]" + version); } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/codec/NettyEncoder.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/codec/NettyEncoder.java index c1d6e0fcd2..d6e10cf126 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/codec/NettyEncoder.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/codec/NettyEncoder.java @@ -17,7 +17,7 @@ package org.apache.dolphinscheduler.remote.codec; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import io.netty.buffer.ByteBuf; @@ -29,7 +29,7 @@ import io.netty.handler.codec.MessageToByteEncoder; * netty encoder */ @Sharable -public class NettyEncoder extends MessageToByteEncoder { +public class NettyEncoder extends MessageToByteEncoder { /** * encode @@ -39,12 +39,12 @@ public class NettyEncoder extends MessageToByteEncoder { * @param out byte buffer */ @Override - protected void encode(ChannelHandlerContext ctx, Command msg, ByteBuf out) throws Exception { + protected void encode(ChannelHandlerContext ctx, Message msg, ByteBuf out) throws Exception { if (msg == null) { throw new RemotingException("encode msg is null"); } - out.writeByte(Command.MAGIC); - out.writeByte(Command.VERSION); + out.writeByte(Message.MAGIC); + out.writeByte(Message.VERSION); out.writeByte(msg.getType().ordinal()); out.writeLong(msg.getOpaque()); writeContext(msg, out); @@ -52,7 +52,7 @@ public class NettyEncoder extends MessageToByteEncoder { out.writeBytes(msg.getBody()); } - private void writeContext(Command msg, ByteBuf out) { + private void writeContext(Message msg, ByteBuf out) { byte[] headerBytes = msg.getContext().toBytes(); out.writeInt(headerBytes.length); out.writeBytes(headerBytes); diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/BaseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/BaseMessage.java similarity index 93% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/BaseCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/BaseMessage.java index 8207b5fecc..a5d73c26b6 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/BaseCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/BaseMessage.java @@ -33,7 +33,7 @@ import lombok.NoArgsConstructor; */ @Data @NoArgsConstructor -public abstract class BaseCommand implements Serializable { +public abstract class BaseMessage implements Serializable, RequestMessageBuilder { private static final long serialVersionUID = -1L; @@ -49,7 +49,7 @@ public abstract class BaseCommand implements Serializable { protected long messageSendTime; - protected BaseCommand(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { + protected BaseMessage(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { this.messageSenderAddress = messageSenderAddress; this.messageReceiverAddress = messageReceiverAddress; this.messageSendTime = messageSendTime; diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CacheExpireCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CacheExpireCommand.java deleted file mode 100644 index a32d4fce13..0000000000 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CacheExpireCommand.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.remote.command; - -import org.apache.dolphinscheduler.common.enums.CacheType; -import org.apache.dolphinscheduler.common.utils.JSONUtils; - -import java.io.Serializable; - -/** - * db task ack request command - */ -public class CacheExpireCommand implements Serializable { - - private CacheType cacheType; - private String cacheKey; - - public CacheExpireCommand() { - super(); - } - - public CacheExpireCommand(CacheType cacheType, String cacheKey) { - this.cacheType = cacheType; - this.cacheKey = cacheKey; - } - - public CacheType getCacheType() { - return cacheType; - } - - public String getCacheKey() { - return cacheKey; - } - - /** - * package command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.CACHE_EXPIRE); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; - } - - @Override - public String toString() { - return String.format("CacheExpireCommand{CacheType=%s, cacheKey=%s}", cacheType, cacheKey); - } -} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/Command.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/Message.java similarity index 86% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/Command.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/Message.java index 28c36e56fb..767cc483fd 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/Command.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/Message.java @@ -24,7 +24,7 @@ import java.util.concurrent.atomic.AtomicLong; * receive task log request command and content fill * for netty data serializable transfer */ -public class Command implements Serializable { +public class Message implements Serializable { private static final long serialVersionUID = -1L; @@ -33,18 +33,18 @@ public class Command implements Serializable { public static final byte MAGIC = (byte) 0xbabe; public static final byte VERSION = 0; - public Command() { + public Message() { this.opaque = REQUEST_ID.getAndIncrement(); } - public Command(long opaque) { + public Message(long opaque) { this.opaque = opaque; } /** * command type */ - private CommandType type; + private MessageType type; /** * request unique identification @@ -54,18 +54,18 @@ public class Command implements Serializable { /** * request context */ - private CommandContext context = new CommandContext(); + private MessageContext context = new MessageContext(); /** * data body */ private byte[] body; - public CommandType getType() { + public MessageType getType() { return type; } - public void setType(CommandType type) { + public void setType(MessageType type) { this.type = type; } @@ -85,11 +85,11 @@ public class Command implements Serializable { this.body = body; } - public CommandContext getContext() { + public MessageContext getContext() { return context; } - public void setContext(CommandContext context) { + public void setContext(MessageContext context) { this.context = context; } @@ -112,7 +112,7 @@ public class Command implements Serializable { if (getClass() != obj.getClass()) { return false; } - Command other = (Command) obj; + Message other = (Message) obj; return opaque == other.opaque; } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandContext.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/MessageContext.java similarity index 89% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandContext.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/MessageContext.java index c9febee6fc..f53a3771a3 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandContext.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/MessageContext.java @@ -26,7 +26,7 @@ import java.util.Map; /** * command context */ -public class CommandContext implements Serializable { +public class MessageContext implements Serializable { private Map items = new LinkedHashMap<>(); @@ -50,7 +50,7 @@ public class CommandContext implements Serializable { return JSONUtils.toJsonByteArray(this); } - public static CommandContext valueOf(byte[] src) { - return JSONUtils.parseObject(src, CommandContext.class); + public static MessageContext valueOf(byte[] src) { + return JSONUtils.parseObject(src, MessageContext.class); } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandHeader.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/MessageHeader.java similarity index 95% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandHeader.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/MessageHeader.java index 32eb75dc90..271b5dec62 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandHeader.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/MessageHeader.java @@ -25,7 +25,7 @@ import lombok.Data; * command header */ @Data -public class CommandHeader implements Serializable { +public class MessageHeader implements Serializable { /** * type diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandType.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/MessageType.java similarity index 90% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandType.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/MessageType.java index 997de50638..7c432a11e7 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandType.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/MessageType.java @@ -17,7 +17,7 @@ package org.apache.dolphinscheduler.remote.command; -public enum CommandType { +public enum MessageType { GET_APP_ID_REQUEST, GET_APP_ID_RESPONSE, @@ -49,27 +49,27 @@ public enum CommandType { /** * dispatch task request */ - TASK_DISPATCH_REQUEST, + TASK_DISPATCH_MESSAGE, /** * task execute running, from worker to master */ - TASK_EXECUTE_RUNNING, + TASK_EXECUTE_RUNNING_MESSAGE, /** * task execute running ack, from master to worker */ - TASK_EXECUTE_RUNNING_ACK, + TASK_EXECUTE_RUNNING_MESSAGE_ACK, /** * task execute response, from worker to master */ - TASK_EXECUTE_RESULT, + TASK_EXECUTE_RESULT_MESSAGE, /** * task execute response ack, from master to worker */ - TASK_EXECUTE_RESULT_ACK, + TASK_EXECUTE_RESULT_MESSAGE_ACK, TASK_KILL_REQUEST, @@ -77,7 +77,7 @@ public enum CommandType { TASK_REJECT, - TASK_REJECT_ACK, + TASK_REJECT_MESSAGE_ACK, /** * task savepoint, for stream task @@ -127,12 +127,12 @@ public enum CommandType { /** * update taskInstance's PID request */ - TASK_UPDATE_PID, + TASK_UPDATE_PID_MESSAGE, /** * update taskInstance's PID response ack, from master to worker */ - TASK_UPDATE_PID_ACK, + TASK_UPDATE_PID__MESSAGE_ACK, /** * workflow executing data response, from master to api diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowMetricsCleanUpCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/RequestMessageBuilder.java similarity index 62% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowMetricsCleanUpCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/RequestMessageBuilder.java index 337bd05333..dc816ec951 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowMetricsCleanUpCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/RequestMessageBuilder.java @@ -17,28 +17,19 @@ package org.apache.dolphinscheduler.remote.command; -import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.utils.JsonSerializer; import java.io.Serializable; -import lombok.Data; +public interface RequestMessageBuilder extends Serializable { -@Data -public class WorkflowMetricsCleanUpCommand implements Serializable { - - private String processDefinitionCode; - - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.WORKFLOW_METRICS_CLEANUP); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + default Message convert2Command() { + Message message = new Message(); + message.setType(getCommandType()); + byte[] body = JsonSerializer.serialize(this); + message.setBody(body); + return message; } + MessageType getCommandType(); } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/ResponseMessageBuilder.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/ResponseMessageBuilder.java new file mode 100644 index 0000000000..3b208a4fcd --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/ResponseMessageBuilder.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.command; + +import org.apache.dolphinscheduler.remote.utils.JsonSerializer; + +import java.io.Serializable; + +public interface ResponseMessageBuilder extends Serializable { + + default Message convert2Command(long opaque) { + Message message = new Message(opaque); + message.setType(getCommandType()); + byte[] body = JsonSerializer.serialize(this); + message.setBody(body); + return message; + } + + MessageType getCommandType(); +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseResult.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/StateEventResponse.java similarity index 73% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseResult.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/StateEventResponse.java index 7b2fd98edd..aa9abca9c1 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseResult.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/StateEventResponse.java @@ -15,21 +15,23 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command.alert; - -import java.io.Serializable; +package org.apache.dolphinscheduler.remote.command; import lombok.AllArgsConstructor; import lombok.Data; -import lombok.NoArgsConstructor; +/** + * db task final result response command + */ @Data -@NoArgsConstructor @AllArgsConstructor -public class AlertSendResponseResult implements Serializable { +public class StateEventResponse implements RequestMessageBuilder { - private boolean success; + private String key; - private String message; + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_RESULT_MESSAGE_ACK; + } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/StateEventResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/StateEventResponseCommand.java deleted file mode 100644 index 6b21e1acd6..0000000000 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/StateEventResponseCommand.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.remote.command; - -import org.apache.dolphinscheduler.common.utils.JSONUtils; - -import java.io.Serializable; - -import lombok.AllArgsConstructor; -import lombok.Data; - -/** - * db task final result response command - */ -@Data -@AllArgsConstructor -public class StateEventResponseCommand implements Serializable { - - private String key; - - /** - * package response command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_EXECUTE_RESULT_ACK); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; - } - -} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskStateEventResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskStateEventResponseCommand.java deleted file mode 100644 index 0a0ba0b012..0000000000 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskStateEventResponseCommand.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.remote.command; - -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; - -import java.io.Serializable; - -public class TaskStateEventResponseCommand implements Serializable { - - private TaskExecutionStatus status; - private String key; - - /** - * package response command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_EXECUTE_RESULT_ACK); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; - } -} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequestCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequest.java similarity index 64% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequestCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequest.java index 5bc4154d9c..68e29f4c28 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequestCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequest.java @@ -17,11 +17,8 @@ package org.apache.dolphinscheduler.remote.command.alert; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.utils.JsonSerializer; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -30,7 +27,7 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class AlertSendRequestCommand implements Serializable { +public class AlertSendRequest implements RequestMessageBuilder { private int groupId; @@ -40,16 +37,8 @@ public class AlertSendRequestCommand implements Serializable { private int warnType; - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.ALERT_SEND_REQUEST); - byte[] body = JsonSerializer.serialize(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.ALERT_SEND_REQUEST; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponse.java similarity index 65% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponse.java index 6d729e7539..452bef5a00 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponse.java @@ -17,9 +17,8 @@ package org.apache.dolphinscheduler.remote.command.alert; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.utils.JsonSerializer; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder; import java.io.Serializable; import java.util.List; @@ -31,7 +30,7 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class AlertSendResponseCommand implements Serializable { +public class AlertSendResponse implements ResponseMessageBuilder { /** * true:All alert are successful, @@ -41,17 +40,19 @@ public class AlertSendResponseCommand implements Serializable { private List resResults; - /** - * package response command - * - * @param opaque request unique identification - * @return command - */ - public Command convert2Command(long opaque) { - Command command = new Command(opaque); - command.setType(CommandType.ALERT_SEND_RESPONSE); - byte[] body = JsonSerializer.serialize(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.ALERT_SEND_RESPONSE; + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class AlertSendResponseResult implements Serializable { + + private boolean success; + + private String message; + } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/cache/CacheExpireRequest.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/cache/CacheExpireRequest.java new file mode 100644 index 0000000000..76c63dd87d --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/cache/CacheExpireRequest.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.command.cache; + +import org.apache.dolphinscheduler.common.enums.CacheType; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CacheExpireRequest implements RequestMessageBuilder { + + private CacheType cacheType; + private String cacheKey; + + @Override + public MessageType getCommandType() { + return MessageType.CACHE_EXPIRE; + } + +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdRequestCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdRequest.java similarity index 67% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdRequestCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdRequest.java index e980143dac..8eebb8a354 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdRequestCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdRequest.java @@ -17,11 +17,8 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -30,18 +27,15 @@ import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor -public class GetAppIdRequestCommand implements Serializable { +public class GetAppIdRequest implements RequestMessageBuilder { private String logPath; private String appInfoPath; - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.GET_APP_ID_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.GET_APP_ID_REQUEST; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdResponse.java similarity index 66% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdResponseCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdResponse.java index 0952cfb1ba..c4f8afa6f0 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdResponseCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetAppIdResponse.java @@ -17,11 +17,9 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder; -import java.io.Serializable; import java.util.List; import lombok.AllArgsConstructor; @@ -31,15 +29,12 @@ import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor -public class GetAppIdResponseCommand implements Serializable { +public class GetAppIdResponse implements ResponseMessageBuilder { private List appIds; - public Command convert2Command(long opaque) { - Command command = new Command(opaque); - command.setType(CommandType.GET_APP_ID_RESPONSE); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.GET_APP_ID_RESPONSE; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequest.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequest.java new file mode 100644 index 0000000000..23916f140a --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequest.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.command.log; + +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * get log bytes request command + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GetLogBytesRequest implements RequestMessageBuilder { + + /** + * log path + */ + private String path; + + @Override + public MessageType getCommandType() { + return MessageType.GET_LOG_BYTES_REQUEST; + } +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestCommand.java deleted file mode 100644 index de73e26861..0000000000 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestCommand.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.remote.command.log; - -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * get log bytes request command - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class GetLogBytesRequestCommand implements Serializable { - - /** - * log path - */ - private String path; - - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.GET_LOG_BYTES_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; - } -} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponse.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponse.java new file mode 100644 index 0000000000..03335ecd95 --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponse.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.command.log; + +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * get log bytes response command + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GetLogBytesResponse implements ResponseMessageBuilder { + + /** + * log byte data + */ + private byte[] data; + + @Override + public MessageType getCommandType() { + return MessageType.GET_LOG_BYTES_RESPONSE; + } + +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponseCommand.java deleted file mode 100644 index 3ba4cf3b58..0000000000 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponseCommand.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.remote.command.log; - -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * get log bytes response command - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class GetLogBytesResponseCommand implements Serializable { - - /** - * log byte data - */ - private byte[] data; - - /** - * package response command - * - * @param opaque request unique identification - * @return command - */ - public Command convert2Command(long opaque) { - Command command = new Command(opaque); - command.setType(CommandType.GET_LOG_BYTES_RESPONSE); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; - } - -} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequest.java similarity index 64% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequest.java index 8dc8f274d8..4c958614ca 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequest.java @@ -17,11 +17,8 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -33,23 +30,15 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class RemoveTaskLogRequestCommand implements Serializable { +public class RemoveTaskLogRequest implements RequestMessageBuilder { /** * log path */ private String path; - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.REMOVE_TAK_LOG_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.REMOVE_TAK_LOG_REQUEST; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponse.java similarity index 62% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponse.java index 6e0ae320a6..332f845796 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponse.java @@ -17,39 +17,28 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** - * remove task log request command + * remove task log request command */ @Data @NoArgsConstructor @AllArgsConstructor -public class RemoveTaskLogResponseCommand implements Serializable { +public class RemoveTaskLogResponse implements ResponseMessageBuilder { /* * TaskPriorityQueueConsumer.* log path */ private Boolean status; - /** - * package request command - * - * @return command - */ - public Command convert2Command(long opaque) { - Command command = new Command(opaque); - command.setType(CommandType.REMOVE_TAK_LOG_RESPONSE); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.REMOVE_TAK_LOG_RESPONSE; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequest.java similarity index 67% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequest.java index e4075f6cf7..2438c3dc58 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequest.java @@ -17,11 +17,8 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -33,7 +30,7 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class RollViewLogRequestCommand implements Serializable { +public class RollViewLogRequest implements RequestMessageBuilder { /** * log path @@ -50,16 +47,8 @@ public class RollViewLogRequestCommand implements Serializable { */ private int limit; - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.ROLL_VIEW_LOG_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.ROLL_VIEW_LOG_REQUEST; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogResponse.java similarity index 62% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogResponseCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogResponse.java index 71be7a0cf3..afd05c85a5 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogResponseCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogResponse.java @@ -17,11 +17,8 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -33,24 +30,15 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class RollViewLogResponseCommand implements Serializable { +public class RollViewLogResponse implements ResponseMessageBuilder { /** * response data */ private String msg; - /** - * package response command - * - * @param opaque request unique identification - * @return command - */ - public Command convert2Command(long opaque) { - Command command = new Command(opaque); - command.setType(CommandType.ROLL_VIEW_LOG_RESPONSE); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.ROLL_VIEW_LOG_RESPONSE; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogRequestCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogRequest.java similarity index 64% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogRequestCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogRequest.java index a4b3c4749b..4a1c48c900 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogRequestCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogRequest.java @@ -17,11 +17,8 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -33,23 +30,15 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class ViewLogRequestCommand implements Serializable { +public class ViewLogRequest implements RequestMessageBuilder { /** * log path */ private String path; - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.VIEW_WHOLE_LOG_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.VIEW_WHOLE_LOG_REQUEST; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogResponseCommand.java deleted file mode 100644 index e9a368ad7c..0000000000 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogResponseCommand.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.remote.command.log; - -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * view log response command - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ViewLogResponseCommand implements Serializable { - - /** - * response data - */ - private String msg; - - /** - * package response command - * - * @param opaque request unique identification - * @return command - */ - public Command convert2Command(long opaque) { - Command command = new Command(opaque); - command.setType(CommandType.VIEW_WHOLE_LOG_RESPONSE); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; - } -} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogResponseResponse.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogResponseResponse.java new file mode 100644 index 0000000000..cedc6a549a --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogResponseResponse.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.command.log; + +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * view log response command + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ViewLogResponseResponse implements ResponseMessageBuilder { + + /** + * response data + */ + private String msg; + + @Override + public MessageType getCommandType() { + return MessageType.VIEW_WHOLE_LOG_RESPONSE; + } +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskDispatchCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskDispatchMessage.java similarity index 76% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskDispatchCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskDispatchMessage.java index bf9abe8c96..ac95891051 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskDispatchCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskDispatchMessage.java @@ -15,10 +15,11 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import lombok.Data; import lombok.EqualsAndHashCode; @@ -32,13 +33,13 @@ import lombok.ToString; @NoArgsConstructor @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class TaskDispatchCommand extends BaseCommand { +public class TaskDispatchMessage extends BaseMessage { private static final long serialVersionUID = -1L; private TaskExecutionContext taskExecutionContext; - public TaskDispatchCommand(TaskExecutionContext taskExecutionContext, + public TaskDispatchMessage(TaskExecutionContext taskExecutionContext, String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { @@ -46,12 +47,9 @@ public class TaskDispatchCommand extends BaseCommand { this.taskExecutionContext = taskExecutionContext; } - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_DISPATCH_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_DISPATCH_MESSAGE; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteResultCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteResultMessage.java similarity index 77% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteResultCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteResultMessage.java index 42d99672e0..5a326a501e 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteResultCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteResultMessage.java @@ -15,9 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import lombok.Data; import lombok.EqualsAndHashCode; @@ -31,9 +32,9 @@ import lombok.ToString; @NoArgsConstructor @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class TaskExecuteResultCommand extends BaseCommand { +public class TaskExecuteResultMessage extends BaseMessage { - public TaskExecuteResultCommand(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { + public TaskExecuteResultMessage(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { super(messageSenderAddress, messageReceiverAddress, messageSendTime); } @@ -92,16 +93,8 @@ public class TaskExecuteResultCommand extends BaseCommand { */ private String varPool; - /** - * package response command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_EXECUTE_RESULT); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_RESULT_MESSAGE; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteAckCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteResultMessageAck.java similarity index 62% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteAckCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteResultMessageAck.java index 4505031a23..109eb1498e 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteAckCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteResultMessageAck.java @@ -15,9 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import lombok.Data; import lombok.EqualsAndHashCode; @@ -32,31 +33,23 @@ import lombok.ToString; @NoArgsConstructor @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class TaskExecuteAckCommand extends BaseCommand { +public class TaskExecuteResultMessageAck extends BaseMessage { private int taskInstanceId; private boolean success; - public TaskExecuteAckCommand(boolean success, - int taskInstanceId, - String sourceServerAddress, - String messageReceiverAddress, - long messageSendTime) { + public TaskExecuteResultMessageAck(boolean success, + int taskInstanceId, + String sourceServerAddress, + String messageReceiverAddress, + long messageSendTime) { super(sourceServerAddress, messageReceiverAddress, messageSendTime); this.success = success; this.taskInstanceId = taskInstanceId; } - /** - * package response command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_EXECUTE_RESULT_ACK); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_RESULT_MESSAGE_ACK; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteRunningCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteRunningMessage.java similarity index 77% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteRunningCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteRunningMessage.java index c02ea64849..9556686bcc 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteRunningCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteRunningMessage.java @@ -15,10 +15,11 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import lombok.Data; import lombok.EqualsAndHashCode; @@ -32,7 +33,7 @@ import lombok.ToString; @NoArgsConstructor @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class TaskExecuteRunningCommand extends BaseCommand { +public class TaskExecuteRunningMessage extends BaseMessage { /** * taskInstanceId @@ -79,21 +80,13 @@ public class TaskExecuteRunningCommand extends BaseCommand { */ private String appIds; - public TaskExecuteRunningCommand(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { + public TaskExecuteRunningMessage(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { super(messageSenderAddress, messageReceiverAddress, messageSendTime); } - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_EXECUTE_RUNNING); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_RUNNING_MESSAGE; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteRunningMessageAck.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteRunningMessageAck.java new file mode 100644 index 0000000000..21733add5b --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteRunningMessageAck.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.command.task; + +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; + +/** + * task execute running ack command + * from master to worker + */ +@Data +@NoArgsConstructor +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class TaskExecuteRunningMessageAck extends BaseMessage { + + private boolean success; + private int taskInstanceId; + + public TaskExecuteRunningMessageAck(boolean success, + int taskInstanceId, + String messageSenderAddress, + String messageReceiverAddress, + long messageSendTime) { + super(messageSenderAddress, messageReceiverAddress, messageSendTime); + this.success = success; + this.taskInstanceId = taskInstanceId; + } + + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_RUNNING_MESSAGE_ACK; + } + +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteStartCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteStartMessage.java similarity index 74% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteStartCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteStartMessage.java index 80f63652eb..5b8530186a 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteStartCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskExecuteStartMessage.java @@ -15,9 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import java.util.Map; @@ -33,7 +34,7 @@ import lombok.ToString; @NoArgsConstructor @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class TaskExecuteStartCommand extends BaseCommand { +public class TaskExecuteStartMessage extends BaseMessage { private int executorId; @@ -57,21 +58,13 @@ public class TaskExecuteStartCommand extends BaseCommand { private int dryRun; - public TaskExecuteStartCommand(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { + public TaskExecuteStartMessage(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { super(messageSenderAddress, messageReceiverAddress, messageSendTime); } - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_EXECUTE_START); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_START; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskEventChangeCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskForceStartRequest.java similarity index 56% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskEventChangeCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskForceStartRequest.java index adfcaa105a..56499065db 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskEventChangeCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskForceStartRequest.java @@ -15,21 +15,19 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; +import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -/** - * db task final result response command - */ @Data @NoArgsConstructor -public class TaskEventChangeCommand implements Serializable { +@AllArgsConstructor +public class TaskForceStartRequest implements RequestMessageBuilder { private String key; @@ -37,28 +35,17 @@ public class TaskEventChangeCommand implements Serializable { private int taskInstanceId; - public TaskEventChangeCommand( - int processInstanceId, - int taskInstanceId) { - this.key = String.format("%d-%d", - processInstanceId, - taskInstanceId); + public TaskForceStartRequest( + int processInstanceId, + int taskInstanceId) { + this.key = String.format("%d-%d", processInstanceId, taskInstanceId); this.processInstanceId = processInstanceId; this.taskInstanceId = taskInstanceId; } - /** - * package response command - * - * @return command - */ - public Command convert2Command(CommandType commandType) { - Command command = new Command(); - command.setType(commandType); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_FORCE_STATE_EVENT_REQUEST; } - } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskKillRequestCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskKillRequest.java similarity index 66% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskKillRequestCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskKillRequest.java index 7dc03d778c..e11ba53a8b 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskKillRequestCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskKillRequest.java @@ -15,11 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -31,23 +30,15 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class TaskKillRequestCommand implements Serializable { +public class TaskKillRequest implements RequestMessageBuilder { /** * task id */ private int taskInstanceId; - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_KILL_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_KILL_REQUEST; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskKillResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskKillResponse.java similarity index 71% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskKillResponseCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskKillResponse.java index 7f92b41543..e99d6c56d5 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskKillResponseCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskKillResponse.java @@ -15,12 +15,12 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder; -import java.io.Serializable; import java.util.List; import lombok.AllArgsConstructor; @@ -35,7 +35,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -public class TaskKillResponseCommand implements Serializable { +public class TaskKillResponse implements ResponseMessageBuilder { private int taskInstanceId; @@ -50,17 +50,8 @@ public class TaskKillResponseCommand implements Serializable { */ private List appIds; - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_KILL_RESPONSE); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_KILL_RESPONSE; } - } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskRejectCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskRejectMessage.java similarity index 72% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskRejectCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskRejectMessage.java index a9ce5c56a7..58ae5b0380 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskRejectCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskRejectMessage.java @@ -15,9 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import lombok.Data; import lombok.EqualsAndHashCode; @@ -31,7 +32,7 @@ import lombok.ToString; @NoArgsConstructor @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class TaskRejectCommand extends BaseCommand { +public class TaskRejectMessage extends BaseMessage { /** * taskInstanceId @@ -48,20 +49,12 @@ public class TaskRejectCommand extends BaseCommand { */ private int processInstanceId; - public TaskRejectCommand(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { + public TaskRejectMessage(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { super(messageSenderAddress, messageReceiverAddress, messageSendTime); } - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_REJECT); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_REJECT; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskRejectAckCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskRejectMessageAck.java similarity index 73% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskRejectAckCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskRejectMessageAck.java index 9fe9edf492..98bab90953 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskRejectAckCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskRejectMessageAck.java @@ -15,9 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import lombok.Data; import lombok.EqualsAndHashCode; @@ -28,12 +29,12 @@ import lombok.ToString; @NoArgsConstructor @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class TaskRejectAckCommand extends BaseCommand { +public class TaskRejectMessageAck extends BaseMessage { private int taskInstanceId; private boolean success; - public TaskRejectAckCommand(boolean success, + public TaskRejectMessageAck(boolean success, int taskInstanceId, String messageSenderAddress, String messageReceiverAddress, @@ -43,17 +44,9 @@ public class TaskRejectAckCommand extends BaseCommand { this.taskInstanceId = taskInstanceId; } - /** - * package response command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_REJECT_ACK); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_REJECT_MESSAGE_ACK; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskSavePointRequestCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskSavePointRequest.java similarity index 66% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskSavePointRequestCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskSavePointRequest.java index 8a1dfae6da..5ea8a4f70b 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskSavePointRequestCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskSavePointRequest.java @@ -15,11 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -31,23 +30,15 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class TaskSavePointRequestCommand implements Serializable { +public class TaskSavePointRequest implements RequestMessageBuilder { /** * task id */ private int taskInstanceId; - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_SAVEPOINT_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_SAVEPOINT_REQUEST; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskSavePointResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskSavePointResponse.java similarity index 66% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskSavePointResponseCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskSavePointResponse.java index 55eb272eb3..9e992787ee 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskSavePointResponseCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskSavePointResponse.java @@ -15,11 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -31,23 +30,15 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class TaskSavePointResponseCommand implements Serializable { +public class TaskSavePointResponse implements RequestMessageBuilder { /** * taskInstanceId */ private int taskInstanceId; - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_SAVEPOINT_RESPONSE); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_SAVEPOINT_RESPONSE; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskUpdatePidAckMessage.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskUpdatePidAckMessage.java similarity index 67% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskUpdatePidAckMessage.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskUpdatePidAckMessage.java index 4f878c5c55..317bcee188 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskUpdatePidAckMessage.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskUpdatePidAckMessage.java @@ -15,11 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Builder; @@ -34,22 +33,14 @@ import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor -public class TaskUpdatePidAckMessage implements Serializable { +public class TaskUpdatePidAckMessage implements RequestMessageBuilder { private boolean success; private int taskInstanceId; - /** - * package response command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_UPDATE_PID_ACK); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_UPDATE_PID__MESSAGE_ACK; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskUpdatePidCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskUpdatePidMessage.java similarity index 74% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskUpdatePidCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskUpdatePidMessage.java index 91e5787bd5..056ad891d6 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskUpdatePidCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskUpdatePidMessage.java @@ -15,9 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import lombok.Data; import lombok.EqualsAndHashCode; @@ -31,7 +32,7 @@ import lombok.ToString; @NoArgsConstructor @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class TaskUpdatePidCommand extends BaseCommand { +public class TaskUpdatePidMessage extends BaseMessage { /** * taskInstanceId @@ -63,21 +64,13 @@ public class TaskUpdatePidCommand extends BaseCommand { */ private int processId; - public TaskUpdatePidCommand(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { + public TaskUpdatePidMessage(String messageSenderAddress, String messageReceiverAddress, long messageSendTime) { super(messageSenderAddress, messageReceiverAddress, messageSendTime); } - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_UPDATE_PID); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.TASK_UPDATE_PID_MESSAGE; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteRunningAckMessage.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskWakeupRequest.java similarity index 56% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteRunningAckMessage.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskWakeupRequest.java index 120867977b..3a21d5b32f 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteRunningAckMessage.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskWakeupRequest.java @@ -15,41 +15,37 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -/** - * task execute running ack command - * from master to worker - */ @Data -@Builder -@AllArgsConstructor @NoArgsConstructor -public class TaskExecuteRunningAckMessage implements Serializable { +@AllArgsConstructor +public class TaskWakeupRequest implements RequestMessageBuilder { + + private String key; + + private int processInstanceId; - private boolean success; private int taskInstanceId; - /** - * package response command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.TASK_EXECUTE_RUNNING_ACK); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + public TaskWakeupRequest( + int processInstanceId, + int taskInstanceId) { + this.key = String.format("%d-%d", processInstanceId, taskInstanceId); + + this.processInstanceId = processInstanceId; + this.taskInstanceId = taskInstanceId; } + @Override + public MessageType getCommandType() { + return MessageType.TASK_WAKEUP_EVENT_REQUEST; + } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/WorkflowHostChangeRequest.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/WorkflowHostChangeRequest.java index 1a480e247f..50b23d40b3 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/WorkflowHostChangeRequest.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/WorkflowHostChangeRequest.java @@ -17,11 +17,8 @@ package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -30,22 +27,14 @@ import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor -public class WorkflowHostChangeRequest implements Serializable { +public class WorkflowHostChangeRequest implements RequestMessageBuilder { private int taskInstanceId; private String workflowHost; - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.WORKFLOW_HOST_CHANGE_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.WORKFLOW_HOST_CHANGE_REQUEST; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/WorkflowHostChangeResponse.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/WorkflowHostChangeResponse.java index 5ce58f2aa2..16acf034cd 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/WorkflowHostChangeResponse.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/WorkflowHostChangeResponse.java @@ -17,11 +17,8 @@ package org.apache.dolphinscheduler.remote.command.task; -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -30,7 +27,7 @@ import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor -public class WorkflowHostChangeResponse implements Serializable { +public class WorkflowHostChangeResponse implements ResponseMessageBuilder { boolean success; @@ -46,11 +43,8 @@ public class WorkflowHostChangeResponse implements Serializable { return response; } - public Command convert2Command(long opaque) { - Command command = new Command(opaque); - command.setType(CommandType.WORKFLOW_HOST_CHANGE_RESPONSE); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.WORKFLOW_HOST_CHANGE_RESPONSE; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowExecutingDataRequestCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowExecutingDataRequest.java similarity index 65% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowExecutingDataRequestCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowExecutingDataRequest.java index 6085322831..9a6285bb0a 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowExecutingDataRequestCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowExecutingDataRequest.java @@ -15,11 +15,10 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.workflow; -import org.apache.dolphinscheduler.common.utils.JSONUtils; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.AllArgsConstructor; import lombok.Data; @@ -31,20 +30,12 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class WorkflowExecutingDataRequestCommand implements Serializable { +public class WorkflowExecutingDataRequest implements RequestMessageBuilder { private Integer processInstanceId; - /** - * package request command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.WORKFLOW_EXECUTING_DATA_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.WORKFLOW_EXECUTING_DATA_REQUEST; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowExecutingDataResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowExecutingDataResponse.java similarity index 66% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowExecutingDataResponseCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowExecutingDataResponse.java index 2d2dfa20b0..adc8a6633a 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowExecutingDataResponseCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowExecutingDataResponse.java @@ -15,13 +15,12 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.workflow; -import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder; import org.apache.dolphinscheduler.remote.dto.WorkflowExecuteDto; -import java.io.Serializable; - import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -32,20 +31,12 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class WorkflowExecutingDataResponseCommand implements Serializable { +public class WorkflowExecutingDataResponse implements ResponseMessageBuilder { private WorkflowExecuteDto workflowExecuteDto; - /** - * package request command - * - * @return command - */ - public Command convert2Command(long opaque) { - Command command = new Command(opaque); - command.setType(CommandType.WORKFLOW_EXECUTING_DATA_RESPONSE); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.WORKFLOW_EXECUTING_DATA_RESPONSE; } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowMetricsCleanUpRequest.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowMetricsCleanUpRequest.java new file mode 100644 index 0000000000..4faf09f123 --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowMetricsCleanUpRequest.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.command.workflow; + +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; + +import lombok.Data; + +@Data +public class WorkflowMetricsCleanUpRequest implements RequestMessageBuilder { + + private String processDefinitionCode; + + @Override + public MessageType getCommandType() { + return MessageType.WORKFLOW_METRICS_CLEANUP; + } +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowStateEventChangeCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowStateEventChangeRequest.java similarity index 77% rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowStateEventChangeCommand.java rename to dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowStateEventChangeRequest.java index def9f663ed..b8b771c84e 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/WorkflowStateEventChangeCommand.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/workflow/WorkflowStateEventChangeRequest.java @@ -15,12 +15,11 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.remote.command; +package org.apache.dolphinscheduler.remote.command.workflow; import org.apache.dolphinscheduler.common.enums.WorkflowExecutionStatus; -import org.apache.dolphinscheduler.common.utils.JSONUtils; - -import java.io.Serializable; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder; import lombok.Data; import lombok.NoArgsConstructor; @@ -30,7 +29,7 @@ import lombok.NoArgsConstructor; */ @Data @NoArgsConstructor -public class WorkflowStateEventChangeCommand implements Serializable { +public class WorkflowStateEventChangeRequest implements RequestMessageBuilder { private String key; @@ -44,7 +43,7 @@ public class WorkflowStateEventChangeCommand implements Serializable { private int destTaskInstanceId; - public WorkflowStateEventChangeCommand(int sourceProcessInstanceId, + public WorkflowStateEventChangeRequest(int sourceProcessInstanceId, int sourceTaskInstanceId, WorkflowExecutionStatus sourceStatus, int destProcessInstanceId, @@ -62,17 +61,8 @@ public class WorkflowStateEventChangeCommand implements Serializable { this.destTaskInstanceId = destTaskInstanceId; } - /** - * package response command - * - * @return command - */ - public Command convert2Command() { - Command command = new Command(); - command.setType(CommandType.STATE_EVENT_REQUEST); - byte[] body = JSONUtils.toJsonByteArray(this); - command.setBody(body); - return command; + @Override + public MessageType getCommandType() { + return MessageType.STATE_EVENT_REQUEST; } - } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/ResponseFuture.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/ResponseFuture.java index c21669cbcf..ea56190d10 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/ResponseFuture.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/ResponseFuture.java @@ -17,7 +17,7 @@ package org.apache.dolphinscheduler.remote.future; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; import java.util.Iterator; import java.util.LinkedList; @@ -64,7 +64,7 @@ public class ResponseFuture { /** * response command */ - private Command responseCommand; + private Message responseMessage; private volatile boolean sendOk = true; @@ -84,18 +84,18 @@ public class ResponseFuture { * * @return command */ - public Command waitResponse() throws InterruptedException { + public Message waitResponse() throws InterruptedException { this.latch.await(timeoutMillis, TimeUnit.MILLISECONDS); - return this.responseCommand; + return this.responseMessage; } /** * put response * - * @param responseCommand responseCommand + * @param responseMessage responseCommand */ - public void putResponse(final Command responseCommand) { - this.responseCommand = responseCommand; + public void putResponse(final Message responseMessage) { + this.responseMessage = responseMessage; this.latch.countDown(); FUTURE_TABLE.remove(opaque); } @@ -155,12 +155,12 @@ public class ResponseFuture { return beginTimestamp; } - public Command getResponseCommand() { - return responseCommand; + public Message getResponseCommand() { + return responseMessage; } - public void setResponseCommand(Command responseCommand) { - this.responseCommand = responseCommand; + public void setResponseCommand(Message responseMessage) { + this.responseMessage = responseMessage; } public InvokeCallback getInvokeCallback() { @@ -210,7 +210,7 @@ public class ResponseFuture { + ", releaseSemaphore=" + releaseSemaphore + ", latch=" + latch + ", beginTimestamp=" + beginTimestamp - + ", responseCommand=" + responseCommand + + ", responseCommand=" + responseMessage + ", sendOk=" + sendOk + ", cause=" + cause + '}'; diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/handler/NettyClientHandler.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/handler/NettyClientHandler.java index b1b9229c58..7dfa37f447 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/handler/NettyClientHandler.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/handler/NettyClientHandler.java @@ -18,8 +18,8 @@ package org.apache.dolphinscheduler.remote.handler; import org.apache.dolphinscheduler.remote.NettyRemotingClient; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.apache.dolphinscheduler.remote.future.ResponseFuture; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.remote.utils.ChannelUtils; @@ -61,7 +61,7 @@ public class NettyClientHandler extends ChannelInboundHandlerAdapter { /** * processors */ - private final ConcurrentHashMap> processors; + private final ConcurrentHashMap> processors; /** * default executor @@ -94,74 +94,74 @@ public class NettyClientHandler extends ChannelInboundHandlerAdapter { */ @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { - processReceived(ctx.channel(), (Command) msg); + processReceived(ctx.channel(), (Message) msg); } /** * register processor * - * @param commandType command type + * @param messageType command type * @param processor processor */ - public void registerProcessor(final CommandType commandType, final NettyRequestProcessor processor) { - this.registerProcessor(commandType, processor, null); + public void registerProcessor(final MessageType messageType, final NettyRequestProcessor processor) { + this.registerProcessor(messageType, processor, null); } /** * register processor * - * @param commandType command type + * @param messageType command type * @param processor processor * @param executor thread executor */ - public void registerProcessor(final CommandType commandType, final NettyRequestProcessor processor, + public void registerProcessor(final MessageType messageType, final NettyRequestProcessor processor, final ExecutorService executor) { ExecutorService executorRef = executor; if (executorRef == null) { executorRef = defaultExecutor; } - this.processors.putIfAbsent(commandType, new Pair<>(processor, executorRef)); + this.processors.putIfAbsent(messageType, new Pair<>(processor, executorRef)); } /** * process received logic * - * @param command command + * @param message command */ - private void processReceived(final Channel channel, final Command command) { - ResponseFuture future = ResponseFuture.getFuture(command.getOpaque()); + private void processReceived(final Channel channel, final Message message) { + ResponseFuture future = ResponseFuture.getFuture(message.getOpaque()); if (future != null) { - future.setResponseCommand(command); + future.setResponseCommand(message); future.release(); if (future.getInvokeCallback() != null) { future.removeFuture(); this.callbackExecutor.submit(future::executeInvokeCallback); } else { - future.putResponse(command); + future.putResponse(message); } } else { - processByCommandType(channel, command); + processByCommandType(channel, message); } } - public void processByCommandType(final Channel channel, final Command command) { - final Pair pair = processors.get(command.getType()); + public void processByCommandType(final Channel channel, final Message message) { + final Pair pair = processors.get(message.getType()); if (pair != null) { Runnable run = () -> { try { - pair.getLeft().process(channel, command); + pair.getLeft().process(channel, message); } catch (Exception e) { - log.error(String.format("process command %s exception", command), e); + log.error(String.format("process command %s exception", message), e); } }; try { pair.getRight().submit(run); } catch (RejectedExecutionException e) { - log.warn("thread pool is full, discard command {} from {}", command, + log.warn("thread pool is full, discard command {} from {}", message, ChannelUtils.getRemoteAddress(channel)); } } else { - log.warn("receive response {}, but not matched any request ", command); + log.warn("receive response {}, but not matched any request ", message); } } @@ -181,8 +181,8 @@ public class NettyClientHandler extends ChannelInboundHandlerAdapter { @Override public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { if (evt instanceof IdleStateEvent) { - Command heartBeat = new Command(); - heartBeat.setType(CommandType.HEART_BEAT); + Message heartBeat = new Message(); + heartBeat.setType(MessageType.HEART_BEAT); heartBeat.setBody(heartBeatData); ctx.channel().writeAndFlush(heartBeat) .addListener(ChannelFutureListener.CLOSE_ON_FAILURE); diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/handler/NettyServerHandler.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/handler/NettyServerHandler.java index 103e27dc89..788c593ba3 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/handler/NettyServerHandler.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/handler/NettyServerHandler.java @@ -18,8 +18,8 @@ package org.apache.dolphinscheduler.remote.handler; import org.apache.dolphinscheduler.remote.NettyRemotingServer; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.remote.utils.ChannelUtils; import org.apache.dolphinscheduler.remote.utils.Pair; @@ -51,7 +51,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { /** * server processors queue */ - private final ConcurrentHashMap> processors = + private final ConcurrentHashMap> processors = new ConcurrentHashMap<>(); public NettyServerHandler(NettyRemotingServer nettyRemotingServer) { @@ -77,33 +77,33 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { */ @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { - processReceived(ctx.channel(), (Command) msg); + processReceived(ctx.channel(), (Message) msg); } /** * register processor * - * @param commandType command type + * @param messageType command type * @param processor processor */ - public void registerProcessor(final CommandType commandType, final NettyRequestProcessor processor) { - this.registerProcessor(commandType, processor, null); + public void registerProcessor(final MessageType messageType, final NettyRequestProcessor processor) { + this.registerProcessor(messageType, processor, null); } /** * register processor * - * @param commandType command type + * @param messageType command type * @param processor processor * @param executor thread executor */ - public void registerProcessor(final CommandType commandType, final NettyRequestProcessor processor, + public void registerProcessor(final MessageType messageType, final NettyRequestProcessor processor, final ExecutorService executor) { ExecutorService executorRef = executor; if (executorRef == null) { executorRef = nettyRemotingServer.getDefaultExecutor(); } - this.processors.putIfAbsent(commandType, new Pair<>(processor, executorRef)); + this.processors.putIfAbsent(messageType, new Pair<>(processor, executorRef)); } /** @@ -112,15 +112,15 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { * @param channel channel * @param msg message */ - private void processReceived(final Channel channel, final Command msg) { - final CommandType commandType = msg.getType(); - if (CommandType.HEART_BEAT.equals(commandType)) { + private void processReceived(final Channel channel, final Message msg) { + final MessageType messageType = msg.getType(); + if (MessageType.HEART_BEAT.equals(messageType)) { if (log.isDebugEnabled()) { log.debug("server receive heart beat from: host: {}", ChannelUtils.getRemoteAddress(channel)); } return; } - final Pair pair = processors.get(commandType); + final Pair pair = processors.get(messageType); if (pair != null) { Runnable r = () -> { try { @@ -135,7 +135,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { log.warn("thread pool is full, discard msg {} from {}", msg, ChannelUtils.getRemoteAddress(channel)); } } else { - log.warn("commandType {} not support", commandType); + log.warn("commandType {} not support", messageType); } } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/BaseLogProcessor.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/BaseLogProcessor.java new file mode 100644 index 0000000000..d5b5af49bc --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/BaseLogProcessor.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.processor; + +import org.apache.dolphinscheduler.common.log.remote.RemoteLogUtils; +import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public abstract class BaseLogProcessor { + + /** + * get files content bytes for download file + * + * @param filePath file path + * @return byte array of file + */ + protected byte[] getFileContentBytesFromLocal(String filePath) { + try ( + InputStream in = new FileInputStream(filePath); + ByteArrayOutputStream bos = new ByteArrayOutputStream()) { + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) != -1) { + bos.write(buf, 0, len); + } + return bos.toByteArray(); + } catch (IOException e) { + log.error("get file bytes error", e); + } + return new byte[0]; + } + + protected byte[] getFileContentBytesFromRemote(String filePath) { + RemoteLogUtils.getRemoteLog(filePath); + return getFileContentBytesFromLocal(filePath); + } + + protected byte[] getFileContentBytes(String filePath) { + File file = new File(filePath); + if (file.exists()) { + return getFileContentBytesFromLocal(filePath); + } + if (RemoteLogUtils.isRemoteLoggingEnable()) { + return getFileContentBytesFromRemote(filePath); + } + return getFileContentBytesFromLocal(filePath); + } + + /** + * read part file content,can skip any line and read some lines + * + * @param filePath file path + * @param skipLine skip line + * @param limit read lines limit + * @return part file content + */ + protected List readPartFileContentFromLocal(String filePath, + int skipLine, + int limit) { + File file = new File(filePath); + if (file.exists() && file.isFile()) { + try (Stream stream = Files.lines(Paths.get(filePath))) { + return stream.skip(skipLine).limit(limit).collect(Collectors.toList()); + } catch (IOException e) { + log.error("read file error", e); + throw new RuntimeException(String.format("Read file: %s error", filePath), e); + } + } else { + throw new RuntimeException("The file path: " + filePath + " not exists"); + } + } + + protected List readPartFileContentFromRemote(String filePath, + int skipLine, + int limit) { + RemoteLogUtils.getRemoteLog(filePath); + return readPartFileContentFromLocal(filePath, skipLine, limit); + } + + protected List readPartFileContent(String filePath, + int skipLine, + int limit) { + File file = new File(filePath); + if (file.exists()) { + return readPartFileContentFromLocal(filePath, skipLine, limit); + } + if (RemoteLogUtils.isRemoteLoggingEnable()) { + return readPartFileContentFromRemote(filePath, skipLine, limit); + } + return readPartFileContentFromLocal(filePath, skipLine, limit); + } + + protected String readWholeFileContentFromRemote(String filePath) { + RemoteLogUtils.getRemoteLog(filePath); + return LogUtils.readWholeFileContentFromLocal(filePath); + } + + protected String readWholeFileContent(String filePath) { + File file = new File(filePath); + if (file.exists()) { + return LogUtils.readWholeFileContentFromLocal(filePath); + } + if (RemoteLogUtils.isRemoteLoggingEnable()) { + return readWholeFileContentFromRemote(filePath); + } + return LogUtils.readWholeFileContentFromLocal(filePath); + } + +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/GetAppIdProcessor.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/GetAppIdProcessor.java new file mode 100644 index 0000000000..6c446aacb1 --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/GetAppIdProcessor.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.processor; + +import static org.apache.dolphinscheduler.common.constants.Constants.APPID_COLLECT; +import static org.apache.dolphinscheduler.common.constants.Constants.DEFAULT_COLLECT_WAY; + +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.common.utils.PropertyUtils; +import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.log.GetAppIdRequest; +import org.apache.dolphinscheduler.remote.command.log.GetAppIdResponse; + +import java.util.List; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.stereotype.Component; + +import io.netty.channel.Channel; + +@Component +@Slf4j +public class GetAppIdProcessor extends BaseLogProcessor implements NettyRequestProcessor { + + @Override + public void process(Channel channel, Message message) { + GetAppIdRequest getAppIdRequest = + JSONUtils.parseObject(message.getBody(), GetAppIdRequest.class); + String appInfoPath = getAppIdRequest.getAppInfoPath(); + String logPath = getAppIdRequest.getLogPath(); + List appIds = LogUtils.getAppIds(logPath, appInfoPath, + PropertyUtils.getString(APPID_COLLECT, DEFAULT_COLLECT_WAY)); + channel.writeAndFlush( + new GetAppIdResponse(appIds).convert2Command(message.getOpaque())); + } + + @Override + public MessageType getCommandType() { + return MessageType.GET_APP_ID_REQUEST; + } +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/GetLogBytesProcessor.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/GetLogBytesProcessor.java new file mode 100644 index 0000000000..19401e35c4 --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/GetLogBytesProcessor.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.processor; + +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.log.GetLogBytesRequest; +import org.apache.dolphinscheduler.remote.command.log.GetLogBytesResponse; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.stereotype.Component; + +import io.netty.channel.Channel; + +@Component +@Slf4j +public class GetLogBytesProcessor extends BaseLogProcessor implements NettyRequestProcessor { + + @Override + public void process(Channel channel, Message message) { + GetLogBytesRequest getLogRequest = JSONUtils.parseObject( + message.getBody(), GetLogBytesRequest.class); + String path = getLogRequest.getPath(); + byte[] bytes = getFileContentBytes(path); + GetLogBytesResponse getLogResponse = new GetLogBytesResponse(bytes); + channel.writeAndFlush(getLogResponse.convert2Command(message.getOpaque())); + } + + @Override + public MessageType getCommandType() { + return MessageType.GET_LOG_BYTES_REQUEST; + } +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/LoggerRequestProcessor.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/LoggerRequestProcessor.java deleted file mode 100644 index ff16ae253d..0000000000 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/LoggerRequestProcessor.java +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.remote.processor; - -import static org.apache.dolphinscheduler.common.constants.Constants.APPID_COLLECT; -import static org.apache.dolphinscheduler.common.constants.Constants.DEFAULT_COLLECT_WAY; - -import org.apache.dolphinscheduler.common.log.remote.RemoteLogUtils; -import org.apache.dolphinscheduler.common.utils.JSONUtils; -import org.apache.dolphinscheduler.common.utils.PropertyUtils; -import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.log.GetAppIdRequestCommand; -import org.apache.dolphinscheduler.remote.command.log.GetAppIdResponseCommand; -import org.apache.dolphinscheduler.remote.command.log.GetLogBytesRequestCommand; -import org.apache.dolphinscheduler.remote.command.log.GetLogBytesResponseCommand; -import org.apache.dolphinscheduler.remote.command.log.RemoveTaskLogRequestCommand; -import org.apache.dolphinscheduler.remote.command.log.RemoveTaskLogResponseCommand; -import org.apache.dolphinscheduler.remote.command.log.RollViewLogRequestCommand; -import org.apache.dolphinscheduler.remote.command.log.RollViewLogResponseCommand; -import org.apache.dolphinscheduler.remote.command.log.ViewLogRequestCommand; -import org.apache.dolphinscheduler.remote.command.log.ViewLogResponseCommand; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import lombok.extern.slf4j.Slf4j; - -import org.springframework.stereotype.Component; - -import io.netty.channel.Channel; - -/** - * logger request process logic - */ -@Component -@Slf4j -public class LoggerRequestProcessor implements NettyRequestProcessor { - - @Override - public void process(Channel channel, Command command) { - log.info("received command : {}", command); - - // request task log command type - final CommandType commandType = command.getType(); - switch (commandType) { - case GET_LOG_BYTES_REQUEST: - GetLogBytesRequestCommand getLogRequest = JSONUtils.parseObject( - command.getBody(), GetLogBytesRequestCommand.class); - String path = getLogRequest.getPath(); - byte[] bytes = getFileContentBytes(path); - GetLogBytesResponseCommand getLogResponse = new GetLogBytesResponseCommand(bytes); - channel.writeAndFlush(getLogResponse.convert2Command(command.getOpaque())); - break; - case VIEW_WHOLE_LOG_REQUEST: - ViewLogRequestCommand viewLogRequest = JSONUtils.parseObject( - command.getBody(), ViewLogRequestCommand.class); - String viewLogPath = viewLogRequest.getPath(); - String msg = readWholeFileContent(viewLogPath); - ViewLogResponseCommand viewLogResponse = new ViewLogResponseCommand(msg); - channel.writeAndFlush(viewLogResponse.convert2Command(command.getOpaque())); - break; - case ROLL_VIEW_LOG_REQUEST: - RollViewLogRequestCommand rollViewLogRequest = JSONUtils.parseObject( - command.getBody(), RollViewLogRequestCommand.class); - - String rollViewLogPath = rollViewLogRequest.getPath(); - - List lines = readPartFileContent(rollViewLogPath, - rollViewLogRequest.getSkipLineNum(), rollViewLogRequest.getLimit()); - StringBuilder builder = new StringBuilder(); - final int MaxResponseLogSize = 65535; - int totalLogByteSize = 0; - for (String line : lines) { - // If a single line of log is exceed max response size, cut off the line - final int lineByteSize = line.getBytes(StandardCharsets.UTF_8).length; - if (lineByteSize >= MaxResponseLogSize) { - builder.append(line, 0, MaxResponseLogSize) - .append(" [this line's size ").append(lineByteSize).append(" bytes is exceed ") - .append(MaxResponseLogSize).append(" bytes, so only ") - .append(MaxResponseLogSize).append(" characters are reserved for performance reasons.]") - .append("\r\n"); - } else { - builder.append(line).append("\r\n"); - } - totalLogByteSize += lineByteSize; - if (totalLogByteSize >= MaxResponseLogSize) { - break; - } - } - RollViewLogResponseCommand rollViewLogRequestResponse = - new RollViewLogResponseCommand(builder.toString()); - channel.writeAndFlush(rollViewLogRequestResponse.convert2Command(command.getOpaque())); - break; - case REMOVE_TAK_LOG_REQUEST: - RemoveTaskLogRequestCommand removeTaskLogRequest = JSONUtils.parseObject( - command.getBody(), RemoveTaskLogRequestCommand.class); - - String taskLogPath = removeTaskLogRequest.getPath(); - File taskLogFile = new File(taskLogPath); - boolean status = true; - try { - if (taskLogFile.exists()) { - status = taskLogFile.delete(); - } - } catch (Exception e) { - status = false; - } - - RemoveTaskLogResponseCommand removeTaskLogResponse = new RemoveTaskLogResponseCommand(status); - channel.writeAndFlush(removeTaskLogResponse.convert2Command(command.getOpaque())); - break; - case GET_APP_ID_REQUEST: - GetAppIdRequestCommand getAppIdRequestCommand = - JSONUtils.parseObject(command.getBody(), GetAppIdRequestCommand.class); - String appInfoPath = getAppIdRequestCommand.getAppInfoPath(); - String logPath = getAppIdRequestCommand.getLogPath(); - List appIds = LogUtils.getAppIds(logPath, appInfoPath, - PropertyUtils.getString(APPID_COLLECT, DEFAULT_COLLECT_WAY)); - channel.writeAndFlush( - new GetAppIdResponseCommand(appIds).convert2Command(command.getOpaque())); - break; - default: - throw new IllegalArgumentException("unknown commandType: " + commandType); - } - } - - /** - * get files content bytes for download file - * - * @param filePath file path - * @return byte array of file - */ - private byte[] getFileContentBytesFromLocal(String filePath) { - try ( - InputStream in = new FileInputStream(filePath); - ByteArrayOutputStream bos = new ByteArrayOutputStream()) { - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) != -1) { - bos.write(buf, 0, len); - } - return bos.toByteArray(); - } catch (IOException e) { - log.error("get file bytes error", e); - } - return new byte[0]; - } - - private byte[] getFileContentBytesFromRemote(String filePath) { - RemoteLogUtils.getRemoteLog(filePath); - return getFileContentBytesFromLocal(filePath); - } - - private byte[] getFileContentBytes(String filePath) { - File file = new File(filePath); - if (file.exists()) { - return getFileContentBytesFromLocal(filePath); - } - if (RemoteLogUtils.isRemoteLoggingEnable()) { - return getFileContentBytesFromRemote(filePath); - } - return getFileContentBytesFromLocal(filePath); - } - - /** - * read part file content,can skip any line and read some lines - * - * @param filePath file path - * @param skipLine skip line - * @param limit read lines limit - * @return part file content - */ - private List readPartFileContentFromLocal(String filePath, - int skipLine, - int limit) { - File file = new File(filePath); - if (file.exists() && file.isFile()) { - try (Stream stream = Files.lines(Paths.get(filePath))) { - return stream.skip(skipLine).limit(limit).collect(Collectors.toList()); - } catch (IOException e) { - log.error("read file error", e); - throw new RuntimeException(String.format("Read file: %s error", filePath), e); - } - } else { - throw new RuntimeException("The file path: " + filePath + " not exists"); - } - } - - private List readPartFileContentFromRemote(String filePath, - int skipLine, - int limit) { - RemoteLogUtils.getRemoteLog(filePath); - return readPartFileContentFromLocal(filePath, skipLine, limit); - } - - private List readPartFileContent(String filePath, - int skipLine, - int limit) { - File file = new File(filePath); - if (file.exists()) { - return readPartFileContentFromLocal(filePath, skipLine, limit); - } - if (RemoteLogUtils.isRemoteLoggingEnable()) { - return readPartFileContentFromRemote(filePath, skipLine, limit); - } - return readPartFileContentFromLocal(filePath, skipLine, limit); - } - - private String readWholeFileContentFromRemote(String filePath) { - RemoteLogUtils.getRemoteLog(filePath); - return LogUtils.readWholeFileContentFromLocal(filePath); - } - - private String readWholeFileContent(String filePath) { - File file = new File(filePath); - if (file.exists()) { - return LogUtils.readWholeFileContentFromLocal(filePath); - } - if (RemoteLogUtils.isRemoteLoggingEnable()) { - return readWholeFileContentFromRemote(filePath); - } - return LogUtils.readWholeFileContentFromLocal(filePath); - } - -} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/NettyRemoteChannel.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/NettyRemoteChannel.java index 4609c6d239..e4f7173f64 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/NettyRemoteChannel.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/NettyRemoteChannel.java @@ -17,7 +17,7 @@ package org.apache.dolphinscheduler.remote.processor; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; import org.apache.dolphinscheduler.remote.utils.ChannelUtils; import org.apache.dolphinscheduler.remote.utils.Host; @@ -72,8 +72,8 @@ public class NettyRemoteChannel { return this.channel.isActive(); } - public ChannelFuture writeAndFlush(Command command) { - return this.channel.writeAndFlush(command); + public ChannelFuture writeAndFlush(Message message) { + return this.channel.writeAndFlush(message); } public void close() { diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/NettyRequestProcessor.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/NettyRequestProcessor.java index d3e37f02ee..d731eddd60 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/NettyRequestProcessor.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/NettyRequestProcessor.java @@ -16,7 +16,8 @@ */ package org.apache.dolphinscheduler.remote.processor; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; import io.netty.channel.Channel; @@ -28,7 +29,9 @@ public interface NettyRequestProcessor { /** * process logic * @param channel channel - * @param command command + * @param message command */ - void process(final Channel channel, final Command command); + void process(final Channel channel, final Message message); + + MessageType getCommandType(); } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/RemoveTaskLogProcessor.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/RemoveTaskLogProcessor.java new file mode 100644 index 0000000000..e52366ada1 --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/RemoveTaskLogProcessor.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.processor; + +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.log.RemoveTaskLogRequest; +import org.apache.dolphinscheduler.remote.command.log.RemoveTaskLogResponse; + +import java.io.File; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.stereotype.Component; + +import io.netty.channel.Channel; + +@Component +@Slf4j +public class RemoveTaskLogProcessor extends BaseLogProcessor implements NettyRequestProcessor { + + @Override + public void process(Channel channel, Message message) { + RemoveTaskLogRequest removeTaskLogRequest = JSONUtils.parseObject( + message.getBody(), RemoveTaskLogRequest.class); + + String taskLogPath = removeTaskLogRequest.getPath(); + File taskLogFile = new File(taskLogPath); + boolean status = true; + try { + if (taskLogFile.exists()) { + status = taskLogFile.delete(); + } + } catch (Exception e) { + status = false; + } + + RemoveTaskLogResponse removeTaskLogResponse = new RemoveTaskLogResponse(status); + channel.writeAndFlush(removeTaskLogResponse.convert2Command(message.getOpaque())); + } + + @Override + public MessageType getCommandType() { + return MessageType.REMOVE_TAK_LOG_REQUEST; + } +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/RollViewLogRequest.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/RollViewLogRequest.java new file mode 100644 index 0000000000..beeb7ec429 --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/RollViewLogRequest.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.processor; + +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.log.RollViewLogResponse; + +import java.nio.charset.StandardCharsets; +import java.util.List; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.stereotype.Component; + +import io.netty.channel.Channel; + +@Component +@Slf4j +public class RollViewLogRequest extends BaseLogProcessor implements NettyRequestProcessor { + + @Override + public void process(Channel channel, Message message) { + org.apache.dolphinscheduler.remote.command.log.RollViewLogRequest rollViewLogRequest = JSONUtils.parseObject( + message.getBody(), org.apache.dolphinscheduler.remote.command.log.RollViewLogRequest.class); + + String rollViewLogPath = rollViewLogRequest.getPath(); + + List lines = readPartFileContent(rollViewLogPath, + rollViewLogRequest.getSkipLineNum(), rollViewLogRequest.getLimit()); + StringBuilder builder = new StringBuilder(); + final int MaxResponseLogSize = 65535; + int totalLogByteSize = 0; + for (String line : lines) { + // If a single line of log is exceed max response size, cut off the line + final int lineByteSize = line.getBytes(StandardCharsets.UTF_8).length; + if (lineByteSize >= MaxResponseLogSize) { + builder.append(line, 0, MaxResponseLogSize) + .append(" [this line's size ").append(lineByteSize).append(" bytes is exceed ") + .append(MaxResponseLogSize).append(" bytes, so only ") + .append(MaxResponseLogSize).append(" characters are reserved for performance reasons.]") + .append("\r\n"); + } else { + builder.append(line).append("\r\n"); + } + totalLogByteSize += lineByteSize; + if (totalLogByteSize >= MaxResponseLogSize) { + break; + } + } + RollViewLogResponse rollViewLogRequestResponse = + new RollViewLogResponse(builder.toString()); + channel.writeAndFlush(rollViewLogRequestResponse.convert2Command(message.getOpaque())); + } + + @Override + public MessageType getCommandType() { + return MessageType.ROLL_VIEW_LOG_REQUEST; + } +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/StateEventCallbackService.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/StateEventCallbackService.java index 3ecd1d51e1..bd2fbcaf2c 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/StateEventCallbackService.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/StateEventCallbackService.java @@ -21,7 +21,7 @@ import static org.apache.dolphinscheduler.common.constants.Constants.HTTP_CONNEC import static org.apache.dolphinscheduler.common.constants.Constants.SLEEP_TIME_MILLIS; import org.apache.dolphinscheduler.remote.NettyRemotingClient; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; import org.apache.dolphinscheduler.remote.config.NettyClientConfig; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import org.apache.dolphinscheduler.remote.utils.Host; @@ -116,31 +116,31 @@ public class StateEventCallbackService { * Send the command to target host, this method doesn't guarantee the command send success. * * @param host target host - * @param command command need to send + * @param message command need to send */ - public void sendResult(Host host, Command command) { - log.info("send result, host:{}, command:{}", host.getAddress(), command.toString()); + public void sendResult(Host host, Message message) { + log.info("send result, host:{}, command:{}", host.getAddress(), message.toString()); newRemoteChannel(host).ifPresent(nettyRemoteChannel -> { - nettyRemoteChannel.writeAndFlush(command); + nettyRemoteChannel.writeAndFlush(message); }); } /** * send sync and return response command * @param host - * @param requestCommand + * @param requestMessage * @return * @throws RemotingException * @throws InterruptedException */ - public Command sendSync(Host host, Command requestCommand) { + public Message sendSync(Host host, Message requestMessage) { try { - return this.nettyRemotingClient.sendSync(host, requestCommand, HTTP_CONNECTION_REQUEST_TIMEOUT); + return this.nettyRemotingClient.sendSync(host, requestMessage, HTTP_CONNECTION_REQUEST_TIMEOUT); } catch (InterruptedException e) { - log.error("send sync fail, host:{}, command:{}", host, requestCommand, e); + log.error("send sync fail, host:{}, command:{}", host, requestMessage, e); Thread.currentThread().interrupt(); } catch (RemotingException e) { - log.error("send sync fail, host:{}, command:{}", host, requestCommand, e); + log.error("send sync fail, host:{}, command:{}", host, requestMessage, e); } finally { this.nettyRemotingClient.closeChannel(host); } diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/ViewWholeLogProcessor.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/ViewWholeLogProcessor.java new file mode 100644 index 0000000000..3de446690b --- /dev/null +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/ViewWholeLogProcessor.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.processor; + +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.log.ViewLogRequest; +import org.apache.dolphinscheduler.remote.command.log.ViewLogResponseResponse; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.stereotype.Component; + +import io.netty.channel.Channel; + +@Component +@Slf4j +public class ViewWholeLogProcessor extends BaseLogProcessor implements NettyRequestProcessor { + + @Override + public void process(Channel channel, Message message) { + ViewLogRequest viewLogRequest = JSONUtils.parseObject( + message.getBody(), ViewLogRequest.class); + String viewLogPath = viewLogRequest.getPath(); + String msg = readWholeFileContent(viewLogPath); + ViewLogResponseResponse viewLogResponse = new ViewLogResponseResponse(msg); + channel.writeAndFlush(viewLogResponse.convert2Command(message.getOpaque())); + } + + @Override + public MessageType getCommandType() { + return MessageType.VIEW_WHOLE_LOG_REQUEST; + } +} diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/JsonSerializer.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/JsonSerializer.java index 193c8ae605..da3db257a6 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/JsonSerializer.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/JsonSerializer.java @@ -17,13 +17,26 @@ package org.apache.dolphinscheduler.remote.utils; +import static com.fasterxml.jackson.databind.DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT; +import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; +import static com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL; +import static com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS; +import static org.apache.dolphinscheduler.common.constants.DateConstants.YYYY_MM_DD_HH_MM_SS; + +import org.apache.dolphinscheduler.common.utils.JSONUtils; + import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.util.TimeZone; import lombok.extern.slf4j.Slf4j; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; /** * json serialize or deserialize @@ -31,7 +44,18 @@ import com.fasterxml.jackson.databind.ObjectMapper; @Slf4j public class JsonSerializer { - private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final ObjectMapper objectMapper = JsonMapper.builder() + .configure(FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true) + .configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true) + .configure(REQUIRE_SETTERS_FOR_GETTERS, true) + .addModule(new SimpleModule() + .addSerializer(LocalDateTime.class, new JSONUtils.LocalDateTimeSerializer()) + .addDeserializer(LocalDateTime.class, new JSONUtils.LocalDateTimeDeserializer())) + .defaultTimeZone(TimeZone.getDefault()) + .defaultDateFormat(new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS)) + .build(); + private JsonSerializer() { } diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/NettyRemotingClientTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/NettyRemotingClientTest.java index ac8f9ac9aa..3c44e490b1 100644 --- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/NettyRemotingClientTest.java +++ b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/NettyRemotingClientTest.java @@ -17,8 +17,8 @@ package org.apache.dolphinscheduler.remote; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.apache.dolphinscheduler.remote.config.NettyClientConfig; import org.apache.dolphinscheduler.remote.config.NettyServerConfig; import org.apache.dolphinscheduler.remote.future.InvokeCallback; @@ -50,11 +50,16 @@ public class NettyRemotingClientTest { NettyServerConfig serverConfig = new NettyServerConfig(); NettyRemotingServer server = new NettyRemotingServer(serverConfig); - server.registerProcessor(CommandType.PING, new NettyRequestProcessor() { + server.registerProcessor(new NettyRequestProcessor() { @Override - public void process(Channel channel, Command command) { - channel.writeAndFlush(Pong.create(command.getOpaque())); + public void process(Channel channel, Message message) { + channel.writeAndFlush(Pong.create(message.getOpaque())); + } + + @Override + public MessageType getCommandType() { + return MessageType.PING; } }); @@ -62,10 +67,10 @@ public class NettyRemotingClientTest { // final NettyClientConfig clientConfig = new NettyClientConfig(); NettyRemotingClient client = new NettyRemotingClient(clientConfig); - Command commandPing = Ping.create(); + Message messagePing = Ping.create(); try { - Command response = client.sendSync(new Host("127.0.0.1", serverConfig.getListenPort()), commandPing, 2000); - Assertions.assertEquals(commandPing.getOpaque(), response.getOpaque()); + Message response = client.sendSync(new Host("127.0.0.1", serverConfig.getListenPort()), messagePing, 2000); + Assertions.assertEquals(messagePing.getOpaque(), response.getOpaque()); } catch (Exception e) { e.printStackTrace(); } @@ -81,11 +86,16 @@ public class NettyRemotingClientTest { NettyServerConfig serverConfig = new NettyServerConfig(); NettyRemotingServer server = new NettyRemotingServer(serverConfig); - server.registerProcessor(CommandType.PING, new NettyRequestProcessor() { + server.registerProcessor(new NettyRequestProcessor() { + + @Override + public void process(Channel channel, Message message) { + channel.writeAndFlush(Pong.create(message.getOpaque())); + } @Override - public void process(Channel channel, Command command) { - channel.writeAndFlush(Pong.create(command.getOpaque())); + public MessageType getCommandType() { + return MessageType.PING; } }); server.start(); @@ -93,10 +103,10 @@ public class NettyRemotingClientTest { final NettyClientConfig clientConfig = new NettyClientConfig(); NettyRemotingClient client = new NettyRemotingClient(clientConfig); CountDownLatch latch = new CountDownLatch(1); - Command commandPing = Ping.create(); + Message messagePing = Ping.create(); try { final AtomicLong opaque = new AtomicLong(0); - client.sendAsync(new Host("127.0.0.1", serverConfig.getListenPort()), commandPing, 2000, + client.sendAsync(new Host("127.0.0.1", serverConfig.getListenPort()), messagePing, 2000, new InvokeCallback() { @Override @@ -106,7 +116,7 @@ public class NettyRemotingClientTest { } }); latch.await(); - Assertions.assertEquals(commandPing.getOpaque(), opaque.get()); + Assertions.assertEquals(messagePing.getOpaque(), opaque.get()); } catch (Exception e) { e.printStackTrace(); } @@ -130,8 +140,8 @@ public class NettyRemotingClientTest { static { ByteBuf ping = Unpooled.buffer(); - ping.writeByte(Command.MAGIC); - ping.writeByte(CommandType.PING.ordinal()); + ping.writeByte(Message.MAGIC); + ping.writeByte(MessageType.PING.ordinal()); ping.writeLong(0); ping.writeInt(0); ping.writeBytes(EMPTY_BODY); @@ -152,11 +162,11 @@ public class NettyRemotingClientTest { * * @return command */ - public static Command create() { - Command command = new Command(); - command.setType(CommandType.PING); - command.setBody(EMPTY_BODY_ARRAY); - return command; + public static Message create() { + Message message = new Message(); + message.setType(MessageType.PING); + message.setBody(EMPTY_BODY_ARRAY); + return message; } } @@ -179,8 +189,8 @@ public class NettyRemotingClientTest { static { ByteBuf ping = Unpooled.buffer(); - ping.writeByte(Command.MAGIC); - ping.writeByte(CommandType.PONG.ordinal()); + ping.writeByte(Message.MAGIC); + ping.writeByte(MessageType.PONG.ordinal()); ping.writeLong(0); ping.writeInt(0); ping.writeBytes(EMPTY_BODY); @@ -202,11 +212,11 @@ public class NettyRemotingClientTest { * @param opaque request unique identification * @return command */ - public static Command create(long opaque) { - Command command = new Command(opaque); - command.setType(CommandType.PONG); - command.setBody(EMPTY_BODY_ARRAY); - return command; + public static Message create(long opaque) { + Message message = new Message(opaque); + message.setType(MessageType.PONG); + message.setBody(EMPTY_BODY_ARRAY); + return message; } } } diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequestCommandTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequestTest.java similarity index 70% rename from dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequestCommandTest.java rename to dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequestTest.java index e0c3e20e90..affc08028d 100644 --- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequestCommandTest.java +++ b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequestTest.java @@ -18,24 +18,24 @@ package org.apache.dolphinscheduler.remote.command.alert; import org.apache.dolphinscheduler.common.enums.WarningType; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -public class AlertSendRequestCommandTest { +public class AlertSendRequestTest { @Test public void testConvert2Command() { int groupId = 1; String title = "test-title"; String content = "test-content"; - AlertSendRequestCommand requestCommand = - new AlertSendRequestCommand(groupId, title, content, WarningType.FAILURE.getCode()); - Command command = requestCommand.convert2Command(); - Assertions.assertEquals(CommandType.ALERT_SEND_REQUEST, command.getType()); - AlertSendRequestCommand verifyCommand = new AlertSendRequestCommand(); + AlertSendRequest requestCommand = + new AlertSendRequest(groupId, title, content, WarningType.FAILURE.getCode()); + Message message = requestCommand.convert2Command(); + Assertions.assertEquals(MessageType.ALERT_SEND_REQUEST, message.getType()); + AlertSendRequest verifyCommand = new AlertSendRequest(); verifyCommand.setGroupId(groupId); verifyCommand.setContent(content); verifyCommand.setTitle(title); diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseCommandTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseTest.java similarity index 59% rename from dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseCommandTest.java rename to dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseTest.java index aceefb7980..41cdfbf957 100644 --- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseCommandTest.java +++ b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponseTest.java @@ -17,8 +17,8 @@ package org.apache.dolphinscheduler.remote.command.alert; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; import java.util.ArrayList; import java.util.List; @@ -26,23 +26,24 @@ import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -public class AlertSendResponseCommandTest { +public class AlertSendResponseTest { @Test public void testConvert2Command() { - AlertSendResponseCommand alertSendResponseCommand = new AlertSendResponseCommand(); - alertSendResponseCommand.setSuccess(false); - List responseResults = new ArrayList<>(); - AlertSendResponseResult responseResult1 = new AlertSendResponseResult(); + AlertSendResponse alertSendResponse = new AlertSendResponse(); + alertSendResponse.setSuccess(false); + List responseResults = new ArrayList<>(); + AlertSendResponse.AlertSendResponseResult responseResult1 = new AlertSendResponse.AlertSendResponseResult(); responseResult1.setSuccess(false); responseResult1.setMessage("fail"); responseResults.add(responseResult1); - AlertSendResponseResult responseResult2 = new AlertSendResponseResult(true, "success"); + AlertSendResponse.AlertSendResponseResult responseResult2 = + new AlertSendResponse.AlertSendResponseResult(true, "success"); responseResults.add(responseResult2); - alertSendResponseCommand.setResResults(responseResults); + alertSendResponse.setResResults(responseResults); - Command command = alertSendResponseCommand.convert2Command(1); - Assertions.assertEquals(CommandType.ALERT_SEND_RESPONSE, command.getType()); + Message message = alertSendResponse.convert2Command(1); + Assertions.assertEquals(MessageType.ALERT_SEND_RESPONSE, message.getType()); } } diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/cache/CacheExpireCommandTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/cache/CacheExpireRequestTest.java similarity index 69% rename from dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/cache/CacheExpireCommandTest.java rename to dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/cache/CacheExpireRequestTest.java index bcc6108422..a9f032b6c1 100644 --- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/cache/CacheExpireCommandTest.java +++ b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/cache/CacheExpireRequestTest.java @@ -18,19 +18,18 @@ package org.apache.dolphinscheduler.remote.command.cache; import org.apache.dolphinscheduler.common.enums.CacheType; -import org.apache.dolphinscheduler.remote.command.CacheExpireCommand; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -public class CacheExpireCommandTest { +public class CacheExpireRequestTest { @Test public void testConvert2Command() { - CacheExpireCommand cacheExpireCommand = new CacheExpireCommand(CacheType.TENANT, "1"); - Command command = cacheExpireCommand.convert2Command(); - Assertions.assertEquals(CommandType.CACHE_EXPIRE, command.getType()); + CacheExpireRequest cacheExpireRequest = new CacheExpireRequest(CacheType.TENANT, "1"); + Message message = cacheExpireRequest.convert2Command(); + Assertions.assertEquals(MessageType.CACHE_EXPIRE, message.getType()); } } diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestCommandTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestTest.java similarity index 69% rename from dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestCommandTest.java rename to dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestTest.java index dd9027f68d..b66066200f 100644 --- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestCommandTest.java +++ b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestTest.java @@ -17,18 +17,18 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -public class GetLogBytesRequestCommandTest { +public class GetLogBytesRequestTest { @Test public void testConvert2Command() { - GetLogBytesRequestCommand getLogBytesRequestCommand = new GetLogBytesRequestCommand("/opt/test"); - Command command = getLogBytesRequestCommand.convert2Command(); - Assertions.assertEquals(CommandType.GET_LOG_BYTES_REQUEST, command.getType()); + GetLogBytesRequest getLogBytesRequest = new GetLogBytesRequest("/opt/test"); + Message message = getLogBytesRequest.convert2Command(); + Assertions.assertEquals(MessageType.GET_LOG_BYTES_REQUEST, message.getType()); } } diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponseCommandTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponseTest.java similarity index 75% rename from dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponseCommandTest.java rename to dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponseTest.java index a6968174fb..3c0e17362c 100644 --- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponseCommandTest.java +++ b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesResponseTest.java @@ -17,19 +17,19 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -public class GetLogBytesResponseCommandTest { +public class GetLogBytesResponseTest { private byte[] data; @Test public void testConvert2Command() { - GetLogBytesResponseCommand getLogBytesResponseCommand = new GetLogBytesResponseCommand(data); - Command command = getLogBytesResponseCommand.convert2Command(122); - Assertions.assertNotNull(command); + GetLogBytesResponse getLogBytesResponse = new GetLogBytesResponse(data); + Message message = getLogBytesResponse.convert2Command(122); + Assertions.assertNotNull(message); } } diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestCommandTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestTest.java similarity index 72% rename from dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestCommandTest.java rename to dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestTest.java index 802589ccdf..6cb18ebf05 100644 --- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestCommandTest.java +++ b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestTest.java @@ -17,18 +17,18 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -public class RemoveTaskLogRequestCommandTest { +public class RemoveTaskLogRequestTest { @Test public void testConvert2Command() { - RemoveTaskLogResponseCommand removeTaskLogResponseCommand = new RemoveTaskLogResponseCommand(); - removeTaskLogResponseCommand.setStatus(true); - Command command = removeTaskLogResponseCommand.convert2Command(122); - Assertions.assertNotNull(command); + RemoveTaskLogResponse removeTaskLogResponse = new RemoveTaskLogResponse(); + removeTaskLogResponse.setStatus(true); + Message message = removeTaskLogResponse.convert2Command(122); + Assertions.assertNotNull(message); } } diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseCommandTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseTest.java similarity index 72% rename from dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseCommandTest.java rename to dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseTest.java index 574b795d05..b9b16b0368 100644 --- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseCommandTest.java +++ b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseTest.java @@ -17,18 +17,18 @@ package org.apache.dolphinscheduler.remote.command.log; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -public class RemoveTaskLogResponseCommandTest { +public class RemoveTaskLogResponseTest { @Test public void testConvert2Command() { - RemoveTaskLogRequestCommand removeTaskLogRequestCommand = new RemoveTaskLogRequestCommand(); - removeTaskLogRequestCommand.setPath("/opt/zhangsan"); - Command command = removeTaskLogRequestCommand.convert2Command(); - Assertions.assertNotNull(command); + RemoveTaskLogRequest removeTaskLogRequest = new RemoveTaskLogRequest(); + removeTaskLogRequest.setPath("/opt/zhangsan"); + Message message = removeTaskLogRequest.convert2Command(); + Assertions.assertNotNull(message); } } diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestCommandTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestCommandTest.java deleted file mode 100644 index cfda036105..0000000000 --- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestCommandTest.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.remote.command.log; - -import org.apache.dolphinscheduler.remote.command.Command; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class RollViewLogRequestCommandTest { - - @Test - public void testConvert2Command() { - RollViewLogRequestCommand rollViewLogRequestCommand = new RollViewLogRequestCommand(); - rollViewLogRequestCommand.setPath("/opt/test"); - rollViewLogRequestCommand.setSkipLineNum(1); - rollViewLogRequestCommand.setLimit(1); - Command command = rollViewLogRequestCommand.convert2Command(); - Assertions.assertNotNull(command); - } -} diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestTest.java new file mode 100644 index 0000000000..10e230bac4 --- /dev/null +++ b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestTest.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.remote.command.log; + +import org.apache.dolphinscheduler.remote.command.Message; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class RollViewLogRequestTest { + + @Test + public void testConvert2Command() { + RollViewLogRequest rollViewLogRequest = new RollViewLogRequest(); + rollViewLogRequest.setPath("/opt/test"); + rollViewLogRequest.setSkipLineNum(1); + rollViewLogRequest.setLimit(1); + Message message = rollViewLogRequest.convert2Command(); + Assertions.assertNotNull(message); + } +} diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/alert/AlertClientService.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/alert/AlertClientService.java index 8bfb3dd3c3..34687ec6eb 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/alert/AlertClientService.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/alert/AlertClientService.java @@ -18,9 +18,9 @@ package org.apache.dolphinscheduler.service.alert; import org.apache.dolphinscheduler.remote.NettyRemotingClient; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendRequestCommand; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponseCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.alert.AlertSendRequest; +import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponse; import org.apache.dolphinscheduler.remote.factory.NettyRemotingClientFactory; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.remote.utils.JsonSerializer; @@ -53,15 +53,6 @@ public class AlertClientService implements AutoCloseable { this.isRunning = new AtomicBoolean(true); } - /** - * alert client - */ - public AlertClientService(String host, int port) { - this(); - this.host = host; - this.port = port; - } - /** * close */ @@ -84,7 +75,7 @@ public class AlertClientService implements AutoCloseable { * @param content * @return */ - public AlertSendResponseCommand sendAlert(int groupId, String title, String content, int strategy) { + public AlertSendResponse sendAlert(int groupId, String title, String content, int strategy) { return this.sendAlert(this.host, this.port, groupId, title, content, strategy); } @@ -97,17 +88,17 @@ public class AlertClientService implements AutoCloseable { * @param content content * @return AlertSendResponseCommand */ - public AlertSendResponseCommand sendAlert(String host, int port, int groupId, String title, String content, - int strategy) { + public AlertSendResponse sendAlert(String host, int port, int groupId, String title, String content, + int strategy) { log.info("sync alert send, host : {}, port : {}, groupId : {}, title : {} , strategy : {} ", host, port, groupId, title, strategy); - AlertSendRequestCommand request = new AlertSendRequestCommand(groupId, title, content, strategy); + AlertSendRequest request = new AlertSendRequest(groupId, title, content, strategy); final Host address = new Host(host, port); try { - Command command = request.convert2Command(); - Command response = this.client.sendSync(address, command, ALERT_REQUEST_TIMEOUT); + Message message = request.convert2Command(); + Message response = this.client.sendSync(address, message, ALERT_REQUEST_TIMEOUT); if (response != null) { - return JsonSerializer.deserialize(response.getBody(), AlertSendResponseCommand.class); + return JsonSerializer.deserialize(response.getBody(), AlertSendResponse.class); } } catch (Exception e) { log.error("sync alert send error", e); diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/cache/CacheNotifyService.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/cache/CacheNotifyService.java index 945efd574b..3d65c308e1 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/cache/CacheNotifyService.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/cache/CacheNotifyService.java @@ -17,9 +17,9 @@ package org.apache.dolphinscheduler.service.cache; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; public interface CacheNotifyService { - void notifyMaster(Command command); + void notifyMaster(Message message); } diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/cache/impl/CacheNotifyServiceImpl.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/cache/impl/CacheNotifyServiceImpl.java index b6f3e4ec96..94e4054b26 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/cache/impl/CacheNotifyServiceImpl.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/cache/impl/CacheNotifyServiceImpl.java @@ -21,7 +21,7 @@ import org.apache.dolphinscheduler.common.enums.NodeType; import org.apache.dolphinscheduler.common.model.Server; import org.apache.dolphinscheduler.registry.api.RegistryClient; import org.apache.dolphinscheduler.remote.NettyRemotingClient; -import org.apache.dolphinscheduler.remote.command.Command; +import org.apache.dolphinscheduler.remote.command.Message; import org.apache.dolphinscheduler.remote.config.NettyClientConfig; import org.apache.dolphinscheduler.remote.processor.NettyRemoteChannel; import org.apache.dolphinscheduler.remote.utils.Host; @@ -108,11 +108,11 @@ public class CacheNotifyServiceImpl implements CacheNotifyService { /** * send result to master * - * @param command command + * @param message command */ @Override - public void notifyMaster(Command command) { - log.info("send result, command:{}", command.toString()); + public void notifyMaster(Message message) { + log.info("send result, command:{}", message.toString()); try { List serverList = registryClient.getServerList(NodeType.MASTER); if (CollectionUtils.isEmpty(serverList)) { @@ -125,7 +125,7 @@ public class CacheNotifyServiceImpl implements CacheNotifyService { if (nettyRemoteChannel == null) { continue; } - nettyRemoteChannel.writeAndFlush(command); + nettyRemoteChannel.writeAndFlush(message); } } catch (Exception e) { log.error("notify master error", e); diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/log/LogClient.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/log/LogClient.java index 1c279ce026..ddf4f6fd56 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/log/LogClient.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/log/LogClient.java @@ -25,17 +25,17 @@ import org.apache.dolphinscheduler.common.utils.NetUtils; import org.apache.dolphinscheduler.common.utils.PropertyUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; import org.apache.dolphinscheduler.remote.NettyRemotingClient; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.log.GetAppIdRequestCommand; -import org.apache.dolphinscheduler.remote.command.log.GetAppIdResponseCommand; -import org.apache.dolphinscheduler.remote.command.log.GetLogBytesRequestCommand; -import org.apache.dolphinscheduler.remote.command.log.GetLogBytesResponseCommand; -import org.apache.dolphinscheduler.remote.command.log.RemoveTaskLogRequestCommand; -import org.apache.dolphinscheduler.remote.command.log.RemoveTaskLogResponseCommand; -import org.apache.dolphinscheduler.remote.command.log.RollViewLogRequestCommand; -import org.apache.dolphinscheduler.remote.command.log.RollViewLogResponseCommand; -import org.apache.dolphinscheduler.remote.command.log.ViewLogRequestCommand; -import org.apache.dolphinscheduler.remote.command.log.ViewLogResponseCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.log.GetAppIdRequest; +import org.apache.dolphinscheduler.remote.command.log.GetAppIdResponse; +import org.apache.dolphinscheduler.remote.command.log.GetLogBytesRequest; +import org.apache.dolphinscheduler.remote.command.log.GetLogBytesResponse; +import org.apache.dolphinscheduler.remote.command.log.RemoveTaskLogRequest; +import org.apache.dolphinscheduler.remote.command.log.RemoveTaskLogResponse; +import org.apache.dolphinscheduler.remote.command.log.RollViewLogRequest; +import org.apache.dolphinscheduler.remote.command.log.RollViewLogResponse; +import org.apache.dolphinscheduler.remote.command.log.ViewLogRequest; +import org.apache.dolphinscheduler.remote.command.log.ViewLogResponseResponse; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import org.apache.dolphinscheduler.remote.factory.NettyRemotingClientFactory; import org.apache.dolphinscheduler.remote.utils.Host; @@ -76,14 +76,14 @@ public class LogClient implements AutoCloseable { public String rollViewLog(String host, int port, String path, int skipLineNum, int limit) { log.info("Roll view log from host : {}, port : {}, path {}, skipLineNum {} ,limit {}", host, port, path, skipLineNum, limit); - RollViewLogRequestCommand request = new RollViewLogRequestCommand(path, skipLineNum, limit); + RollViewLogRequest request = new RollViewLogRequest(path, skipLineNum, limit); final Host address = new Host(host, port); try { - Command command = request.convert2Command(); - Command response = client.sendSync(address, command, LOG_REQUEST_TIMEOUT); + Message message = request.convert2Command(); + Message response = client.sendSync(address, message, LOG_REQUEST_TIMEOUT); if (response != null) { - RollViewLogResponseCommand rollReviewLog = - JSONUtils.parseObject(response.getBody(), RollViewLogResponseCommand.class); + RollViewLogResponse rollReviewLog = + JSONUtils.parseObject(response.getBody(), RollViewLogResponse.class); return rollReviewLog.getMsg(); } return "Roll view log response is null"; @@ -110,17 +110,17 @@ public class LogClient implements AutoCloseable { */ public String viewLog(String host, int port, String path) { log.info("View log from host: {}, port: {}, logPath: {}", host, port, path); - ViewLogRequestCommand request = new ViewLogRequestCommand(path); + ViewLogRequest request = new ViewLogRequest(path); final Host address = new Host(host, port); try { if (NetUtils.getHost().equals(host)) { return LogUtils.readWholeFileContentFromLocal(request.getPath()); } else { - Command command = request.convert2Command(); - Command response = this.client.sendSync(address, command, LOG_REQUEST_TIMEOUT); + Message message = request.convert2Command(); + Message response = this.client.sendSync(address, message, LOG_REQUEST_TIMEOUT); if (response != null) { - ViewLogResponseCommand viewLog = - JSONUtils.parseObject(response.getBody(), ViewLogResponseCommand.class); + ViewLogResponseResponse viewLog = + JSONUtils.parseObject(response.getBody(), ViewLogResponseResponse.class); return viewLog.getMsg(); } return "View log response is null"; @@ -146,14 +146,14 @@ public class LogClient implements AutoCloseable { */ public byte[] getLogBytes(String host, int port, String path) { log.info("Get log bytes from host: {}, port: {}, logPath {}", host, port, path); - GetLogBytesRequestCommand request = new GetLogBytesRequestCommand(path); + GetLogBytesRequest request = new GetLogBytesRequest(path); final Host address = new Host(host, port); try { - Command command = request.convert2Command(); - Command response = this.client.sendSync(address, command, LOG_REQUEST_TIMEOUT); + Message message = request.convert2Command(); + Message response = this.client.sendSync(address, message, LOG_REQUEST_TIMEOUT); if (response != null) { - GetLogBytesResponseCommand getLog = - JSONUtils.parseObject(response.getBody(), GetLogBytesResponseCommand.class); + GetLogBytesResponse getLog = + JSONUtils.parseObject(response.getBody(), GetLogBytesResponse.class); return getLog.getData() == null ? EMPTY_BYTE_ARRAY : getLog.getData(); } return EMPTY_BYTE_ARRAY; @@ -177,22 +177,22 @@ public class LogClient implements AutoCloseable { */ public void removeTaskLog(@NonNull Host host, String path) { log.info("Begin remove task log from host: {} logPath {}", host, path); - RemoveTaskLogRequestCommand request = new RemoveTaskLogRequestCommand(path); + RemoveTaskLogRequest request = new RemoveTaskLogRequest(path); try { - Command command = request.convert2Command(); - client.sendAsync(host, command, LOG_REQUEST_TIMEOUT, responseFuture -> { + Message message = request.convert2Command(); + client.sendAsync(host, message, LOG_REQUEST_TIMEOUT, responseFuture -> { if (responseFuture.getCause() != null) { log.error("Remove task log from host: {} logPath {} error, meet an unknown exception", host, path, responseFuture.getCause()); return; } - Command response = responseFuture.getResponseCommand(); + Message response = responseFuture.getResponseCommand(); if (response == null) { log.error("Remove task log from host: {} logPath {} error, response is null", host, path); return; } - RemoveTaskLogResponseCommand removeTaskLogResponse = - JSONUtils.parseObject(response.getBody(), RemoveTaskLogResponseCommand.class); + RemoveTaskLogResponse removeTaskLogResponse = + JSONUtils.parseObject(response.getBody(), RemoveTaskLogResponse.class); if (removeTaskLogResponse.getStatus()) { log.info("Success remove task log from host: {} logPath {}", host, path); } else { @@ -219,11 +219,11 @@ public class LogClient implements AutoCloseable { appIds = LogUtils.getAppIds(taskLogFilePath, taskAppInfoPath, PropertyUtils.getString(APPID_COLLECT, DEFAULT_COLLECT_WAY)); } else { - final Command command = new GetAppIdRequestCommand(taskLogFilePath, taskAppInfoPath).convert2Command(); - Command response = this.client.sendSync(workerAddress, command, LOG_REQUEST_TIMEOUT); + final Message message = new GetAppIdRequest(taskLogFilePath, taskAppInfoPath).convert2Command(); + Message response = this.client.sendSync(workerAddress, message, LOG_REQUEST_TIMEOUT); if (response != null) { - GetAppIdResponseCommand responseCommand = - JSONUtils.parseObject(response.getBody(), GetAppIdResponseCommand.class); + GetAppIdResponse responseCommand = + JSONUtils.parseObject(response.getBody(), GetAppIdResponse.class); appIds = responseCommand.getAppIds(); } } diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java index 48689909db..80bb6e3711 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java @@ -231,9 +231,6 @@ public interface ProcessService { TaskGroupQueue loadTaskGroupQueue(int taskId); - void sendStartTask2Master(ProcessInstance processInstance, int taskId, - org.apache.dolphinscheduler.remote.command.CommandType taskType); - ProcessInstance loadNextProcess4Serial(long code, int state, int id); public String findConfigYamlByName(String clusterName); diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessServiceImpl.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessServiceImpl.java index 0c7b4a9b36..281c57e2fc 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessServiceImpl.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessServiceImpl.java @@ -125,8 +125,7 @@ import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters import org.apache.dolphinscheduler.plugin.task.api.parameters.ParametersNode; import org.apache.dolphinscheduler.plugin.task.api.parameters.SubProcessParameters; import org.apache.dolphinscheduler.plugin.task.api.parameters.TaskTimeoutParameter; -import org.apache.dolphinscheduler.remote.command.TaskEventChangeCommand; -import org.apache.dolphinscheduler.remote.command.WorkflowStateEventChangeCommand; +import org.apache.dolphinscheduler.remote.command.workflow.WorkflowStateEventChangeRequest; import org.apache.dolphinscheduler.remote.processor.StateEventCallbackService; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.service.command.CommandService; @@ -390,12 +389,12 @@ public class ProcessServiceImpl implements ProcessService { int update = processInstanceDao.updateProcessInstance(info); // determine whether the process is normal if (update > 0) { - WorkflowStateEventChangeCommand workflowStateEventChangeCommand = - new WorkflowStateEventChangeCommand( + WorkflowStateEventChangeRequest workflowStateEventChangeRequest = + new WorkflowStateEventChangeRequest( info.getId(), 0, info.getState(), info.getId(), 0); try { Host host = new Host(info.getHost()); - stateEventCallbackService.sendResult(host, workflowStateEventChangeCommand.convert2Command()); + stateEventCallbackService.sendResult(host, workflowStateEventChangeRequest.convert2Command()); } catch (Exception e) { log.error("sendResultError", e); } @@ -2584,16 +2583,6 @@ public class ProcessServiceImpl implements ProcessService { return this.taskGroupQueueMapper.queryByTaskId(taskId); } - @Override - public void sendStartTask2Master(ProcessInstance processInstance, int taskId, - org.apache.dolphinscheduler.remote.command.CommandType taskType) { - TaskEventChangeCommand taskEventChangeCommand = new TaskEventChangeCommand( - processInstance.getId(), taskId); - Host host = new Host(processInstance.getHost()); - stateEventCallbackService.sendResult(host, taskEventChangeCommand.convert2Command(taskType)); - log.info("Success send command to master: {}, command: {}", host, taskEventChangeCommand); - } - @Override public ProcessInstance loadNextProcess4Serial(long code, int state, int id) { return this.processInstanceMapper.loadNextProcess4Serial(code, state, id); diff --git a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/alert/AlertClientServiceTest.java b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/alert/AlertClientServiceTest.java index dd065cb0b6..7bd1b26955 100644 --- a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/alert/AlertClientServiceTest.java +++ b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/alert/AlertClientServiceTest.java @@ -19,11 +19,11 @@ package org.apache.dolphinscheduler.service.alert; import org.apache.dolphinscheduler.common.enums.WarningType; import org.apache.dolphinscheduler.remote.NettyRemotingClient; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendRequestCommand; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponseCommand; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponseResult; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.alert.AlertSendRequest; +import org.apache.dolphinscheduler.remote.command.alert.AlertSendResponse; import org.apache.dolphinscheduler.remote.factory.NettyRemotingClientFactory; +import org.apache.dolphinscheduler.remote.utils.Host; import java.util.ArrayList; import java.util.List; @@ -74,32 +74,33 @@ public class AlertClientServiceTest { String content = "test-content"; // 1.alter server does not exist - AlertSendResponseCommand alertSendResponseCommand = + AlertSendResponse alertSendResponse = alertClient.sendAlert(host, port, groupId, title, content, WarningType.FAILURE.getCode()); - Assertions.assertNull(alertSendResponseCommand); + Assertions.assertNull(alertSendResponse); - AlertSendRequestCommand alertSendRequestCommand = - new AlertSendRequestCommand(groupId, title, content, WarningType.FAILURE.getCode()); - Command reqCommand = alertSendRequestCommand.convert2Command(); + AlertSendRequest alertSendRequest = + new AlertSendRequest(groupId, title, content, WarningType.FAILURE.getCode()); + Message reqMessage = alertSendRequest.convert2Command(); boolean sendResponseStatus; - List sendResponseResults = new ArrayList<>(); + List sendResponseResults = new ArrayList<>(); // 2.alter instance does not exist sendResponseStatus = false; - AlertSendResponseResult alertResult = new AlertSendResponseResult(); + AlertSendResponse.AlertSendResponseResult alertResult = new AlertSendResponse.AlertSendResponseResult(); String message = String.format("Alert GroupId %s send error : not found alert instance", groupId); alertResult.setSuccess(false); alertResult.setMessage(message); sendResponseResults.add(alertResult); - AlertSendResponseCommand alertSendResponseCommandData = - new AlertSendResponseCommand(sendResponseStatus, sendResponseResults); - Command resCommand = alertSendResponseCommandData.convert2Command(reqCommand.getOpaque()); + AlertSendResponse alertSendResponseData = + new AlertSendResponse(sendResponseStatus, sendResponseResults); + Message resMessage = alertSendResponseData.convert2Command(reqMessage.getOpaque()); - Mockito.when(client.sendSync(Mockito.any(), Mockito.any(), Mockito.anyLong())).thenReturn(resCommand); - alertSendResponseCommand = + Mockito.when(client.sendSync(Mockito.any(Host.class), Mockito.any(Message.class), Mockito.anyLong())) + .thenReturn(resMessage); + alertSendResponse = alertClient.sendAlert(host, port, groupId, title, content, WarningType.FAILURE.getCode()); - Assertions.assertFalse(alertSendResponseCommand.isSuccess()); - alertSendResponseCommand.getResResults().forEach(result -> logger + Assertions.assertFalse(alertSendResponse.isSuccess()); + alertSendResponse.getResResults().forEach(result -> logger .info("alert send response result, status:{}, message:{}", result.isSuccess(), result.getMessage())); // 3.alter plugin does not exist @@ -108,13 +109,13 @@ public class AlertClientServiceTest { message = String.format("Alert Plugin %s send error : return value is null", pluginInstanceName); alertResult.setSuccess(false); alertResult.setMessage(message); - alertSendResponseCommandData = new AlertSendResponseCommand(sendResponseStatus, sendResponseResults); - resCommand = alertSendResponseCommandData.convert2Command(reqCommand.getOpaque()); - Mockito.when(client.sendSync(Mockito.any(), Mockito.any(), Mockito.anyLong())).thenReturn(resCommand); - alertSendResponseCommand = + alertSendResponseData = new AlertSendResponse(sendResponseStatus, sendResponseResults); + resMessage = alertSendResponseData.convert2Command(reqMessage.getOpaque()); + Mockito.when(client.sendSync(Mockito.any(), Mockito.any(), Mockito.anyLong())).thenReturn(resMessage); + alertSendResponse = alertClient.sendAlert(host, port, groupId, title, content, WarningType.FAILURE.getCode()); - Assertions.assertFalse(alertSendResponseCommand.isSuccess()); - alertSendResponseCommand.getResResults().forEach(result -> logger + Assertions.assertFalse(alertSendResponse.isSuccess()); + alertSendResponse.getResResults().forEach(result -> logger .info("alert send response result, status:{}, message:{}", result.isSuccess(), result.getMessage())); // 4.alter result is null @@ -122,26 +123,26 @@ public class AlertClientServiceTest { message = String.format("Alert Plugin %s send error : return result value is null", pluginInstanceName); alertResult.setSuccess(false); alertResult.setMessage(message); - alertSendResponseCommandData = new AlertSendResponseCommand(sendResponseStatus, sendResponseResults); - resCommand = alertSendResponseCommandData.convert2Command(reqCommand.getOpaque()); - Mockito.when(client.sendSync(Mockito.any(), Mockito.any(), Mockito.anyLong())).thenReturn(resCommand); - alertSendResponseCommand = + alertSendResponseData = new AlertSendResponse(sendResponseStatus, sendResponseResults); + resMessage = alertSendResponseData.convert2Command(reqMessage.getOpaque()); + Mockito.when(client.sendSync(Mockito.any(), Mockito.any(), Mockito.anyLong())).thenReturn(resMessage); + alertSendResponse = alertClient.sendAlert(host, port, groupId, title, content, WarningType.FAILURE.getCode()); - Assertions.assertFalse(alertSendResponseCommand.isSuccess()); - alertSendResponseCommand.getResResults().forEach(result -> logger + Assertions.assertFalse(alertSendResponse.isSuccess()); + alertSendResponse.getResResults().forEach(result -> logger .info("alert send response result, status:{}, message:{}", result.isSuccess(), result.getMessage())); // 5.abnormal information inside the alert plug-in code sendResponseStatus = false; alertResult.setSuccess(false); alertResult.setMessage("Abnormal information inside the alert plug-in code"); - alertSendResponseCommandData = new AlertSendResponseCommand(sendResponseStatus, sendResponseResults); - resCommand = alertSendResponseCommandData.convert2Command(reqCommand.getOpaque()); - Mockito.when(client.sendSync(Mockito.any(), Mockito.any(), Mockito.anyLong())).thenReturn(resCommand); - alertSendResponseCommand = + alertSendResponseData = new AlertSendResponse(sendResponseStatus, sendResponseResults); + resMessage = alertSendResponseData.convert2Command(reqMessage.getOpaque()); + Mockito.when(client.sendSync(Mockito.any(), Mockito.any(), Mockito.anyLong())).thenReturn(resMessage); + alertSendResponse = alertClient.sendAlert(host, port, groupId, title, content, WarningType.FAILURE.getCode()); - Assertions.assertFalse(alertSendResponseCommand.isSuccess()); - alertSendResponseCommand.getResResults().forEach(result -> logger + Assertions.assertFalse(alertSendResponse.isSuccess()); + alertSendResponse.getResResults().forEach(result -> logger .info("alert send response result, status:{}, message:{}", result.isSuccess(), result.getMessage())); // 6.alert plugin send success @@ -149,13 +150,13 @@ public class AlertClientServiceTest { message = String.format("Alert Plugin %s send success", pluginInstanceName); alertResult.setSuccess(true); alertResult.setMessage(message); - alertSendResponseCommandData = new AlertSendResponseCommand(sendResponseStatus, sendResponseResults); - resCommand = alertSendResponseCommandData.convert2Command(reqCommand.getOpaque()); - Mockito.when(client.sendSync(Mockito.any(), Mockito.any(), Mockito.anyLong())).thenReturn(resCommand); - alertSendResponseCommand = + alertSendResponseData = new AlertSendResponse(sendResponseStatus, sendResponseResults); + resMessage = alertSendResponseData.convert2Command(reqMessage.getOpaque()); + Mockito.when(client.sendSync(Mockito.any(), Mockito.any(), Mockito.anyLong())).thenReturn(resMessage); + alertSendResponse = alertClient.sendAlert(host, port, groupId, title, content, WarningType.FAILURE.getCode()); - Assertions.assertTrue(alertSendResponseCommand.isSuccess()); - alertSendResponseCommand.getResResults().forEach(result -> logger + Assertions.assertTrue(alertSendResponse.isSuccess()); + alertSendResponse.getResResults().forEach(result -> logger .info("alert send response result, status:{}, message:{}", result.isSuccess(), result.getMessage())); if (Objects.nonNull(alertClient) && alertClient.isRunning()) { diff --git a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/cache/CacheNotifyServiceTest.java b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/cache/CacheNotifyServiceTest.java index e59b7e55c9..bf1dc575f8 100644 --- a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/cache/CacheNotifyServiceTest.java +++ b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/cache/CacheNotifyServiceTest.java @@ -23,10 +23,11 @@ import org.apache.dolphinscheduler.common.model.Server; import org.apache.dolphinscheduler.dao.entity.User; import org.apache.dolphinscheduler.registry.api.RegistryClient; import org.apache.dolphinscheduler.remote.NettyRemotingServer; -import org.apache.dolphinscheduler.remote.command.CacheExpireCommand; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.cache.CacheExpireRequest; import org.apache.dolphinscheduler.remote.config.NettyServerConfig; +import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.service.cache.impl.CacheNotifyServiceImpl; import java.util.ArrayList; @@ -40,6 +41,8 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; +import io.netty.channel.Channel; + /** * tenant cache proxy test */ @@ -56,13 +59,22 @@ public class CacheNotifyServiceTest { public void testNotifyMaster() { User user1 = new User(); user1.setId(100); - Command cacheExpireCommand = new CacheExpireCommand(CacheType.USER, "100").convert2Command(); + Message cacheExpireMessage = new CacheExpireRequest(CacheType.USER, "100").convert2Command(); NettyServerConfig serverConfig = new NettyServerConfig(); NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(serverConfig); - nettyRemotingServer.registerProcessor(CommandType.CACHE_EXPIRE, (channel, command) -> { - Assertions.assertEquals(cacheExpireCommand, command); + nettyRemotingServer.registerProcessor(new NettyRequestProcessor() { + + @Override + public void process(Channel channel, Message message) { + Assertions.assertEquals(cacheExpireMessage, message); + } + + @Override + public MessageType getCommandType() { + return MessageType.CACHE_EXPIRE; + } }); nettyRemotingServer.start(); @@ -74,7 +86,7 @@ public class CacheNotifyServiceTest { Mockito.when(registryClient.getServerList(NodeType.MASTER)).thenReturn(serverList); - cacheNotifyService.notifyMaster(cacheExpireCommand); + cacheNotifyService.notifyMaster(cacheExpireMessage); nettyRemotingServer.close(); } diff --git a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/command/CommandServiceImplTest.java b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/command/MessageServiceImplTest.java similarity index 99% rename from dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/command/CommandServiceImplTest.java rename to dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/command/MessageServiceImplTest.java index 1139bcf1da..0cde76bdfe 100644 --- a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/command/CommandServiceImplTest.java +++ b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/command/MessageServiceImplTest.java @@ -56,7 +56,7 @@ import com.fasterxml.jackson.databind.JsonNode; @ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) -class CommandServiceImplTest { +class MessageServiceImplTest { @InjectMocks private CommandServiceImpl commandService; diff --git a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/log/LoggerRequestProcessorTest.java b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/log/LoggerRequestProcessorTest.java index 31912e2c6a..4501f0ca02 100644 --- a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/log/LoggerRequestProcessorTest.java +++ b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/log/LoggerRequestProcessorTest.java @@ -19,10 +19,10 @@ package org.apache.dolphinscheduler.service.log; import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.log.ViewLogRequestCommand; -import org.apache.dolphinscheduler.remote.processor.LoggerRequestProcessor; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.log.ViewLogRequest; +import org.apache.dolphinscheduler.remote.processor.ViewWholeLogProcessor; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -53,17 +53,17 @@ public class LoggerRequestProcessorTest { public void testProcessViewWholeLogRequest() { System.setProperty("DOLPHINSCHEDULER_WORKER_HOME", System.getProperty("user.dir")); Channel channel = Mockito.mock(Channel.class); - Mockito.when(channel.writeAndFlush(Mockito.any(Command.class))).thenReturn(null); + Mockito.when(channel.writeAndFlush(Mockito.any(Message.class))).thenReturn(null); Mockito.when(LogUtils.readWholeFileContentFromLocal(Mockito.anyString())).thenReturn(""); String userDir = System.getProperty("user.dir"); - ViewLogRequestCommand logRequestCommand = new ViewLogRequestCommand(userDir + "/log/path/a.log"); + ViewLogRequest logRequestCommand = new ViewLogRequest(userDir + "/log/path/a.log"); - Command command = new Command(); - command.setType(CommandType.VIEW_WHOLE_LOG_REQUEST); - command.setBody(JSONUtils.toJsonByteArray(logRequestCommand)); + Message message = new Message(); + message.setType(MessageType.VIEW_WHOLE_LOG_REQUEST); + message.setBody(JSONUtils.toJsonByteArray(logRequestCommand)); - LoggerRequestProcessor loggerRequestProcessor = new LoggerRequestProcessor(); - loggerRequestProcessor.process(channel, command); + ViewWholeLogProcessor loggerRequestProcessor = new ViewWholeLogProcessor(); + loggerRequestProcessor.process(channel, message); } @Test @@ -72,14 +72,14 @@ public class LoggerRequestProcessorTest { Channel channel = Mockito.mock(Channel.class); Mockito.when(LogUtils.readWholeFileContentFromLocal(Mockito.anyString())).thenReturn(""); String userDir = System.getProperty("user.dir"); - ViewLogRequestCommand logRequestCommand = new ViewLogRequestCommand(userDir + "/log/path/a"); + ViewLogRequest logRequestCommand = new ViewLogRequest(userDir + "/log/path/a"); - Command command = new Command(); - command.setType(CommandType.VIEW_WHOLE_LOG_REQUEST); - command.setBody(JSONUtils.toJsonByteArray(logRequestCommand)); + Message message = new Message(); + message.setType(MessageType.VIEW_WHOLE_LOG_REQUEST); + message.setBody(JSONUtils.toJsonByteArray(logRequestCommand)); - LoggerRequestProcessor loggerRequestProcessor = new LoggerRequestProcessor(); - loggerRequestProcessor.process(channel, command); + ViewWholeLogProcessor loggerRequestProcessor = new ViewWholeLogProcessor(); + loggerRequestProcessor.process(channel, message); } @Test @@ -88,14 +88,14 @@ public class LoggerRequestProcessorTest { Channel channel = Mockito.mock(Channel.class); Mockito.when(LogUtils.readWholeFileContentFromLocal(Mockito.anyString())).thenReturn(""); String userDir = System.getProperty("user.dir"); - ViewLogRequestCommand logRequestCommand = new ViewLogRequestCommand(userDir + "/log/../../a.log"); + ViewLogRequest logRequestCommand = new ViewLogRequest(userDir + "/log/../../a.log"); - Command command = new Command(); - command.setType(CommandType.VIEW_WHOLE_LOG_REQUEST); - command.setBody(JSONUtils.toJsonByteArray(logRequestCommand)); + Message message = new Message(); + message.setType(MessageType.VIEW_WHOLE_LOG_REQUEST); + message.setBody(JSONUtils.toJsonByteArray(logRequestCommand)); - LoggerRequestProcessor loggerRequestProcessor = new LoggerRequestProcessor(); - loggerRequestProcessor.process(channel, command); + ViewWholeLogProcessor loggerRequestProcessor = new ViewWholeLogProcessor(); + loggerRequestProcessor.process(channel, message); } @Test @@ -103,13 +103,13 @@ public class LoggerRequestProcessorTest { System.setProperty("DOLPHINSCHEDULER_WORKER_HOME", System.getProperty("user.dir")); Channel channel = Mockito.mock(Channel.class); Mockito.when(LogUtils.readWholeFileContentFromLocal(Mockito.anyString())).thenReturn(""); - ViewLogRequestCommand logRequestCommand = new ViewLogRequestCommand("/log/a.log"); + ViewLogRequest logRequestCommand = new ViewLogRequest("/log/a.log"); - Command command = new Command(); - command.setType(CommandType.VIEW_WHOLE_LOG_REQUEST); - command.setBody(JSONUtils.toJsonByteArray(logRequestCommand)); + Message message = new Message(); + message.setType(MessageType.VIEW_WHOLE_LOG_REQUEST); + message.setBody(JSONUtils.toJsonByteArray(logRequestCommand)); - LoggerRequestProcessor loggerRequestProcessor = new LoggerRequestProcessor(); - loggerRequestProcessor.process(channel, command); + ViewWholeLogProcessor loggerRequestProcessor = new ViewWholeLogProcessor(); + loggerRequestProcessor.process(channel, message); } } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/MessageRetryRunner.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/MessageRetryRunner.java index f75767ef27..830f470a44 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/MessageRetryRunner.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/MessageRetryRunner.java @@ -21,8 +21,8 @@ import org.apache.dolphinscheduler.common.constants.Constants; import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager; import org.apache.dolphinscheduler.common.thread.BaseDaemonThread; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.BaseCommand; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.apache.commons.collections4.MapUtils; @@ -54,9 +54,9 @@ public class MessageRetryRunner extends BaseDaemonThread { @Autowired private List messageSenders; - private Map> messageSenderMap = new HashMap<>(); + private Map> messageSenderMap = new HashMap<>(); - private Map> needToRetryMessages = new ConcurrentHashMap<>(); + private Map> needToRetryMessages = new ConcurrentHashMap<>(); @Override public synchronized void start() { @@ -69,13 +69,13 @@ public class MessageRetryRunner extends BaseDaemonThread { log.info("Message retry runner started"); } - public void addRetryMessage(int taskInstanceId, @NonNull CommandType messageType, BaseCommand baseCommand) { + public void addRetryMessage(int taskInstanceId, @NonNull MessageType messageType, BaseMessage baseMessage) { needToRetryMessages.computeIfAbsent(taskInstanceId, k -> new ConcurrentHashMap<>()).put(messageType, - baseCommand); + baseMessage); } - public void removeRetryMessage(int taskInstanceId, @NonNull CommandType messageType) { - Map retryMessages = needToRetryMessages.get(taskInstanceId); + public void removeRetryMessage(int taskInstanceId, @NonNull MessageType messageType) { + Map retryMessages = needToRetryMessages.get(taskInstanceId); if (retryMessages != null) { retryMessages.remove(messageType); } @@ -86,7 +86,7 @@ public class MessageRetryRunner extends BaseDaemonThread { } public void updateMessageHost(int taskInstanceId, String messageReceiverHost) { - Map needToRetryMessages = this.needToRetryMessages.get(taskInstanceId); + Map needToRetryMessages = this.needToRetryMessages.get(taskInstanceId); if (needToRetryMessages != null) { needToRetryMessages.values().forEach(baseMessage -> { baseMessage.setMessageReceiverAddress(messageReceiverHost); @@ -102,21 +102,21 @@ public class MessageRetryRunner extends BaseDaemonThread { } long now = System.currentTimeMillis(); - Iterator>> iterator = + Iterator>> iterator = needToRetryMessages.entrySet().iterator(); while (iterator.hasNext()) { - Map.Entry> taskEntry = iterator.next(); + Map.Entry> taskEntry = iterator.next(); Integer taskInstanceId = taskEntry.getKey(); - Map retryMessageMap = taskEntry.getValue(); + Map retryMessageMap = taskEntry.getValue(); if (retryMessageMap.isEmpty()) { iterator.remove(); continue; } LogUtils.setTaskInstanceIdMDC(taskInstanceId); try { - for (Map.Entry messageEntry : retryMessageMap.entrySet()) { - CommandType messageType = messageEntry.getKey(); - BaseCommand message = messageEntry.getValue(); + for (Map.Entry messageEntry : retryMessageMap.entrySet()) { + MessageType messageType = messageEntry.getKey(); + BaseMessage message = messageEntry.getValue(); if (now - message.getMessageSendTime() > MESSAGE_RETRY_WINDOW) { log.info("Begin retry send message to master, message: {}", message); message.setMessageSendTime(now); diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/MessageSender.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/MessageSender.java index fc9a9ee81f..79bc7eec6c 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/MessageSender.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/MessageSender.java @@ -18,11 +18,11 @@ package org.apache.dolphinscheduler.server.worker.message; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; -import org.apache.dolphinscheduler.remote.command.BaseCommand; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; -public interface MessageSender { +public interface MessageSender { /** * Send the message @@ -39,5 +39,5 @@ public interface MessageSender { /** * The message type can be sent by this sender. */ - CommandType getMessageType(); + MessageType getMessageType(); } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/TaskExecuteResultMessageSender.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/TaskExecuteResultMessageSender.java index dd410e7c60..2aed7b69cc 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/TaskExecuteResultMessageSender.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/TaskExecuteResultMessageSender.java @@ -18,8 +18,8 @@ package org.apache.dolphinscheduler.server.worker.message; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskExecuteResultCommand; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteResultMessage; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.server.worker.config.WorkerConfig; @@ -29,7 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component -public class TaskExecuteResultMessageSender implements MessageSender { +public class TaskExecuteResultMessageSender implements MessageSender { @Autowired private WorkerConfig workerConfig; @@ -38,14 +38,14 @@ public class TaskExecuteResultMessageSender implements MessageSender { +public class TaskExecuteRunningMessageSender implements MessageSender { @Autowired private WorkerRpcClient workerRpcClient; @@ -40,14 +40,14 @@ public class TaskExecuteRunningMessageSender implements MessageSender { +public class TaskRejectMessageSender implements MessageSender { @Autowired private WorkerRpcClient workerRpcClient; @@ -38,13 +38,13 @@ public class TaskRejectMessageSender implements MessageSender private WorkerConfig workerConfig; @Override - public void sendMessage(TaskRejectCommand message) throws RemotingException { + public void sendMessage(TaskRejectMessage message) throws RemotingException { workerRpcClient.send(Host.of(message.getMessageReceiverAddress()), message.convert2Command()); } @Override - public TaskRejectCommand buildMessage(TaskExecutionContext taskExecutionContext) { - TaskRejectCommand taskRejectMessage = new TaskRejectCommand(workerConfig.getWorkerAddress(), + public TaskRejectMessage buildMessage(TaskExecutionContext taskExecutionContext) { + TaskRejectMessage taskRejectMessage = new TaskRejectMessage(workerConfig.getWorkerAddress(), taskExecutionContext.getWorkflowInstanceHost(), System.currentTimeMillis()); taskRejectMessage.setTaskInstanceId(taskExecutionContext.getTaskInstanceId()); @@ -54,7 +54,7 @@ public class TaskRejectMessageSender implements MessageSender } @Override - public CommandType getMessageType() { - return CommandType.TASK_REJECT; + public MessageType getMessageType() { + return MessageType.TASK_REJECT; } } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/TaskUpdatePidMessageSender.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/TaskUpdatePidMessageSender.java index 8109ef5f64..9a5d434ede 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/TaskUpdatePidMessageSender.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/message/TaskUpdatePidMessageSender.java @@ -18,8 +18,8 @@ package org.apache.dolphinscheduler.server.worker.message; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskUpdatePidCommand; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskUpdatePidMessage; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.server.worker.config.WorkerConfig; @@ -31,7 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component -public class TaskUpdatePidMessageSender implements MessageSender { +public class TaskUpdatePidMessageSender implements MessageSender { @Autowired private WorkerRpcClient workerRpcClient; @@ -40,25 +40,25 @@ public class TaskUpdatePidMessageSender implements MessageSender 0) { log.info("Current taskInstance is choose delay execution, delay time: {}s", remainTime); taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.DELAY_EXECUTION); - workerMessageSender.sendMessage(taskExecutionContext, CommandType.TASK_EXECUTE_RESULT); + workerMessageSender.sendMessage(taskExecutionContext, MessageType.TASK_EXECUTE_RESULT_MESSAGE); } WorkerDelayTaskExecuteRunnable workerTaskExecuteRunnable = WorkerTaskExecuteRunnableFactoryBuilder @@ -129,7 +124,7 @@ public class TaskDispatchProcessor implements NettyRequestProcessor { log.warn( "submit task to wait queue error, queue is full, current queue size is {}, will send a task reject message to master", workerManager.getWaitSubmitQueueSize()); - workerMessageSender.sendMessageWithRetry(taskExecutionContext, CommandType.TASK_REJECT); + workerMessageSender.sendMessageWithRetry(taskExecutionContext, MessageType.TASK_REJECT); } else { log.info("Submit task to wait queue success, current queue size is {}", workerManager.getWaitSubmitQueueSize()); @@ -137,4 +132,9 @@ public class TaskDispatchProcessor implements NettyRequestProcessor { } } + @Override + public MessageType getCommandType() { + return MessageType.TASK_DISPATCH_MESSAGE; + } + } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteResultAckProcessor.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteResultAckProcessor.java index 43cb9da9a6..c5956c3112 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteResultAckProcessor.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteResultAckProcessor.java @@ -19,9 +19,9 @@ package org.apache.dolphinscheduler.server.worker.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskExecuteAckCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteResultMessageAck; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner; @@ -30,7 +30,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -44,34 +43,34 @@ public class TaskExecuteResultAckProcessor implements NettyRequestProcessor { private MessageRetryRunner messageRetryRunner; @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_EXECUTE_RESULT_ACK == command.getType(), - String.format("invalid command type : %s", command.getType())); - - TaskExecuteAckCommand taskExecuteAckMessage = JSONUtils.parseObject(command.getBody(), - TaskExecuteAckCommand.class); + public void process(Channel channel, Message message) { + TaskExecuteResultMessageAck taskExecuteAckMessage = + JSONUtils.parseObject(message.getBody(), TaskExecuteResultMessageAck.class); if (taskExecuteAckMessage == null) { log.error("task execute response ack command is null"); return; } - try { - LogUtils.setTaskInstanceIdMDC(taskExecuteAckMessage.getTaskInstanceId()); + try ( + LogUtils.MDCAutoClosableContext mdcAutoClosableContext = + LogUtils.setTaskInstanceIdMDC(taskExecuteAckMessage.getTaskInstanceId())) { log.info("Receive task execute response ack command : {}", taskExecuteAckMessage); if (taskExecuteAckMessage.isSuccess()) { messageRetryRunner.removeRetryMessage(taskExecuteAckMessage.getTaskInstanceId(), - CommandType.TASK_EXECUTE_RESULT); + MessageType.TASK_EXECUTE_RESULT_MESSAGE); log.debug("remove REMOTE_CHANNELS, task instance id:{}", taskExecuteAckMessage.getTaskInstanceId()); } else { // master handle worker response error, will still retry log.error("Receive task execute result ack message, the message status is not success, message: {}", taskExecuteAckMessage); } - } finally { - LogUtils.removeTaskInstanceIdMDC(); - } } + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_RESULT_MESSAGE_ACK; + } + } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteRunningAckProcessor.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteRunningAckProcessor.java index f49a7c6129..1b561a6b13 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteRunningAckProcessor.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteRunningAckProcessor.java @@ -19,9 +19,9 @@ package org.apache.dolphinscheduler.server.worker.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskExecuteRunningAckMessage; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskExecuteRunningMessageAck; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner; @@ -30,7 +30,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -44,12 +43,9 @@ public class TaskExecuteRunningAckProcessor implements NettyRequestProcessor { private MessageRetryRunner messageRetryRunner; @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_EXECUTE_RUNNING_ACK == command.getType(), - String.format("invalid command type : %s", command.getType())); - - TaskExecuteRunningAckMessage runningAckCommand = JSONUtils.parseObject(command.getBody(), - TaskExecuteRunningAckMessage.class); + public void process(Channel channel, Message message) { + TaskExecuteRunningMessageAck runningAckCommand = JSONUtils.parseObject(message.getBody(), + TaskExecuteRunningMessageAck.class); if (runningAckCommand == null) { log.error("task execute running ack command is null"); return; @@ -60,11 +56,16 @@ public class TaskExecuteRunningAckProcessor implements NettyRequestProcessor { if (runningAckCommand.isSuccess()) { messageRetryRunner.removeRetryMessage(runningAckCommand.getTaskInstanceId(), - CommandType.TASK_EXECUTE_RUNNING); + MessageType.TASK_EXECUTE_RUNNING_MESSAGE); } } finally { LogUtils.removeTaskInstanceIdMDC(); } } + @Override + public MessageType getCommandType() { + return MessageType.TASK_EXECUTE_RUNNING_MESSAGE_ACK; + } + } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskKillProcessor.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskKillProcessor.java index 6421dc7490..a68ff86fb4 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskKillProcessor.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskKillProcessor.java @@ -27,10 +27,10 @@ import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContextCacheMana import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.ProcessUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskKillRequestCommand; -import org.apache.dolphinscheduler.remote.command.TaskKillResponseCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskKillRequest; +import org.apache.dolphinscheduler.remote.command.task.TaskKillResponse; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner; import org.apache.dolphinscheduler.server.worker.runner.WorkerManagerThread; @@ -43,11 +43,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import com.google.common.base.Strings; import io.netty.channel.Channel; -import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; /** @@ -67,13 +65,11 @@ public class TaskKillProcessor implements NettyRequestProcessor { * task kill process * * @param channel channel channel - * @param command command command + * @param message command command */ @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_KILL_REQUEST == command.getType(), - String.format("invalid command type : %s", command.getType())); - TaskKillRequestCommand killCommand = JSONUtils.parseObject(command.getBody(), TaskKillRequestCommand.class); + public void process(Channel channel, Message message) { + TaskKillRequest killCommand = JSONUtils.parseObject(message.getBody(), TaskKillRequest.class); if (killCommand == null) { log.error("task kill request command is null"); return; @@ -96,7 +92,7 @@ public class TaskKillProcessor implements NettyRequestProcessor { workerManager.killTaskBeforeExecuteByInstanceId(taskInstanceId); taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.KILL); TaskExecutionContextCacheManager.removeByTaskInstanceId(taskInstanceId); - sendTaskKillResponseCommand(channel, taskExecutionContext); + sendTaskKillResponseCommand(channel, message.getOpaque(), taskExecutionContext); log.info("the task has not been executed and has been cancelled, task id:{}", taskInstanceId); return; } @@ -107,7 +103,7 @@ public class TaskKillProcessor implements NettyRequestProcessor { taskExecutionContext.setCurrentExecutionStatus( result ? TaskExecutionStatus.SUCCESS : TaskExecutionStatus.FAILURE); - sendTaskKillResponseCommand(channel, taskExecutionContext); + sendTaskKillResponseCommand(channel, message.getOpaque(), taskExecutionContext); TaskExecutionContextCacheManager.removeByTaskInstanceId(taskExecutionContext.getTaskInstanceId()); messageRetryRunner.removeRetryMessages(taskExecutionContext.getTaskInstanceId()); @@ -118,23 +114,24 @@ public class TaskKillProcessor implements NettyRequestProcessor { } } - private void sendTaskKillResponseCommand(Channel channel, TaskExecutionContext taskExecutionContext) { - TaskKillResponseCommand taskKillResponseCommand = new TaskKillResponseCommand(); - taskKillResponseCommand.setStatus(taskExecutionContext.getCurrentExecutionStatus()); + @Override + public MessageType getCommandType() { + return MessageType.TASK_KILL_REQUEST; + } + + private void sendTaskKillResponseCommand(Channel channel, long opaque, TaskExecutionContext taskExecutionContext) { + TaskKillResponse taskKillResponse = new TaskKillResponse(); + taskKillResponse.setStatus(taskExecutionContext.getCurrentExecutionStatus()); if (taskExecutionContext.getAppIds() != null) { - taskKillResponseCommand + taskKillResponse .setAppIds(Arrays.asList(taskExecutionContext.getAppIds().split(TaskConstants.COMMA))); } - taskKillResponseCommand.setTaskInstanceId(taskExecutionContext.getTaskInstanceId()); - taskKillResponseCommand.setHost(taskExecutionContext.getHost()); - taskKillResponseCommand.setProcessId(taskExecutionContext.getProcessId()); - channel.writeAndFlush(taskKillResponseCommand.convert2Command()).addListener(new ChannelFutureListener() { - - @Override - public void operationComplete(ChannelFuture future) throws Exception { - if (!future.isSuccess()) { - log.error("Submit kill response to master error, kill command: {}", taskKillResponseCommand); - } + taskKillResponse.setTaskInstanceId(taskExecutionContext.getTaskInstanceId()); + taskKillResponse.setHost(taskExecutionContext.getHost()); + taskKillResponse.setProcessId(taskExecutionContext.getProcessId()); + channel.writeAndFlush(taskKillResponse.convert2Command(opaque)).addListener((ChannelFutureListener) future -> { + if (!future.isSuccess()) { + log.error("Submit kill response to master error, kill command: {}", taskKillResponse); } }); } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskRejectAckProcessor.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskRejectAckProcessor.java index 7bc1267907..de941d3742 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskRejectAckProcessor.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskRejectAckProcessor.java @@ -19,9 +19,9 @@ package org.apache.dolphinscheduler.server.worker.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskRejectAckCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskRejectMessageAck; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner; @@ -30,7 +30,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; @Component @@ -41,30 +40,33 @@ public class TaskRejectAckProcessor implements NettyRequestProcessor { private MessageRetryRunner messageRetryRunner; @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_REJECT_ACK == command.getType(), - String.format("invalid command type : %s", command.getType())); + public void process(Channel channel, Message message) { - TaskRejectAckCommand taskRejectAckMessage = JSONUtils.parseObject(command.getBody(), - TaskRejectAckCommand.class); - if (taskRejectAckMessage == null) { + TaskRejectMessageAck taskRejectMessageAck = + JSONUtils.parseObject(message.getBody(), TaskRejectMessageAck.class); + if (taskRejectMessageAck == null) { log.error("Receive task reject response, the response message is null"); return; } try { - LogUtils.setTaskInstanceIdMDC(taskRejectAckMessage.getTaskInstanceId()); - log.info("Receive task reject response ack command: {}", taskRejectAckMessage); - if (taskRejectAckMessage.isSuccess()) { - messageRetryRunner.removeRetryMessage(taskRejectAckMessage.getTaskInstanceId(), - CommandType.TASK_REJECT); - log.debug("removeRecallCache: task instance id:{}", taskRejectAckMessage.getTaskInstanceId()); + LogUtils.setTaskInstanceIdMDC(taskRejectMessageAck.getTaskInstanceId()); + log.info("Receive task reject response ack command: {}", taskRejectMessageAck); + if (taskRejectMessageAck.isSuccess()) { + messageRetryRunner.removeRetryMessage(taskRejectMessageAck.getTaskInstanceId(), + MessageType.TASK_REJECT); + log.debug("removeRecallCache: task instance id:{}", taskRejectMessageAck.getTaskInstanceId()); } else { log.error("Receive task reject ack message, the message status is not success, message: {}", - taskRejectAckMessage); + taskRejectMessageAck); } } finally { LogUtils.removeTaskInstanceIdMDC(); } } + + @Override + public MessageType getCommandType() { + return MessageType.TASK_REJECT_MESSAGE_ACK; + } } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskSavePointProcessor.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskSavePointProcessor.java index 7d3008a921..33c8dacf7c 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskSavePointProcessor.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskSavePointProcessor.java @@ -23,10 +23,10 @@ import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContextCacheManager; import org.apache.dolphinscheduler.plugin.task.api.stream.StreamTask; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskSavePointRequestCommand; -import org.apache.dolphinscheduler.remote.command.TaskSavePointResponseCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskSavePointRequest; +import org.apache.dolphinscheduler.remote.command.task.TaskSavePointResponse; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.worker.runner.WorkerManagerThread; import org.apache.dolphinscheduler.server.worker.runner.WorkerTaskExecuteRunnable; @@ -36,8 +36,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; - import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; @@ -59,26 +57,24 @@ public class TaskSavePointProcessor implements NettyRequestProcessor { * task save point process * * @param channel channel channel - * @param command command command + * @param message command command */ @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_SAVEPOINT_REQUEST == command.getType(), - String.format("invalid command type : %s", command.getType())); - TaskSavePointRequestCommand taskSavePointRequestCommand = - JSONUtils.parseObject(command.getBody(), TaskSavePointRequestCommand.class); - if (taskSavePointRequestCommand == null) { + public void process(Channel channel, Message message) { + TaskSavePointRequest taskSavePointRequest = + JSONUtils.parseObject(message.getBody(), TaskSavePointRequest.class); + if (taskSavePointRequest == null) { log.error("task savepoint request command is null"); return; } - log.info("Receive task savepoint command : {}", taskSavePointRequestCommand); + log.info("Receive task savepoint command : {}", taskSavePointRequest); - int taskInstanceId = taskSavePointRequestCommand.getTaskInstanceId(); + int taskInstanceId = taskSavePointRequest.getTaskInstanceId(); TaskExecutionContext taskExecutionContext = TaskExecutionContextCacheManager.getByTaskInstanceId(taskInstanceId); if (taskExecutionContext == null) { log.error("taskRequest cache is null, taskInstanceId: {}", - taskSavePointRequestCommand.getTaskInstanceId()); + taskSavePointRequest.getTaskInstanceId()); return; } @@ -92,19 +88,24 @@ public class TaskSavePointProcessor implements NettyRequestProcessor { } } + @Override + public MessageType getCommandType() { + return MessageType.TASK_SAVEPOINT_REQUEST; + } + private void sendTaskSavePointResponseCommand(Channel channel, TaskExecutionContext taskExecutionContext) { - TaskSavePointResponseCommand taskSavePointResponseCommand = new TaskSavePointResponseCommand(); - taskSavePointResponseCommand.setTaskInstanceId(taskExecutionContext.getTaskInstanceId()); - channel.writeAndFlush(taskSavePointResponseCommand.convert2Command()).addListener(new ChannelFutureListener() { + TaskSavePointResponse taskSavePointResponse = new TaskSavePointResponse(); + taskSavePointResponse.setTaskInstanceId(taskExecutionContext.getTaskInstanceId()); + channel.writeAndFlush(taskSavePointResponse.convert2Command()).addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { if (!future.isSuccess()) { log.error("Submit kill response to master error, kill command: {}", - taskSavePointResponseCommand); + taskSavePointResponse); } else log.info("Submit kill response to master success, kill command: {}", - taskSavePointResponseCommand); + taskSavePointResponse); } }); } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskUpdatePidAckProcessor.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskUpdatePidAckProcessor.java index af3680d0eb..0465f7d0b4 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskUpdatePidAckProcessor.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskUpdatePidAckProcessor.java @@ -19,9 +19,9 @@ package org.apache.dolphinscheduler.server.worker.processor; import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskUpdatePidAckMessage; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskUpdatePidAckMessage; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner; @@ -31,7 +31,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; import io.netty.channel.Channel; /** @@ -45,11 +44,9 @@ public class TaskUpdatePidAckProcessor implements NettyRequestProcessor { private MessageRetryRunner messageRetryRunner; @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.TASK_UPDATE_PID_ACK == command.getType(), - String.format("invalid command type : %s", command.getType())); + public void process(Channel channel, Message message) { - TaskUpdatePidAckMessage updatePidAckCommand = JSONUtils.parseObject(command.getBody(), + TaskUpdatePidAckMessage updatePidAckCommand = JSONUtils.parseObject(message.getBody(), TaskUpdatePidAckMessage.class); if (updatePidAckCommand == null) { log.error("task execute update pid ack command is null"); @@ -61,11 +58,16 @@ public class TaskUpdatePidAckProcessor implements NettyRequestProcessor { if (updatePidAckCommand.isSuccess()) { messageRetryRunner.removeRetryMessage(updatePidAckCommand.getTaskInstanceId(), - CommandType.TASK_UPDATE_PID); + MessageType.TASK_UPDATE_PID_MESSAGE); } } finally { LogUtils.removeTaskInstanceIdMDC(); } } + @Override + public MessageType getCommandType() { + return MessageType.TASK_UPDATE_PID__MESSAGE_ACK; + } + } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/WorkflowHostChangeProcessor.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/WorkflowHostChangeProcessor.java index 33da734151..8859b3efe9 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/WorkflowHostChangeProcessor.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/processor/WorkflowHostChangeProcessor.java @@ -21,8 +21,8 @@ import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContextCacheManager; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.apache.dolphinscheduler.remote.command.task.WorkflowHostChangeRequest; import org.apache.dolphinscheduler.remote.command.task.WorkflowHostChangeResponse; import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; @@ -33,8 +33,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.common.base.Preconditions; - import io.netty.channel.Channel; import io.netty.channel.ChannelFutureListener; @@ -51,11 +49,9 @@ public class WorkflowHostChangeProcessor implements NettyRequestProcessor { private MessageRetryRunner messageRetryRunner; @Override - public void process(Channel channel, Command command) { - Preconditions.checkArgument(CommandType.WORKFLOW_HOST_CHANGE_REQUEST == command.getType(), - String.format("invalid command type : %s", command.getType())); + public void process(Channel channel, Message message) { WorkflowHostChangeRequest workflowHostChangeRequest = - JSONUtils.parseObject(command.getBody(), WorkflowHostChangeRequest.class); + JSONUtils.parseObject(message.getBody(), WorkflowHostChangeRequest.class); if (workflowHostChangeRequest == null) { logger.error("host update command is null"); return; @@ -79,7 +75,7 @@ public class WorkflowHostChangeProcessor implements NettyRequestProcessor { logger.error("Cannot find the taskExecutionContext, taskInstanceId : {}", workflowHostChangeRequest.getTaskInstanceId()); } - channel.writeAndFlush(workflowHostChangeResponse.convert2Command(command.getOpaque())).addListener( + channel.writeAndFlush(workflowHostChangeResponse.convert2Command(message.getOpaque())).addListener( (ChannelFutureListener) channelFuture -> { if (!channelFuture.isSuccess()) { logger.error("send host update response failed"); @@ -88,4 +84,9 @@ public class WorkflowHostChangeProcessor implements NettyRequestProcessor { } } + @Override + public MessageType getCommandType() { + return MessageType.WORKFLOW_HOST_CHANGE_REQUEST; + } + } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerMessageSender.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerMessageSender.java index f61bb332e7..a8b892fbaf 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerMessageSender.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerMessageSender.java @@ -18,8 +18,8 @@ package org.apache.dolphinscheduler.server.worker.rpc; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; -import org.apache.dolphinscheduler.remote.command.BaseCommand; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.BaseMessage; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner; import org.apache.dolphinscheduler.server.worker.message.MessageSender; @@ -46,7 +46,7 @@ public class WorkerMessageSender { @Autowired private List messageSenders; - private Map messageSenderMap = new HashMap<>(); + private Map messageSenderMap = new HashMap<>(); @PostConstruct public void init() { @@ -56,30 +56,30 @@ public class WorkerMessageSender { // todo: use message rather than context public void sendMessageWithRetry(@NonNull TaskExecutionContext taskExecutionContext, - @NonNull CommandType messageType) { + @NonNull MessageType messageType) { MessageSender messageSender = messageSenderMap.get(messageType); if (messageSender == null) { throw new IllegalArgumentException("The messageType is invalidated, messageType: " + messageType); } - BaseCommand baseCommand = messageSender.buildMessage(taskExecutionContext); + BaseMessage baseMessage = messageSender.buildMessage(taskExecutionContext); try { - messageRetryRunner.addRetryMessage(taskExecutionContext.getTaskInstanceId(), messageType, baseCommand); - messageSender.sendMessage(baseCommand); + messageRetryRunner.addRetryMessage(taskExecutionContext.getTaskInstanceId(), messageType, baseMessage); + messageSender.sendMessage(baseMessage); } catch (RemotingException e) { - log.error("Send message error, messageType: {}, message: {}", messageType, baseCommand); + log.error("Send message error, messageType: {}, message: {}", messageType, baseMessage); } } - public void sendMessage(@NonNull TaskExecutionContext taskExecutionContext, @NonNull CommandType messageType) { + public void sendMessage(@NonNull TaskExecutionContext taskExecutionContext, @NonNull MessageType messageType) { MessageSender messageSender = messageSenderMap.get(messageType); if (messageSender == null) { throw new IllegalArgumentException("The messageType is invalidated, messageType: " + messageType); } - BaseCommand baseCommand = messageSender.buildMessage(taskExecutionContext); + BaseMessage baseMessage = messageSender.buildMessage(taskExecutionContext); try { - messageSender.sendMessage(baseCommand); + messageSender.sendMessage(baseMessage); } catch (RemotingException e) { - log.error("Send message error, messageType: {}, message: {}", messageType, baseCommand); + log.error("Send message error, messageType: {}, message: {}", messageType, baseMessage); } } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerRpcClient.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerRpcClient.java index a6c7063622..41fdd93992 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerRpcClient.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerRpcClient.java @@ -18,21 +18,18 @@ package org.apache.dolphinscheduler.server.worker.rpc; import org.apache.dolphinscheduler.remote.NettyRemotingClient; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.Message; import org.apache.dolphinscheduler.remote.config.NettyClientConfig; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; +import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.remote.utils.Host; -import org.apache.dolphinscheduler.server.worker.processor.TaskExecuteResultAckProcessor; -import org.apache.dolphinscheduler.server.worker.processor.TaskExecuteRunningAckProcessor; -import org.apache.dolphinscheduler.server.worker.processor.TaskRejectAckProcessor; -import org.apache.dolphinscheduler.server.worker.processor.TaskUpdatePidAckProcessor; -import javax.annotation.Resource; +import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; /** @@ -43,16 +40,8 @@ import org.springframework.stereotype.Component; public class WorkerRpcClient implements AutoCloseable { @Autowired - private TaskExecuteRunningAckProcessor taskExecuteRunningAckProcessor; - - @Autowired - private TaskExecuteResultAckProcessor taskExecuteResultAckProcessor; - - @Resource - private TaskUpdatePidAckProcessor taskUpdatePidAckProcessor; - - @Autowired - private TaskRejectAckProcessor taskRejectAckProcessor; + @Lazy + private List nettyRequestProcessors; private NettyRemotingClient nettyRemotingClient; @@ -61,17 +50,15 @@ public class WorkerRpcClient implements AutoCloseable { NettyClientConfig nettyClientConfig = new NettyClientConfig(); this.nettyRemotingClient = new NettyRemotingClient(nettyClientConfig); // we only use the client to handle the ack message, we can optimize this, send ack to the nettyServer. - this.nettyRemotingClient.registerProcessor(CommandType.TASK_EXECUTE_RUNNING_ACK, - taskExecuteRunningAckProcessor); - this.nettyRemotingClient.registerProcessor(CommandType.TASK_UPDATE_PID_ACK, - taskUpdatePidAckProcessor); - this.nettyRemotingClient.registerProcessor(CommandType.TASK_EXECUTE_RESULT_ACK, taskExecuteResultAckProcessor); - this.nettyRemotingClient.registerProcessor(CommandType.TASK_REJECT_ACK, taskRejectAckProcessor); + for (NettyRequestProcessor nettyRequestProcessor : nettyRequestProcessors) { + this.nettyRemotingClient.registerProcessor(nettyRequestProcessor); + + } log.info("Worker rpc client started"); } - public void send(Host host, Command command) throws RemotingException { - nettyRemotingClient.send(host, command); + public void send(Host host, Message message) throws RemotingException { + nettyRemotingClient.send(host, message); } public void close() { diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerRpcServer.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerRpcServer.java index f9d64e6551..eac13d273e 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerRpcServer.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/rpc/WorkerRpcServer.java @@ -18,22 +18,12 @@ package org.apache.dolphinscheduler.server.worker.rpc; import org.apache.dolphinscheduler.remote.NettyRemotingServer; -import org.apache.dolphinscheduler.remote.command.CommandType; import org.apache.dolphinscheduler.remote.config.NettyServerConfig; -import org.apache.dolphinscheduler.remote.processor.LoggerRequestProcessor; +import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor; import org.apache.dolphinscheduler.server.worker.config.WorkerConfig; -import org.apache.dolphinscheduler.server.worker.processor.TaskDispatchProcessor; -import org.apache.dolphinscheduler.server.worker.processor.TaskExecuteResultAckProcessor; -import org.apache.dolphinscheduler.server.worker.processor.TaskExecuteRunningAckProcessor; -import org.apache.dolphinscheduler.server.worker.processor.TaskKillProcessor; -import org.apache.dolphinscheduler.server.worker.processor.TaskRejectAckProcessor; -import org.apache.dolphinscheduler.server.worker.processor.TaskSavePointProcessor; -import org.apache.dolphinscheduler.server.worker.processor.TaskUpdatePidAckProcessor; -import org.apache.dolphinscheduler.server.worker.processor.WorkflowHostChangeProcessor; import java.io.Closeable; - -import javax.annotation.Resource; +import java.util.List; import lombok.extern.slf4j.Slf4j; @@ -45,31 +35,7 @@ import org.springframework.stereotype.Service; public class WorkerRpcServer implements Closeable { @Autowired - private TaskDispatchProcessor taskDispatchProcessor; - - @Autowired - private TaskKillProcessor taskKillProcessor; - - @Autowired - private TaskRejectAckProcessor taskRejectAckProcessor; - - @Autowired - private TaskSavePointProcessor taskSavePointProcessor; - - @Autowired - private TaskExecuteRunningAckProcessor taskExecuteRunningAckProcessor; - - @Resource - private TaskUpdatePidAckProcessor taskUpdatePidAckProcessor; - - @Autowired - private TaskExecuteResultAckProcessor taskExecuteResultAckProcessor; - - @Autowired - private WorkflowHostChangeProcessor workflowHostChangeProcessor; - - @Autowired - private LoggerRequestProcessor loggerRequestProcessor; + private List nettyRequestProcessors; @Autowired private WorkerConfig workerConfig; @@ -79,25 +45,12 @@ public class WorkerRpcServer implements Closeable { public void start() { log.info("Worker rpc server starting"); NettyServerConfig serverConfig = new NettyServerConfig(); + nettyRemotingServer = new NettyRemotingServer(serverConfig); serverConfig.setListenPort(workerConfig.getListenPort()); - this.nettyRemotingServer = new NettyRemotingServer(serverConfig); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_DISPATCH_REQUEST, taskDispatchProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_KILL_REQUEST, taskKillProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_RUNNING_ACK, - taskExecuteRunningAckProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_UPDATE_PID_ACK, - taskUpdatePidAckProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_RESULT_ACK, taskExecuteResultAckProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_REJECT_ACK, taskRejectAckProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.WORKFLOW_HOST_CHANGE_REQUEST, - workflowHostChangeProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.TASK_SAVEPOINT_REQUEST, taskSavePointProcessor); - // log server - this.nettyRemotingServer.registerProcessor(CommandType.GET_APP_ID_REQUEST, loggerRequestProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.GET_LOG_BYTES_REQUEST, loggerRequestProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.ROLL_VIEW_LOG_REQUEST, loggerRequestProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.VIEW_WHOLE_LOG_REQUEST, loggerRequestProcessor); - this.nettyRemotingServer.registerProcessor(CommandType.REMOVE_TAK_LOG_REQUEST, loggerRequestProcessor); + for (NettyRequestProcessor nettyRequestProcessor : nettyRequestProcessors) { + nettyRemotingServer.registerProcessor(nettyRequestProcessor); + log.info("Success register netty processor: {}", nettyRequestProcessor.getClass().getName()); + } this.nettyRemotingServer.start(); log.info("Worker rpc server started"); } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskCallbackImpl.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskCallbackImpl.java index b286902772..9dba2bf8cd 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskCallbackImpl.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskCallbackImpl.java @@ -21,7 +21,7 @@ import org.apache.dolphinscheduler.plugin.task.api.TaskCallBack; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContextCacheManager; import org.apache.dolphinscheduler.plugin.task.api.model.ApplicationInfo; -import org.apache.dolphinscheduler.remote.command.CommandType; +import org.apache.dolphinscheduler.remote.command.MessageType; import org.apache.dolphinscheduler.server.worker.rpc.WorkerMessageSender; import lombok.Builder; @@ -52,7 +52,7 @@ public class TaskCallbackImpl implements TaskCallBack { log.info("send remote application info {}", applicationInfo); taskExecutionContext.setAppIds(applicationInfo.getAppIds()); - workerMessageSender.sendMessageWithRetry(taskExecutionContext, CommandType.TASK_EXECUTE_RUNNING); + workerMessageSender.sendMessageWithRetry(taskExecutionContext, MessageType.TASK_EXECUTE_RUNNING_MESSAGE); } @Override @@ -64,7 +64,7 @@ public class TaskCallbackImpl implements TaskCallBack { return; } - workerMessageSender.sendMessageWithRetry(taskExecutionContext, CommandType.TASK_UPDATE_PID); + workerMessageSender.sendMessageWithRetry(taskExecutionContext, MessageType.TASK_UPDATE_PID_MESSAGE); } } diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/WorkerTaskExecuteRunnable.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/WorkerTaskExecuteRunnable.java index cfaab86f1b..d13043b4a1 100644 --- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/WorkerTaskExecuteRunnable.java +++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/WorkerTaskExecuteRunnable.java @@ -38,8 +38,8 @@ import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; import org.apache.dolphinscheduler.plugin.task.api.model.TaskAlertInfo; import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils; import org.apache.dolphinscheduler.plugin.task.api.utils.ProcessUtils; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.alert.AlertSendRequestCommand; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.alert.AlertSendRequest; import org.apache.dolphinscheduler.remote.exceptions.RemotingException; import org.apache.dolphinscheduler.remote.utils.Host; import org.apache.dolphinscheduler.server.worker.config.WorkerConfig; @@ -111,7 +111,7 @@ public abstract class WorkerTaskExecuteRunnable implements Runnable { TaskExecutionContextCacheManager.removeByTaskInstanceId(taskExecutionContext.getTaskInstanceId()); taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.FAILURE); taskExecutionContext.setEndTime(System.currentTimeMillis()); - workerMessageSender.sendMessageWithRetry(taskExecutionContext, CommandType.TASK_EXECUTE_RESULT); + workerMessageSender.sendMessageWithRetry(taskExecutionContext, MessageType.TASK_EXECUTE_RESULT_MESSAGE); log.info( "Get a exception when execute the task, will send the task execute result to master, the current task execute result is {}", TaskExecutionStatus.FAILURE); @@ -146,7 +146,7 @@ public abstract class WorkerTaskExecuteRunnable implements Runnable { taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.SUCCESS); taskExecutionContext.setEndTime(System.currentTimeMillis()); TaskExecutionContextCacheManager.removeByTaskInstanceId(taskExecutionContext.getTaskInstanceId()); - workerMessageSender.sendMessageWithRetry(taskExecutionContext, CommandType.TASK_EXECUTE_RESULT); + workerMessageSender.sendMessageWithRetry(taskExecutionContext, MessageType.TASK_EXECUTE_RESULT_MESSAGE); log.info( "The current execute mode is dry run, will stop the subsequent process and set the taskInstance status to success"); return; @@ -189,7 +189,7 @@ public abstract class WorkerTaskExecuteRunnable implements Runnable { protected void beforeExecute() { taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.RUNNING_EXECUTION); - workerMessageSender.sendMessageWithRetry(taskExecutionContext, CommandType.TASK_EXECUTE_RUNNING); + workerMessageSender.sendMessageWithRetry(taskExecutionContext, MessageType.TASK_EXECUTE_RUNNING_MESSAGE); log.info("Set task status to {}", TaskExecutionStatus.RUNNING_EXECUTION); TaskExecutionCheckerUtils.checkTenantExist(workerConfig, taskExecutionContext); @@ -232,7 +232,7 @@ public abstract class WorkerTaskExecuteRunnable implements Runnable { TaskAlertInfo taskAlertInfo = task.getTaskAlertInfo(); int strategy = status == TaskExecutionStatus.SUCCESS ? WarningType.SUCCESS.getCode() : WarningType.FAILURE.getCode(); - AlertSendRequestCommand alertCommand = new AlertSendRequestCommand( + AlertSendRequest alertCommand = new AlertSendRequest( taskAlertInfo.getAlertGroupId(), taskAlertInfo.getTitle(), taskAlertInfo.getContent(), @@ -253,7 +253,7 @@ public abstract class WorkerTaskExecuteRunnable implements Runnable { taskExecutionContext.setVarPool(JSONUtils.toJsonString(task.getParameters().getVarPool())); // upload out files and modify the "OUT FILE" property in VarPool TaskFilesTransferUtils.uploadOutputFiles(taskExecutionContext, storageOperate); - workerMessageSender.sendMessageWithRetry(taskExecutionContext, CommandType.TASK_EXECUTE_RESULT); + workerMessageSender.sendMessageWithRetry(taskExecutionContext, MessageType.TASK_EXECUTE_RESULT_MESSAGE); log.info("Send task execute result to master, the current task status: {}", taskExecutionContext.getCurrentExecutionStatus()); diff --git a/dolphinscheduler-worker/src/test/java/org/apache/dolphinscheduler/server/worker/processor/TaskDispatchProcessorTest.java b/dolphinscheduler-worker/src/test/java/org/apache/dolphinscheduler/server/worker/processor/TaskDispatchProcessorTest.java index 9276b7b3c4..2e0604f9c5 100644 --- a/dolphinscheduler-worker/src/test/java/org/apache/dolphinscheduler/server/worker/processor/TaskDispatchProcessorTest.java +++ b/dolphinscheduler-worker/src/test/java/org/apache/dolphinscheduler/server/worker/processor/TaskDispatchProcessorTest.java @@ -20,9 +20,9 @@ package org.apache.dolphinscheduler.server.worker.processor; import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager; -import org.apache.dolphinscheduler.remote.command.Command; -import org.apache.dolphinscheduler.remote.command.CommandType; -import org.apache.dolphinscheduler.remote.command.TaskDispatchCommand; +import org.apache.dolphinscheduler.remote.command.Message; +import org.apache.dolphinscheduler.remote.command.MessageType; +import org.apache.dolphinscheduler.remote.command.task.TaskDispatchMessage; import org.apache.dolphinscheduler.server.worker.config.WorkerConfig; import org.apache.dolphinscheduler.server.worker.rpc.WorkerMessageSender; import org.apache.dolphinscheduler.server.worker.rpc.WorkerRpcClient; @@ -68,16 +68,16 @@ public class TaskDispatchProcessorTest { public void process() { Channel channel = Mockito.mock(Channel.class); TaskExecutionContext taskExecutionContext = getTaskExecutionContext(); - Command dispatchCommand = createDispatchCommand(taskExecutionContext); - taskDispatchProcessor.process(channel, dispatchCommand); + Message dispatchMessage = createDispatchCommand(taskExecutionContext); + taskDispatchProcessor.process(channel, dispatchMessage); Mockito.verify(workerManagerThread, Mockito.atMostOnce()).offer(Mockito.any()); Mockito.verify(workerMessageSender, Mockito.never()).sendMessageWithRetry(taskExecutionContext, - CommandType.TASK_REJECT); + MessageType.TASK_REJECT); } - public Command createDispatchCommand(TaskExecutionContext taskExecutionContext) { - return new TaskDispatchCommand( + public Message createDispatchCommand(TaskExecutionContext taskExecutionContext) { + return new TaskDispatchMessage( taskExecutionContext, "localhost:5678", "localhost:1234",