diff --git a/.github/actions/labeler/labeler.yml b/.github/actions/labeler/labeler.yml
index fbfcb098fe..b4776198e2 100644
--- a/.github/actions/labeler/labeler.yml
+++ b/.github/actions/labeler/labeler.yml
@@ -25,7 +25,7 @@ backend:
- 'dolphinscheduler-dist/**/*'
- 'dolphinscheduler-master/**/*'
- 'dolphinscheduler-registry/**/*'
- - 'dolphinscheduler-remote/**/*'
+ - 'dolphinscheduler-extract/**/*'
- 'dolphinscheduler-scheduler-plugin/**/*'
- 'dolphinscheduler-service/**/*'
- 'dolphinscheduler-spi/**/*'
diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/pom.xml b/dolphinscheduler-alert/dolphinscheduler-alert-server/pom.xml
index 4ced9ea953..507d7acb45 100644
--- a/dolphinscheduler-alert/dolphinscheduler-alert-server/pom.xml
+++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/pom.xml
@@ -28,10 +28,7 @@
${project.artifactId}
-
- org.apache.dolphinscheduler
- dolphinscheduler-remote
-
+
org.apache.dolphinschedulerdolphinscheduler-meter
@@ -51,6 +48,11 @@
dolphinscheduler-registry-all
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-extract-alert
+
+
com.google.guavaguava
diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/rpc/AlertRequestProcessor.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/rpc/AlertOperatorImpl.java
similarity index 50%
rename from dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/rpc/AlertRequestProcessor.java
rename to dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/rpc/AlertOperatorImpl.java
index f0141a4108..36c0a5556d 100644
--- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/rpc/AlertRequestProcessor.java
+++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/rpc/AlertOperatorImpl.java
@@ -14,49 +14,34 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.dolphinscheduler.alert.rpc;
import org.apache.dolphinscheduler.alert.service.AlertBootstrapService;
-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;
+import org.apache.dolphinscheduler.extract.alert.IAlertOperator;
+import org.apache.dolphinscheduler.extract.alert.request.AlertSendRequest;
+import org.apache.dolphinscheduler.extract.alert.request.AlertSendResponse;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-import io.netty.channel.Channel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
-@Component
@Slf4j
-public final class AlertRequestProcessor implements NettyRequestProcessor {
+@Service
+public class AlertOperatorImpl implements IAlertOperator {
- private final AlertBootstrapService alertBootstrapService;
-
- public AlertRequestProcessor(AlertBootstrapService alertBootstrapService) {
- this.alertBootstrapService = alertBootstrapService;
- }
+ @Autowired
+ private AlertBootstrapService alertBootstrapService;
@Override
- public void process(Channel channel, Message message) {
- AlertSendRequest alertSendRequest = JsonSerializer.deserialize(message.getBody(), AlertSendRequest.class);
-
- log.info("Received command : {}", alertSendRequest);
-
+ public AlertSendResponse sendAlert(AlertSendRequest alertSendRequest) {
+ log.info("Received AlertSendRequest : {}", alertSendRequest);
AlertSendResponse alertSendResponse = alertBootstrapService.syncHandler(
alertSendRequest.getGroupId(),
alertSendRequest.getTitle(),
alertSendRequest.getContent(),
alertSendRequest.getWarnType());
- channel.writeAndFlush(alertSendResponse.convert2Command(message.getOpaque()));
- }
-
- @Override
- public MessageType getCommandType() {
- return MessageType.ALERT_SEND_REQUEST;
+ log.info("Handle AlertSendRequest finish: {}", alertSendResponse);
+ return alertSendResponse;
}
}
diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/rpc/AlertRpcServer.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/rpc/AlertRpcServer.java
index f5bd470359..4a8c621d30 100644
--- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/rpc/AlertRpcServer.java
+++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/rpc/AlertRpcServer.java
@@ -18,43 +18,32 @@
package org.apache.dolphinscheduler.alert.rpc;
import org.apache.dolphinscheduler.alert.config.AlertConfig;
-import org.apache.dolphinscheduler.remote.NettyRemotingServer;
-import org.apache.dolphinscheduler.remote.factory.NettyRemotingServerFactory;
-import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor;
-
-import java.util.List;
+import org.apache.dolphinscheduler.extract.base.NettyRemotingServer;
+import org.apache.dolphinscheduler.extract.base.config.NettyServerConfig;
+import org.apache.dolphinscheduler.extract.base.server.SpringServerMethodInvokerDiscovery;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
-public class AlertRpcServer implements AutoCloseable {
-
- @Autowired
- private List nettyRequestProcessors;
- @Autowired
- private AlertConfig alertConfig;
+public class AlertRpcServer extends SpringServerMethodInvokerDiscovery implements AutoCloseable {
- private NettyRemotingServer nettyRemotingServer;
+ public AlertRpcServer(AlertConfig alertConfig) {
+ super(new NettyRemotingServer(new NettyServerConfig(alertConfig.getPort())));
+ }
public void start() {
- log.info("Starting alert rpc server...");
- nettyRemotingServer = NettyRemotingServerFactory.buildNettyRemotingServer(alertConfig.getPort());
- for (NettyRequestProcessor nettyRequestProcessor : nettyRequestProcessors) {
- nettyRemotingServer.registerProcessor(nettyRequestProcessor);
- log.info("Success register netty processor: {}", nettyRequestProcessor.getClass().getName());
- }
+ log.info("Starting AlertRpcServer...");
nettyRemotingServer.start();
- log.info("Started alert rpc server...");
+ log.info("Started AlertRpcServer...");
}
@Override
- public void close() throws Exception {
- log.info("Closing alert rpc server...");
+ public void close() {
+ log.info("Closing AlertRpcServer...");
nettyRemotingServer.close();
- log.info("Closed alert rpc server...");
+ log.info("Closed AlertRpcServer...");
}
}
diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/service/AlertBootstrapService.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/service/AlertBootstrapService.java
index 3394f83097..57ef75d6d6 100644
--- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/service/AlertBootstrapService.java
+++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/service/AlertBootstrapService.java
@@ -37,7 +37,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.AlertSendResponse;
+import org.apache.dolphinscheduler.extract.alert.request.AlertSendResponse;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/runner/AlertBootstrapServiceTest.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/runner/AlertBootstrapServiceTest.java
index 745dbc9865..3819200690 100644
--- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/runner/AlertBootstrapServiceTest.java
+++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/test/java/org/apache/dolphinscheduler/alert/runner/AlertBootstrapServiceTest.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.AlertSendResponse;
+import org.apache.dolphinscheduler.extract.alert.request.AlertSendResponse;
import java.util.ArrayList;
import java.util.List;
diff --git a/dolphinscheduler-api/pom.xml b/dolphinscheduler-api/pom.xml
index 62c29d5f78..467826bc41 100644
--- a/dolphinscheduler-api/pom.xml
+++ b/dolphinscheduler-api/pom.xml
@@ -37,6 +37,7 @@
+
@@ -82,6 +83,16 @@
dolphinscheduler-storage-all
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-extract-master
+
+
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-extract-worker
+
+
org.codehaus.janinojanino
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 3d7a4c0afe..cf6df2823a 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,10 +18,15 @@
package org.apache.dolphinscheduler.api.aspect;
import org.apache.dolphinscheduler.common.enums.CacheType;
-import org.apache.dolphinscheduler.remote.command.cache.CacheExpireRequest;
-import org.apache.dolphinscheduler.service.cache.CacheNotifyService;
+import org.apache.dolphinscheduler.common.model.Server;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.IMasterCacheService;
+import org.apache.dolphinscheduler.extract.master.transportor.CacheExpireRequest;
+import org.apache.dolphinscheduler.registry.api.RegistryClient;
+import org.apache.dolphinscheduler.registry.api.enums.RegistryNodeType;
import org.apache.dolphinscheduler.service.cache.impl.CacheKeyGenerator;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Method;
@@ -65,7 +70,7 @@ public class CacheEvictAspect {
private CacheKeyGenerator cacheKeyGenerator;
@Autowired
- private CacheNotifyService cacheNotifyService;
+ private RegistryClient registryClient;
@Pointcut("@annotation(org.springframework.cache.annotation.CacheEvict)")
public void cacheEvictPointCut() {
@@ -96,7 +101,7 @@ public class CacheEvictAspect {
}
}
if (StringUtils.isNotEmpty(cacheKey)) {
- cacheNotifyService.notifyMaster(new CacheExpireRequest(cacheType, cacheKey).convert2Command());
+ notifyMaster(cacheType, cacheKey);
}
}
@@ -134,4 +139,21 @@ public class CacheEvictAspect {
}
return obj.toString();
}
+
+ private void notifyMaster(CacheType cacheType, String cacheKey) {
+ try {
+ List serverList = registryClient.getServerList(RegistryNodeType.MASTER);
+ if (CollectionUtils.isEmpty(serverList)) {
+ return;
+ }
+ for (Server server : serverList) {
+ IMasterCacheService masterCacheService = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(server.getHost() + ":" + server.getPort(), IMasterCacheService.class);
+ masterCacheService.cacheExpire(new CacheExpireRequest(cacheType, cacheKey));
+ }
+ } catch (Exception e) {
+ log.error("notify master error", e);
+ }
+
+ }
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ExecutorController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ExecutorController.java
index 5151665b34..cdfabedcae 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ExecutorController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ExecutorController.java
@@ -40,7 +40,7 @@ import org.apache.dolphinscheduler.common.enums.TaskDependType;
import org.apache.dolphinscheduler.common.enums.WarningType;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.dao.entity.User;
-import org.apache.dolphinscheduler.remote.dto.WorkflowExecuteDto;
+import org.apache.dolphinscheduler.extract.master.dto.WorkflowExecuteDto;
import org.apache.commons.lang3.StringUtils;
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 4d52cc22aa..5df321628a 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
@@ -20,24 +20,20 @@ package org.apache.dolphinscheduler.api.executor.workflow.instance.pause.pause;
import org.apache.dolphinscheduler.api.enums.ExecuteType;
import org.apache.dolphinscheduler.api.executor.ExecuteFunction;
import org.apache.dolphinscheduler.api.executor.ExecuteRuntimeException;
-import org.apache.dolphinscheduler.api.rpc.ApiRpcClient;
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.workflow.WorkflowStateEventChangeRequest;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ITaskInstanceExecutionEventListener;
+import org.apache.dolphinscheduler.extract.master.transportor.WorkflowInstanceStateChangeEvent;
public class PauseExecuteFunction implements ExecuteFunction {
private final ProcessInstanceDao processInstanceDao;
- private final ApiRpcClient apiRpcClient;
-
- public PauseExecuteFunction(ProcessInstanceDao processInstanceDao, ApiRpcClient apiRpcClient) {
+ public PauseExecuteFunction(ProcessInstanceDao processInstanceDao) {
this.processInstanceDao = processInstanceDao;
- this.apiRpcClient = apiRpcClient;
}
@Override
@@ -59,15 +55,18 @@ public class PauseExecuteFunction implements ExecuteFunction> createWorkflowInstanceExecuteFunction(ExecuteContext executeContext) {
- return CompletableFuture.completedFuture(new PauseExecuteFunction(processInstanceDao, apiRpcClient));
+ return CompletableFuture.completedFuture(new PauseExecuteFunction(processInstanceDao));
}
@Override
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/workflow/instance/stop/StopExecuteFunction.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/workflow/instance/stop/StopExecuteFunction.java
index a95a57e134..8afb18a278 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/workflow/instance/stop/StopExecuteFunction.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/workflow/instance/stop/StopExecuteFunction.java
@@ -20,14 +20,13 @@ package org.apache.dolphinscheduler.api.executor.workflow.instance.stop;
import org.apache.dolphinscheduler.api.enums.ExecuteType;
import org.apache.dolphinscheduler.api.executor.ExecuteFunction;
import org.apache.dolphinscheduler.api.executor.ExecuteRuntimeException;
-import org.apache.dolphinscheduler.api.rpc.ApiRpcClient;
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.workflow.WorkflowStateEventChangeRequest;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ITaskInstanceExecutionEventListener;
+import org.apache.dolphinscheduler.extract.master.transportor.WorkflowInstanceStateChangeEvent;
import lombok.extern.slf4j.Slf4j;
@@ -35,12 +34,9 @@ import lombok.extern.slf4j.Slf4j;
public class StopExecuteFunction implements ExecuteFunction {
private final ProcessInstanceDao processInstanceDao;
- // todo: Use ApiRpcClient instead of NettyRemotingClient
- private final ApiRpcClient apiRpcClient;
- public StopExecuteFunction(ProcessInstanceDao processInstanceDao, ApiRpcClient apiRpcClient) {
+ public StopExecuteFunction(ProcessInstanceDao processInstanceDao) {
this.processInstanceDao = processInstanceDao;
- this.apiRpcClient = apiRpcClient;
}
@Override
@@ -60,17 +56,17 @@ public class StopExecuteFunction implements ExecuteFunction> createWorkflowInstanceExecuteFunction(ExecuteContext executeContext) {
- return CompletableFuture.completedFuture(new StopExecuteFunction(processInstanceDao, apiRpcClient));
+ return CompletableFuture.completedFuture(new StopExecuteFunction(processInstanceDao));
}
@Override
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/k8s/K8sClientService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/k8s/K8sClientService.java
index 76b875ad77..b30a3cb37f 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/k8s/K8sClientService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/k8s/K8sClientService.java
@@ -18,7 +18,6 @@
package org.apache.dolphinscheduler.api.k8s;
import org.apache.dolphinscheduler.dao.entity.K8sNamespace;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
import java.util.Optional;
@@ -43,16 +42,16 @@ public class K8sClientService {
private K8sManager k8sManager;
public ResourceQuota upsertNamespaceAndResourceToK8s(K8sNamespace k8sNamespace,
- String yamlStr) throws RemotingException {
+ String yamlStr) {
if (!checkNamespaceToK8s(k8sNamespace.getNamespace(), k8sNamespace.getClusterCode())) {
- throw new RemotingException(String.format(
+ throw new RuntimeException(String.format(
"namespace %s does not exist in k8s cluster, please create namespace in k8s cluster first",
k8sNamespace.getNamespace()));
}
return upsertNamespacedResourceToK8s(k8sNamespace, yamlStr);
}
- public Optional deleteNamespaceToK8s(String name, Long clusterCode) throws RemotingException {
+ public Optional deleteNamespaceToK8s(String name, Long clusterCode) {
Optional result = getNamespaceFromK8s(name, clusterCode);
if (result.isPresent()) {
KubernetesClient client = k8sManager.getK8sClient(clusterCode);
@@ -67,7 +66,7 @@ public class K8sClientService {
}
private ResourceQuota upsertNamespacedResourceToK8s(K8sNamespace k8sNamespace,
- String yamlStr) throws RemotingException {
+ String yamlStr) {
KubernetesClient client = k8sManager.getK8sClient(k8sNamespace.getClusterCode());
@@ -93,7 +92,7 @@ public class K8sClientService {
.createOrReplace(body);
}
- private Optional getNamespaceFromK8s(String name, Long clusterCode) throws RemotingException {
+ private Optional getNamespaceFromK8s(String name, Long clusterCode) {
NamespaceList listNamespace =
k8sManager.getK8sClient(clusterCode).namespaces().list();
@@ -105,7 +104,7 @@ public class K8sClientService {
return list;
}
- private boolean checkNamespaceToK8s(String name, Long clusterCode) throws RemotingException {
+ private boolean checkNamespaceToK8s(String name, Long clusterCode) {
Optional result = getNamespaceFromK8s(name, clusterCode);
return result.isPresent();
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/k8s/K8sManager.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/k8s/K8sManager.java
index 955b73d467..9c1281f84c 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/k8s/K8sManager.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/k8s/K8sManager.java
@@ -19,7 +19,6 @@ package org.apache.dolphinscheduler.api.k8s;
import org.apache.dolphinscheduler.dao.entity.Cluster;
import org.apache.dolphinscheduler.dao.mapper.ClusterMapper;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
import org.apache.dolphinscheduler.service.utils.ClusterConfUtils;
import java.util.Hashtable;
@@ -55,7 +54,7 @@ public class K8sManager {
* @param clusterCode
* @return
*/
- public synchronized KubernetesClient getK8sClient(Long clusterCode) throws RemotingException {
+ public synchronized KubernetesClient getK8sClient(Long clusterCode) {
if (null == clusterCode) {
return null;
}
@@ -68,7 +67,7 @@ public class K8sManager {
* @return new client if need updated
*/
public synchronized KubernetesClient getAndUpdateK8sClient(Long clusterCode,
- boolean update) throws RemotingException {
+ boolean update) {
if (null == clusterCode) {
return null;
}
@@ -99,7 +98,7 @@ public class K8sManager {
}
}
- private void createK8sClientInner(Long clusterCode) throws RemotingException {
+ private void createK8sClientInner(Long clusterCode) {
Cluster cluster = clusterMapper.queryByClusterCode(clusterCode);
if (cluster == null) {
return;
@@ -111,20 +110,20 @@ public class K8sManager {
try {
client = getClient(k8sConfig);
clientMap.put(clusterCode, client);
- } catch (RemotingException e) {
+ } catch (Exception e) {
log.error("cluster code ={},fail to get k8s ApiClient: {}", clusterCode, e.getMessage());
- throw new RemotingException("fail to get k8s ApiClient:" + e.getMessage());
+ throw new RuntimeException("fail to get k8s ApiClient:" + e.getMessage());
}
}
}
- private KubernetesClient getClient(String configYaml) throws RemotingException {
+ private KubernetesClient getClient(String configYaml) throws RuntimeException {
try {
Config config = Config.fromKubeconfig(configYaml);
return new KubernetesClientBuilder().withConfig(config).build();
} catch (Exception e) {
log.error("Fail to get k8s ApiClient", e);
- throw new RemotingException("fail to get k8s ApiClient:" + e.getMessage());
+ throw new RuntimeException("fail to get k8s ApiClient:" + e.getMessage());
}
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/rpc/ApiRpcClient.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/rpc/ApiRpcClient.java
deleted file mode 100644
index f0c1ba6d6d..0000000000
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/rpc/ApiRpcClient.java
+++ /dev/null
@@ -1,41 +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.api.rpc;
-
-import org.apache.dolphinscheduler.remote.NettyRemotingClient;
-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;
-
-import org.springframework.stereotype.Component;
-
-@Component
-public class ApiRpcClient {
-
- private final NettyRemotingClient nettyRemotingClient;
-
- public ApiRpcClient() {
- this.nettyRemotingClient = new NettyRemotingClient(new NettyClientConfig());
- }
-
- public void send(Host host, Message message) throws RemotingException {
- nettyRemotingClient.send(host, message);
- }
-
-}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
index c67f790c34..408fdee7f3 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
@@ -29,7 +29,7 @@ import org.apache.dolphinscheduler.common.enums.TaskDependType;
import org.apache.dolphinscheduler.common.enums.WarningType;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.User;
-import org.apache.dolphinscheduler.remote.dto.WorkflowExecuteDto;
+import org.apache.dolphinscheduler.extract.master.dto.WorkflowExecuteDto;
import java.util.Map;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/MetricsCleanUpService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/MetricsCleanUpService.java
index 9ffa95de1d..a8971d16dd 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/MetricsCleanUpService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/MetricsCleanUpService.java
@@ -19,7 +19,7 @@ package org.apache.dolphinscheduler.api.service;
public interface MetricsCleanUpService {
- void cleanUpWorkflowMetricsByDefinitionCode(String workflowDefinitionCode);
+ void cleanUpWorkflowMetricsByDefinitionCode(Long workflowDefinitionCode);
void cleanUpApiResponseTimeMetricsByUserId(int userId);
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceImpl.java
index 61e06a5841..8c181c00fe 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceImpl.java
@@ -31,7 +31,6 @@ import org.apache.dolphinscheduler.dao.entity.K8sNamespace;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.ClusterMapper;
import org.apache.dolphinscheduler.dao.mapper.K8sNamespaceMapper;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
import org.apache.dolphinscheduler.service.utils.ClusterConfUtils;
import org.apache.commons.collections4.CollectionUtils;
@@ -321,7 +320,7 @@ public class ClusterServiceImpl extends BaseServiceImpl implements ClusterServic
&& !config.equals(ClusterConfUtils.getK8sConfig(clusterExist.getConfig()))) {
try {
k8sManager.getAndUpdateK8sClient(code, true);
- } catch (RemotingException e) {
+ } catch (Exception e) {
log.error("Update K8s error.", e);
putMsg(result, Status.K8S_CLIENT_OPS_ERROR, name);
return result;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
index ba996a46eb..be3a007d26 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
@@ -82,16 +82,17 @@ import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper;
import org.apache.dolphinscheduler.dao.mapper.TaskGroupQueueMapper;
import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
import org.apache.dolphinscheduler.dao.repository.ProcessInstanceDao;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ILogicTaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.master.IStreamingTaskOperator;
+import org.apache.dolphinscheduler.extract.master.ITaskInstanceExecutionEventListener;
+import org.apache.dolphinscheduler.extract.master.IWorkflowInstanceService;
+import org.apache.dolphinscheduler.extract.master.dto.WorkflowExecuteDto;
+import org.apache.dolphinscheduler.extract.master.transportor.StreamingTaskTriggerRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.StreamingTaskTriggerResponse;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceForceStartRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.WorkflowInstanceStateChangeEvent;
import org.apache.dolphinscheduler.plugin.task.api.TaskConstants;
-import org.apache.dolphinscheduler.remote.command.Message;
-import org.apache.dolphinscheduler.remote.command.task.TaskExecuteStartMessage;
-import org.apache.dolphinscheduler.remote.command.task.TaskForceStartRequest;
-import org.apache.dolphinscheduler.remote.command.workflow.WorkflowExecutingDataRequest;
-import org.apache.dolphinscheduler.remote.command.workflow.WorkflowExecutingDataResponse;
-import org.apache.dolphinscheduler.remote.command.workflow.WorkflowStateEventChangeRequest;
-import org.apache.dolphinscheduler.remote.dto.WorkflowExecuteDto;
-import org.apache.dolphinscheduler.remote.processor.StateEventCallbackService;
-import org.apache.dolphinscheduler.remote.utils.Host;
import org.apache.dolphinscheduler.service.command.CommandService;
import org.apache.dolphinscheduler.service.cron.CronUtils;
import org.apache.dolphinscheduler.service.exceptions.CronParseException;
@@ -164,9 +165,6 @@ public class ExecutorServiceImpl extends BaseServiceImpl implements ExecutorServ
@Autowired
private TaskDefinitionLogMapper taskDefinitionLogMapper;
- @Autowired
- private StateEventCallbackService stateEventCallbackService;
-
@Autowired
private TaskDefinitionMapper taskDefinitionMapper;
@@ -655,10 +653,12 @@ public class ExecutorServiceImpl extends BaseServiceImpl implements ExecutorServ
executionStatus.getDesc(), processInstance.getName());
// directly send the process instance state change event to target master, not guarantee the event send
// success
- WorkflowStateEventChangeRequest workflowStateEventChangeRequest = new WorkflowStateEventChangeRequest(
+ WorkflowInstanceStateChangeEvent workflowStateEventChangeRequest = new WorkflowInstanceStateChangeEvent(
processInstance.getId(), 0, processInstance.getState(), processInstance.getId(), 0);
- Host host = new Host(processInstance.getHost());
- stateEventCallbackService.sendResult(host, workflowStateEventChangeRequest.convert2Command());
+ ITaskInstanceExecutionEventListener iTaskInstanceExecutionEventListener =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(processInstance.getHost(), ITaskInstanceExecutionEventListener.class);
+ iTaskInstanceExecutionEventListener.onWorkflowInstanceInstanceStateChange(workflowStateEventChangeRequest);
putMsg(result, Status.SUCCESS);
} else {
log.error("Process instance state update error, processInstanceName:{}.", processInstance.getName());
@@ -684,9 +684,10 @@ public class ExecutorServiceImpl extends BaseServiceImpl implements ExecutorServ
taskGroupQueue.setForceStart(Flag.YES.getCode());
processService.updateTaskGroupQueue(taskGroupQueue);
log.info("Sending force start command to master: {}.", processInstance.getHost());
- stateEventCallbackService.sendResult(
- Host.of(processInstance.getHost()),
- new TaskForceStartRequest(processInstance.getId(), taskGroupQueue.getTaskId()).convert2Command());
+ ILogicTaskInstanceOperator iLogicTaskInstanceOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(processInstance.getHost(), ILogicTaskInstanceOperator.class);
+ iLogicTaskInstanceOperator.forceStartTaskInstance(
+ new TaskInstanceForceStartRequest(processInstance.getId(), taskGroupQueue.getTaskId()));
putMsg(result, Status.SUCCESS);
return result;
}
@@ -1151,19 +1152,9 @@ public class ExecutorServiceImpl extends BaseServiceImpl implements ExecutorServ
log.error("Process instance does not exist, processInstanceId:{}.", processInstanceId);
return null;
}
- Host host = new Host(processInstance.getHost());
- WorkflowExecutingDataRequest requestCommand = new WorkflowExecutingDataRequest();
- requestCommand.setProcessInstanceId(processInstanceId);
- Message message =
- stateEventCallbackService.sendSync(host, requestCommand.convert2Command());
- if (message == null) {
- log.error("Query executing process instance from master error, processInstanceId:{}.",
- processInstanceId);
- return null;
- }
- WorkflowExecutingDataResponse responseCommand =
- JSONUtils.parseObject(message.getBody(), WorkflowExecutingDataResponse.class);
- return responseCommand.getWorkflowExecuteDto();
+ IWorkflowInstanceService iWorkflowInstanceService = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(processInstance.getHost(), IWorkflowInstanceService.class);
+ return iWorkflowInstanceService.getWorkflowExecutingData(processInstanceId);
}
@Override
@@ -1183,9 +1174,9 @@ public class ExecutorServiceImpl extends BaseServiceImpl implements ExecutorServ
checkMasterExists();
// todo dispatch improvement
List masterServerList = monitorService.getServerListFromRegistry(true);
- Host host = new Host(masterServerList.get(0).getHost(), masterServerList.get(0).getPort());
+ Server server = masterServerList.get(0);
- TaskExecuteStartMessage taskExecuteStartMessage = new TaskExecuteStartMessage();
+ StreamingTaskTriggerRequest taskExecuteStartMessage = new StreamingTaskTriggerRequest();
taskExecuteStartMessage.setExecutorId(loginUser.getId());
taskExecuteStartMessage.setExecutorName(loginUser.getUserName());
taskExecuteStartMessage.setProjectCode(projectCode);
@@ -1198,15 +1189,17 @@ public class ExecutorServiceImpl extends BaseServiceImpl implements ExecutorServ
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);
+ IStreamingTaskOperator streamingTaskOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(server.getHost() + ":" + server.getPort(), IStreamingTaskOperator.class);
+ StreamingTaskTriggerResponse streamingTaskTriggerResponse =
+ streamingTaskOperator.triggerStreamingTask(taskExecuteStartMessage);
+ if (streamingTaskTriggerResponse.isSuccess()) {
+ log.info("Send task execute start command complete, response is {}.", streamingTaskOperator);
putMsg(result, Status.SUCCESS);
} else {
log.error(
- "Start to execute stream task instance error, projectCode:{}, taskDefinitionCode:{}, taskVersion:{}.",
- projectCode, taskDefinitionCode, taskDefinitionVersion);
+ "Start to execute stream task instance error, projectCode:{}, taskDefinitionCode:{}, taskVersion:{}, response: {}.",
+ projectCode, taskDefinitionCode, taskDefinitionVersion, streamingTaskTriggerResponse);
putMsg(result, Status.START_TASK_INSTANCE_ERROR);
}
return result;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/LoggerServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/LoggerServiceImpl.java
index ab55a8e1c5..99216e917f 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/LoggerServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/LoggerServiceImpl.java
@@ -36,8 +36,18 @@ import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper;
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.service.log.LogClient;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.IMasterLogService;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskInstanceLogPageQueryResponse;
+import org.apache.dolphinscheduler.extract.worker.IWorkerLogService;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceLogPageQueryResponse;
+import org.apache.dolphinscheduler.plugin.task.api.utils.TaskUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
@@ -67,9 +77,6 @@ public class LoggerServiceImpl extends BaseServiceImpl implements LoggerService
@Autowired
private TaskInstanceDao taskInstanceDao;
- @Autowired
- private LogClient logClient;
-
@Autowired
ProjectMapper projectMapper;
@@ -203,25 +210,46 @@ public class LoggerServiceImpl extends BaseServiceImpl implements LoggerService
* @return log string data
*/
private String queryLog(TaskInstance taskInstance, int skipLineNum, int limit) {
- Host host = Host.of(taskInstance.getHost());
- String logPath = taskInstance.getLogPath();
-
- log.info("Query task instance log, taskInstanceId:{}, taskInstanceName:{}, host:{}, logPath:{}, port:{}",
- taskInstance.getId(), taskInstance.getName(), host.getIp(), logPath, host.getPort());
-
+ final String logPath = taskInstance.getLogPath();
+ final String host = taskInstance.getHost();
+ log.info("Query task instance log, taskInstanceId:{}, taskInstanceName:{}, host: {}, logPath:{}",
+ taskInstance.getId(), taskInstance.getName(), taskInstance.getHost(), logPath);
StringBuilder sb = new StringBuilder();
if (skipLineNum == 0) {
String head = String.format(LOG_HEAD_FORMAT,
logPath,
- host,
+ taskInstance.getHost(),
Constants.SYSTEM_LINE_SEPARATOR);
sb.append(head);
}
- String logContent = logClient
- .rollViewLog(host.getIp(), host.getPort(), logPath, skipLineNum, limit);
-
- if (skipLineNum == 0 && StringUtils.isEmpty(logContent) && RemoteLogUtils.isRemoteLoggingEnable()) {
+ String logContent = null;
+ if (TaskUtils.isLogicTask(taskInstance.getTaskType())) {
+ IMasterLogService masterLogService = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), IMasterLogService.class);
+ try {
+ LogicTaskInstanceLogPageQueryRequest logicTaskInstanceLogPageQueryRequest =
+ new LogicTaskInstanceLogPageQueryRequest(taskInstance.getId(), logPath, skipLineNum, limit);
+ LogicTaskInstanceLogPageQueryResponse logicTaskInstanceLogPageQueryResponse =
+ masterLogService.pageQueryLogicTaskInstanceLog(logicTaskInstanceLogPageQueryRequest);
+ logContent = logicTaskInstanceLogPageQueryResponse.getLogContent();
+ } catch (Exception ex) {
+ log.error("Query LogicTaskInstance log error", ex);
+ }
+ } else {
+ IWorkerLogService iWorkerLogService = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(host, IWorkerLogService.class);
+ try {
+ TaskInstanceLogPageQueryRequest taskInstanceLogPageQueryRequest =
+ new TaskInstanceLogPageQueryRequest(taskInstance.getId(), logPath, skipLineNum, limit);
+ TaskInstanceLogPageQueryResponse taskInstanceLogPageQueryResponse =
+ iWorkerLogService.pageQueryTaskInstanceLog(taskInstanceLogPageQueryRequest);
+ logContent = taskInstanceLogPageQueryResponse.getLogContent();
+ } catch (Exception ex) {
+ log.error("Query LogicTaskInstance log error", ex);
+ }
+ }
+ if (logContent == null && RemoteLogUtils.isRemoteLoggingEnable()) {
// When getting the log for the first time (skipLineNum=0) returns empty, get the log from remote target
try {
log.info("Get log {} from remote target", logPath);
@@ -233,9 +261,7 @@ public class LoggerServiceImpl extends BaseServiceImpl implements LoggerService
log.error("Error while getting log from remote target", e);
}
}
-
sb.append(logContent);
-
return sb.toString();
}
@@ -246,7 +272,7 @@ public class LoggerServiceImpl extends BaseServiceImpl implements LoggerService
* @return log byte array
*/
private byte[] getLogBytes(TaskInstance taskInstance) {
- Host host = Host.of(taskInstance.getHost());
+ String host = taskInstance.getHost();
String logPath = taskInstance.getLogPath();
byte[] head = String.format(LOG_HEAD_FORMAT,
@@ -254,9 +280,34 @@ public class LoggerServiceImpl extends BaseServiceImpl implements LoggerService
host,
Constants.SYSTEM_LINE_SEPARATOR).getBytes(StandardCharsets.UTF_8);
- byte[] logBytes = logClient.getLogBytes(host.getIp(), host.getPort(), logPath);
+ byte[] logBytes = new byte[0];
+ if (TaskUtils.isLogicTask(taskInstance.getTaskType())) {
+ IMasterLogService masterLogService = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), IMasterLogService.class);
+ try {
+ LogicTaskInstanceLogFileDownloadRequest logicTaskInstanceLogFileDownloadRequest =
+ new LogicTaskInstanceLogFileDownloadRequest(taskInstance.getId(), logPath);
+ LogicTaskInstanceLogFileDownloadResponse logicTaskInstanceLogFileDownloadResponse =
+ masterLogService.getLogicTaskInstanceWholeLogFileBytes(logicTaskInstanceLogFileDownloadRequest);
+ logBytes = logicTaskInstanceLogFileDownloadResponse.getLogBytes();
+ } catch (Exception ex) {
+ log.error("Query LogicTaskInstance log error", ex);
+ }
+ } else {
+ IWorkerLogService iWorkerLogService = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(host, IWorkerLogService.class);
+ try {
+ TaskInstanceLogFileDownloadRequest taskInstanceLogFileDownloadRequest =
+ new TaskInstanceLogFileDownloadRequest(taskInstance.getId(), logPath);
+ TaskInstanceLogFileDownloadResponse taskInstanceWholeLogFileBytes =
+ iWorkerLogService.getTaskInstanceWholeLogFileBytes(taskInstanceLogFileDownloadRequest);
+ logBytes = taskInstanceWholeLogFileBytes.getLogBytes();
+ } catch (Exception ex) {
+ log.error("Query LogicTaskInstance log error", ex);
+ }
+ }
- if (logBytes.length == 0 && RemoteLogUtils.isRemoteLoggingEnable()) {
+ if ((logBytes == null || logBytes.length == 0) && RemoteLogUtils.isRemoteLoggingEnable()) {
// get task log from remote target
try {
log.info("Get log {} from remote target", logPath);
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 70b19ddeac..a7ad669e3b 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
@@ -18,13 +18,12 @@
package org.apache.dolphinscheduler.api.service.impl;
import org.apache.dolphinscheduler.api.metrics.ApiServerMetrics;
-import org.apache.dolphinscheduler.api.rpc.ApiRpcClient;
import org.apache.dolphinscheduler.api.service.MetricsCleanUpService;
import org.apache.dolphinscheduler.common.model.Server;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.IWorkflowInstanceService;
import org.apache.dolphinscheduler.registry.api.RegistryClient;
import org.apache.dolphinscheduler.registry.api.enums.RegistryNodeType;
-import org.apache.dolphinscheduler.remote.command.workflow.WorkflowMetricsCleanUpRequest;
-import org.apache.dolphinscheduler.remote.utils.Host;
import java.util.List;
@@ -37,26 +36,27 @@ import org.springframework.stereotype.Service;
@Slf4j
public class MetricsCleanUpServiceImpl implements MetricsCleanUpService {
- @Autowired
- private ApiRpcClient apiRpcClient;
-
@Autowired
private RegistryClient registryClient;
@Override
- public void cleanUpWorkflowMetricsByDefinitionCode(String workflowDefinitionCode) {
- WorkflowMetricsCleanUpRequest workflowMetricsCleanUpRequest = new WorkflowMetricsCleanUpRequest();
- workflowMetricsCleanUpRequest.setProcessDefinitionCode(workflowDefinitionCode);
+ public void cleanUpWorkflowMetricsByDefinitionCode(Long workflowDefinitionCode) {
List masterNodeList = registryClient.getServerList(RegistryNodeType.MASTER);
for (Server server : masterNodeList) {
- try {
- final String host = String.format("%s:%s", server.getHost(), server.getPort());
- 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 {}",
- server.getHost(), workflowDefinitionCode, e.getMessage());
- }
+ cleanUpWorkflowMetrics(server, workflowDefinitionCode);
+ }
+ }
+
+ private void cleanUpWorkflowMetrics(Server server, Long workflowDefinitionCode) {
+ try {
+ IWorkflowInstanceService iWorkflowInstanceService =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance().getProxyClient(
+ String.format("%s:%s", server.getHost(), server.getPort()), IWorkflowInstanceService.class);
+ iWorkflowInstanceService.clearWorkflowMetrics(workflowDefinitionCode);
+ } catch (Exception e) {
+ log.error(
+ "Fail to clean up workflow related metrics on {} when deleting workflow definition {}, error message {}",
+ server.getHost(), workflowDefinitionCode, e.getMessage());
}
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
index c26c9bb2c9..d98d7b75fc 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
@@ -984,7 +984,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
for (ProcessDefinition process : processDefinitionList) {
try {
this.deleteProcessDefinitionByCode(loginUser, process.getCode());
- metricsCleanUpService.cleanUpWorkflowMetricsByDefinitionCode(String.valueOf(process.getCode()));
+ metricsCleanUpService.cleanUpWorkflowMetricsByDefinitionCode(process.getCode());
} catch (Exception e) {
throw new ServiceException(Status.DELETE_PROCESS_DEFINE_ERROR, process.getName(), e.getMessage());
}
@@ -1069,7 +1069,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
// we delete the workflow definition at last to avoid using transaction here.
// If delete error, we can call this interface again.
processDefinitionDao.deleteByWorkflowDefinitionCode(processDefinition.getCode());
- metricsCleanUpService.cleanUpWorkflowMetricsByDefinitionCode(String.valueOf(code));
+ metricsCleanUpService.cleanUpWorkflowMetricsByDefinitionCode(code);
log.info("Success delete workflow definition workflowDefinitionCode: {}", code);
}
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 7551e3a1fa..91156a6890 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
@@ -43,12 +43,17 @@ import org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper;
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.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.IMasterLogService;
+import org.apache.dolphinscheduler.extract.worker.IStreamingTaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.worker.ITaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.worker.IWorkerLogService;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceKillRequest;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceKillResponse;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceTriggerSavepointRequest;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceTriggerSavepointResponse;
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
-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;
+import org.apache.dolphinscheduler.plugin.task.api.utils.TaskUtils;
import org.apache.dolphinscheduler.service.process.ProcessService;
import org.apache.commons.lang3.StringUtils;
@@ -98,12 +103,6 @@ public class TaskInstanceServiceImpl extends BaseServiceImpl implements TaskInst
@Autowired
TaskDefinitionMapper taskDefinitionMapper;
- @Autowired
- private StateEventCallbackService stateEventCallbackService;
-
- @Autowired
- private LogClient logClient;
-
@Autowired
private DqExecuteResultDao dqExecuteResultDao;
@@ -290,13 +289,13 @@ public class TaskInstanceServiceImpl extends BaseServiceImpl implements TaskInst
putMsg(result, Status.TASK_INSTANCE_NOT_FOUND);
return result;
}
-
- TaskSavePointRequest command = new TaskSavePointRequest(taskInstanceId);
-
- Host host = new Host(taskInstance.getHost());
- stateEventCallbackService.sendResult(host, command.convert2Command());
+ IStreamingTaskInstanceOperator streamingTaskInstanceOperator =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), IStreamingTaskInstanceOperator.class);
+ TaskInstanceTriggerSavepointResponse taskInstanceTriggerSavepointResponse =
+ streamingTaskInstanceOperator.triggerSavepoint(new TaskInstanceTriggerSavepointRequest(taskInstanceId));
+ log.info("StreamingTaskInstance trigger savepoint response: {}", taskInstanceTriggerSavepointResponse);
putMsg(result, Status.SUCCESS);
-
return result;
}
@@ -322,11 +321,14 @@ public class TaskInstanceServiceImpl extends BaseServiceImpl implements TaskInst
return result;
}
- TaskKillRequest command = new TaskKillRequest(taskInstanceId);
- Host host = new Host(taskInstance.getHost());
- stateEventCallbackService.sendResult(host, command.convert2Command());
- putMsg(result, Status.SUCCESS);
+ // todo: we only support streaming task for now
+ ITaskInstanceOperator iTaskInstanceOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), ITaskInstanceOperator.class);
+ TaskInstanceKillResponse taskInstanceKillResponse =
+ iTaskInstanceOperator.killTask(new TaskInstanceKillRequest(taskInstanceId));
+ log.info("TaskInstance kill response: {}", taskInstanceKillResponse);
+ putMsg(result, Status.SUCCESS);
return result;
}
@@ -378,7 +380,15 @@ public class TaskInstanceServiceImpl extends BaseServiceImpl implements TaskInst
for (TaskInstance taskInstance : needToDeleteTaskInstances) {
// delete log
if (StringUtils.isNotEmpty(taskInstance.getLogPath())) {
- logClient.removeTaskLog(Host.of(taskInstance.getHost()), taskInstance.getLogPath());
+ if (TaskUtils.isLogicTask(taskInstance.getTaskType())) {
+ IMasterLogService masterLogService = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), IMasterLogService.class);
+ masterLogService.removeLogicTaskInstanceLog(taskInstance.getLogPath());
+ } else {
+ IWorkerLogService workerLogService = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), IWorkerLogService.class);
+ workerLogService.removeTaskInstanceLog(taskInstance.getLogPath());
+ }
}
}
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/k8s/K8sManagerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/k8s/K8sManagerTest.java
index 8243cbff51..e08e8cc797 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/k8s/K8sManagerTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/k8s/K8sManagerTest.java
@@ -19,7 +19,6 @@ package org.apache.dolphinscheduler.api.k8s;
import org.apache.dolphinscheduler.dao.entity.Cluster;
import org.apache.dolphinscheduler.dao.mapper.ClusterMapper;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
import java.util.ArrayList;
import java.util.List;
@@ -57,7 +56,7 @@ public class K8sManagerTest {
}
@Test
- public void getK8sClient() throws RemotingException {
+ public void getK8sClient() {
Mockito.when(clusterMapper.selectList(Mockito.any())).thenReturn(getClusterList());
KubernetesClient result = k8sManager.getK8sClient(1L);
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ClusterServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ClusterServiceTest.java
index ea1f930b2d..deb04f4199 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ClusterServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ClusterServiceTest.java
@@ -28,7 +28,6 @@ import org.apache.dolphinscheduler.dao.entity.Cluster;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.ClusterMapper;
import org.apache.dolphinscheduler.dao.mapper.K8sNamespaceMapper;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
import org.apache.commons.collections4.CollectionUtils;
@@ -122,7 +121,7 @@ public class ClusterServiceTest {
}
@Test
- public void testUpdateClusterByCode() throws RemotingException {
+ public void testUpdateClusterByCode() {
User loginUser = getGeneralUser();
Map result =
clusterService.updateClusterByCode(loginUser, 1L, clusterName, getConfig(), getDesc());
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 ff2aad42cc..d7a65115de 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
@@ -67,7 +67,6 @@ import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper;
import org.apache.dolphinscheduler.dao.mapper.TaskGroupQueueMapper;
import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
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;
@@ -161,9 +160,6 @@ public class ExecuteFunctionServiceTest {
@Mock
private ProcessDefinitionService processDefinitionService;
- @Mock
- private StateEventCallbackService stateEventCallbackService;
-
private int processDefinitionId = 1;
private int processDefinitionVersion = 1;
@@ -258,13 +254,6 @@ public class ExecuteFunctionServiceTest {
.thenReturn(processTaskRelations);
}
- @Test
- public void testForceStartTaskInstance() {
-
- Map result = executorService.forceStartTaskInstance(loginUser, taskQueueId);
- Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
- }
-
/**
* not complement
*/
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java
index 8b0594faf6..0cabfdebd1 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java
@@ -33,7 +33,6 @@ import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper;
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
-import org.apache.dolphinscheduler.service.log.LogClient;
import java.text.MessageFormat;
import java.util.HashMap;
@@ -75,9 +74,6 @@ public class LoggerServiceTest {
@Mock
private TaskDefinitionMapper taskDefinitionMapper;
- @Mock
- private LogClient logClient;
-
@Test
public void testQueryLog() {
@@ -134,6 +130,7 @@ public class LoggerServiceTest {
User loginUser = new User();
loginUser.setId(1);
TaskInstance taskInstance = new TaskInstance();
+ taskInstance.setId(1);
taskInstance.setExecutorId(loginUser.getId() + 1);
Mockito.when(taskInstanceDao.queryById(1)).thenReturn(taskInstance);
@@ -179,11 +176,9 @@ public class LoggerServiceTest {
// SUCCESS
Mockito.doNothing().when(projectService).checkProjectAndAuthThrowException(loginUser, project, DOWNLOAD_LOG);
- Mockito.when(logClient.getLogBytes(Mockito.anyString(), Mockito.anyInt(), Mockito.anyString()))
- .thenReturn(new byte[0]);
Mockito.when(projectMapper.queryProjectByTaskInstanceId(1)).thenReturn(project);
byte[] result = loggerService.getLogBytes(loginUser, 1);
- Assertions.assertEquals(62, result.length);
+ Assertions.assertEquals(47, result.length);
}
@Test
@@ -238,8 +233,6 @@ public class LoggerServiceTest {
.thenReturn(result);
Mockito.when(taskInstanceDao.queryById(1)).thenReturn(taskInstance);
Mockito.when(taskDefinitionMapper.queryByCode(taskInstance.getTaskCode())).thenReturn(taskDefinition);
- Mockito.when(logClient.getLogBytes(Mockito.anyString(), Mockito.anyInt(), Mockito.anyString()))
- .thenReturn(new byte[0]);
loggerService.getLogBytes(loginUser, projectCode, 1);
}
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
index 62d5496d05..705642a88d 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
@@ -472,7 +472,7 @@ public class ProcessDefinitionServiceTest extends BaseServiceTestTool {
@Test
public void deleteProcessDefinitionByCodeTest() {
Mockito.when(projectMapper.queryByCode(projectCode)).thenReturn(getProject(projectCode));
- Mockito.doNothing().when(metricsCleanUpService).cleanUpWorkflowMetricsByDefinitionCode(String.valueOf(46L));
+ Mockito.doNothing().when(metricsCleanUpService).cleanUpWorkflowMetricsByDefinitionCode(46L);
Project project = getProject(projectCode);
@@ -520,7 +520,7 @@ public class ProcessDefinitionServiceTest extends BaseServiceTestTool {
Mockito.when(workFlowLineageService.queryTaskDepOnProcess(project.getCode(), processDefinition.getCode()))
.thenReturn(Collections.emptySet());
processDefinitionService.deleteProcessDefinitionByCode(user, 46L);
- Mockito.verify(metricsCleanUpService, times(1)).cleanUpWorkflowMetricsByDefinitionCode(String.valueOf(46L));
+ Mockito.verify(metricsCleanUpService, times(1)).cleanUpWorkflowMetricsByDefinitionCode(46L);
// scheduler online
Schedule schedule = getSchedule();
@@ -547,7 +547,7 @@ public class ProcessDefinitionServiceTest extends BaseServiceTestTool {
Mockito.when(workFlowLineageService.queryTaskDepOnProcess(project.getCode(), processDefinition.getCode()))
.thenReturn(Collections.emptySet());
Assertions.assertDoesNotThrow(() -> processDefinitionService.deleteProcessDefinitionByCode(user, 46L));
- Mockito.verify(metricsCleanUpService, times(2)).cleanUpWorkflowMetricsByDefinitionCode(String.valueOf(46L));
+ Mockito.verify(metricsCleanUpService, times(2)).cleanUpWorkflowMetricsByDefinitionCode(46L);
}
@Test
@@ -596,11 +596,11 @@ public class ProcessDefinitionServiceTest extends BaseServiceTestTool {
Mockito.when(workFlowLineageService.queryTaskDepOnProcess(project.getCode(), process.getCode()))
.thenReturn(Collections.emptySet());
putMsg(result, Status.SUCCESS, projectCode);
- Mockito.doNothing().when(metricsCleanUpService).cleanUpWorkflowMetricsByDefinitionCode(String.valueOf(11L));
+ Mockito.doNothing().when(metricsCleanUpService).cleanUpWorkflowMetricsByDefinitionCode(11L);
Map deleteSuccess =
processDefinitionService.batchDeleteProcessDefinitionByCodes(user, projectCode, singleCodes);
Assertions.assertEquals(Status.SUCCESS, deleteSuccess.get(Constants.STATUS));
- Mockito.verify(metricsCleanUpService, times(2)).cleanUpWorkflowMetricsByDefinitionCode(String.valueOf(11L));
+ Mockito.verify(metricsCleanUpService, times(2)).cleanUpWorkflowMetricsByDefinitionCode(11L);
}
@Test
diff --git a/dolphinscheduler-common/pom.xml b/dolphinscheduler-common/pom.xml
index 0254e6c43a..44f8ab65ad 100644
--- a/dolphinscheduler-common/pom.xml
+++ b/dolphinscheduler-common/pom.xml
@@ -140,6 +140,16 @@
system-lambda
+
+
+ ch.qos.logback
+ logback-classic
+
+
+ ch.qos.logback
+ logback-core
+
+
com.google.cloudgoogle-cloud-storage
diff --git a/dolphinscheduler-dist/release-docs/LICENSE b/dolphinscheduler-dist/release-docs/LICENSE
index ab26aeda4a..53e23d938a 100644
--- a/dolphinscheduler-dist/release-docs/LICENSE
+++ b/dolphinscheduler-dist/release-docs/LICENSE
@@ -222,7 +222,6 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
avro 1.7.7: https://github.com/apache/avro, Apache 2.0
bonecp 0.8.0.RELEASE: https://github.com/wwadge/bonecp, Apache 2.0
bucket4j-core 6.2.0: https://mvnrepository.com/artifact/com.github.vladimir-bukhtoyarov/bucket4j-core, Apache 2.0
- byte-buddy 1.9.16: https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy/1.9.16, Apache 2.0
caffeine 2.9.3: https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine/2.9.3, Apache 2.0
classmate 1.5.1: https://mvnrepository.com/artifact/com.fasterxml/classmate/1.5.1, Apache 2.0
clickhouse-jdbc 0.4.6: https://mvnrepository.com/artifact/com.clickhouse/clickhouse-jdbc/0.4.6, Apache 2.0
@@ -408,10 +407,6 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
woodstox-core 5.3.0: https://mvnrepository.com/artifact/com.fasterxml.woodstox/woodstox-core/5.3.0, Apache 2.0
zookeeper 3.8.0: https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper/3.8.0, Apache 2.0
presto-jdbc 0.238.1 https://mvnrepository.com/artifact/com.facebook.presto/presto-jdbc/0.238.1
- protostuff-core 1.7.2: https://github.com/protostuff/protostuff/protostuff-core Apache-2.0
- protostuff-runtime 1.7.2: https://github.com/protostuff/protostuff/protostuff-core Apache-2.0
- protostuff-api 1.7.2: https://github.com/protostuff/protostuff/protostuff-api Apache-2.0
- protostuff-collectionschema 1.7.2: https://github.com/protostuff/protostuff/protostuff-collectionschema Apache-2.0
prometheus client_java(simpleclient) 0.15.0: https://github.com/prometheus/client_java, Apache 2.0
snowflake snowflake-2010: https://github.com/twitter-archive/snowflake/tree/snowflake-2010, Apache 2.0
trino-jdbc 402: https://mvnrepository.com/artifact/io.trino/trino-jdbc/402, Apache 2.0
@@ -712,12 +707,6 @@ The following components are provided under a MPL 1.1 license. See project link
The text of each license is also included at licenses/LICENSE-[project].txt.
jamon-runtime 2.3.1: https://mvnrepository.com/artifact/org.jamon/jamon-runtime/2.3.1, MPL-1.1
- javassist 3.27.0-GA: https://github.com/jboss-javassist/javassist, MPL-1.1
-
-========================================
-WTFPL License
-========================================
- reflections 0.9.12: https://github.com/ronmamo/reflections WTFPL
========================================
CC0-1.0 licenses
diff --git a/dolphinscheduler-dist/release-docs/NOTICE b/dolphinscheduler-dist/release-docs/NOTICE
index 1c1a226d5b..3228e3ff2c 100644
--- a/dolphinscheduler-dist/release-docs/NOTICE
+++ b/dolphinscheduler-dist/release-docs/NOTICE
@@ -515,34 +515,6 @@ The Apache Software Foundation (http://www.apache.org/).
--------------------------------------------------------------------------------
-==============================================================
- protostuff
- Copyright 2009 David Yu dyuproject@gmail.com
-==============================================================
-
-protobuf is copyright Google inc unless otherwise noted.
-It is licensed under the BSD license.
-
-jackson-core-asl is copyright FasterXml unless otherwise noted.
-It is licensed under the apache 2.0 license.
-
-antlr is copyright Terence Parr unless otherwise noted.
-It is licensed under the BSD license.
-
-stringtemplate is copyright Terence Parr unless otherwise noted.
-It is licensed under the BSD license.
-
-velocity is licensed under the apache 2.0 license.
-
-B64Code.java is copyright Mort Bay Consulting Pty Ltd unless otherwise noted.
-It is licensed under the apache 2.0 license.
-
-jarjar is copyright Google inc unless otherwise noted.
-It is licensed under the apache 2.0 license.
-
-guava is copyright Google inc unless otherwise noted.
-It is licensed under the apache 2.0 license.
-
This product includes parquet-tools, initially developed at ARRIS, Inc. with
the following copyright notice:
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-byte-buddy.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-byte-buddy.txt
deleted file mode 100644
index 8f71f43fee..0000000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-byte-buddy.txt
+++ /dev/null
@@ -1,202 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed 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.
-
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-javassist.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-javassist.txt
deleted file mode 100644
index 8b7c1537ba..0000000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-javassist.txt
+++ /dev/null
@@ -1,469 +0,0 @@
- MOZILLA PUBLIC LICENSE
- Version 1.1
-
- ---------------
-
-1. Definitions.
-
- 1.0.1. "Commercial Use" means distribution or otherwise making the
- Covered Code available to a third party.
-
- 1.1. "Contributor" means each entity that creates or contributes to
- the creation of Modifications.
-
- 1.2. "Contributor Version" means the combination of the Original
- Code, prior Modifications used by a Contributor, and the Modifications
- made by that particular Contributor.
-
- 1.3. "Covered Code" means the Original Code or Modifications or the
- combination of the Original Code and Modifications, in each case
- including portions thereof.
-
- 1.4. "Electronic Distribution Mechanism" means a mechanism generally
- accepted in the software development community for the electronic
- transfer of data.
-
- 1.5. "Executable" means Covered Code in any form other than Source
- Code.
-
- 1.6. "Initial Developer" means the individual or entity identified
- as the Initial Developer in the Source Code notice required by Exhibit
- A.
-
- 1.7. "Larger Work" means a work which combines Covered Code or
- portions thereof with code not governed by the terms of this License.
-
- 1.8. "License" means this document.
-
- 1.8.1. "Licensable" means having the right to grant, to the maximum
- extent possible, whether at the time of the initial grant or
- subsequently acquired, any and all of the rights conveyed herein.
-
- 1.9. "Modifications" means any addition to or deletion from the
- substance or structure of either the Original Code or any previous
- Modifications. When Covered Code is released as a series of files, a
- Modification is:
- A. Any addition to or deletion from the contents of a file
- containing Original Code or previous Modifications.
-
- B. Any new file that contains any part of the Original Code or
- previous Modifications.
-
- 1.10. "Original Code" means Source Code of computer software code
- which is described in the Source Code notice required by Exhibit A as
- Original Code, and which, at the time of its release under this
- License is not already Covered Code governed by this License.
-
- 1.10.1. "Patent Claims" means any patent claim(s), now owned or
- hereafter acquired, including without limitation, method, process,
- and apparatus claims, in any patent Licensable by grantor.
-
- 1.11. "Source Code" means the preferred form of the Covered Code for
- making modifications to it, including all modules it contains, plus
- any associated interface definition files, scripts used to control
- compilation and installation of an Executable, or source code
- differential comparisons against either the Original Code or another
- well known, available Covered Code of the Contributor's choice. The
- Source Code can be in a compressed or archival form, provided the
- appropriate decompression or de-archiving software is widely available
- for no charge.
-
- 1.12. "You" (or "Your") means an individual or a legal entity
- exercising rights under, and complying with all of the terms of, this
- License or a future version of this License issued under Section 6.1.
- For legal entities, "You" includes any entity which controls, is
- controlled by, or is under common control with You. For purposes of
- this definition, "control" means (a) the power, direct or indirect,
- to cause the direction or management of such entity, whether by
- contract or otherwise, or (b) ownership of more than fifty percent
- (50%) of the outstanding shares or beneficial ownership of such
- entity.
-
-2. Source Code License.
-
- 2.1. The Initial Developer Grant.
- The Initial Developer hereby grants You a world-wide, royalty-free,
- non-exclusive license, subject to third party intellectual property
- claims:
- (a) under intellectual property rights (other than patent or
- trademark) Licensable by Initial Developer to use, reproduce,
- modify, display, perform, sublicense and distribute the Original
- Code (or portions thereof) with or without Modifications, and/or
- as part of a Larger Work; and
-
- (b) under Patents Claims infringed by the making, using or
- selling of Original Code, to make, have made, use, practice,
- sell, and offer for sale, and/or otherwise dispose of the
- Original Code (or portions thereof).
-
- (c) the licenses granted in this Section 2.1(a) and (b) are
- effective on the date Initial Developer first distributes
- Original Code under the terms of this License.
-
- (d) Notwithstanding Section 2.1(b) above, no patent license is
- granted: 1) for code that You delete from the Original Code; 2)
- separate from the Original Code; or 3) for infringements caused
- by: i) the modification of the Original Code or ii) the
- combination of the Original Code with other software or devices.
-
- 2.2. Contributor Grant.
- Subject to third party intellectual property claims, each Contributor
- hereby grants You a world-wide, royalty-free, non-exclusive license
-
- (a) under intellectual property rights (other than patent or
- trademark) Licensable by Contributor, to use, reproduce, modify,
- display, perform, sublicense and distribute the Modifications
- created by such Contributor (or portions thereof) either on an
- unmodified basis, with other Modifications, as Covered Code
- and/or as part of a Larger Work; and
-
- (b) under Patent Claims infringed by the making, using, or
- selling of Modifications made by that Contributor either alone
- and/or in combination with its Contributor Version (or portions
- of such combination), to make, use, sell, offer for sale, have
- made, and/or otherwise dispose of: 1) Modifications made by that
- Contributor (or portions thereof); and 2) the combination of
- Modifications made by that Contributor with its Contributor
- Version (or portions of such combination).
-
- (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
- effective on the date Contributor first makes Commercial Use of
- the Covered Code.
-
- (d) Notwithstanding Section 2.2(b) above, no patent license is
- granted: 1) for any code that Contributor has deleted from the
- Contributor Version; 2) separate from the Contributor Version;
- 3) for infringements caused by: i) third party modifications of
- Contributor Version or ii) the combination of Modifications made
- by that Contributor with other software (except as part of the
- Contributor Version) or other devices; or 4) under Patent Claims
- infringed by Covered Code in the absence of Modifications made by
- that Contributor.
-
-3. Distribution Obligations.
-
- 3.1. Application of License.
- The Modifications which You create or to which You contribute are
- governed by the terms of this License, including without limitation
- Section 2.2. The Source Code version of Covered Code may be
- distributed only under the terms of this License or a future version
- of this License released under Section 6.1, and You must include a
- copy of this License with every copy of the Source Code You
- distribute. You may not offer or impose any terms on any Source Code
- version that alters or restricts the applicable version of this
- License or the recipients' rights hereunder. However, You may include
- an additional document offering the additional rights described in
- Section 3.5.
-
- 3.2. Availability of Source Code.
- Any Modification which You create or to which You contribute must be
- made available in Source Code form under the terms of this License
- either on the same media as an Executable version or via an accepted
- Electronic Distribution Mechanism to anyone to whom you made an
- Executable version available; and if made available via Electronic
- Distribution Mechanism, must remain available for at least twelve (12)
- months after the date it initially became available, or at least six
- (6) months after a subsequent version of that particular Modification
- has been made available to such recipients. You are responsible for
- ensuring that the Source Code version remains available even if the
- Electronic Distribution Mechanism is maintained by a third party.
-
- 3.3. Description of Modifications.
- You must cause all Covered Code to which You contribute to contain a
- file documenting the changes You made to create that Covered Code and
- the date of any change. You must include a prominent statement that
- the Modification is derived, directly or indirectly, from Original
- Code provided by the Initial Developer and including the name of the
- Initial Developer in (a) the Source Code, and (b) in any notice in an
- Executable version or related documentation in which You describe the
- origin or ownership of the Covered Code.
-
- 3.4. Intellectual Property Matters
- (a) Third Party Claims.
- If Contributor has knowledge that a license under a third party's
- intellectual property rights is required to exercise the rights
- granted by such Contributor under Sections 2.1 or 2.2,
- Contributor must include a text file with the Source Code
- distribution titled "LEGAL" which describes the claim and the
- party making the claim in sufficient detail that a recipient will
- know whom to contact. If Contributor obtains such knowledge after
- the Modification is made available as described in Section 3.2,
- Contributor shall promptly modify the LEGAL file in all copies
- Contributor makes available thereafter and shall take other steps
- (such as notifying appropriate mailing lists or newsgroups)
- reasonably calculated to inform those who received the Covered
- Code that new knowledge has been obtained.
-
- (b) Contributor APIs.
- If Contributor's Modifications include an application programming
- interface and Contributor has knowledge of patent licenses which
- are reasonably necessary to implement that API, Contributor must
- also include this information in the LEGAL file.
-
- (c) Representations.
- Contributor represents that, except as disclosed pursuant to
- Section 3.4(a) above, Contributor believes that Contributor's
- Modifications are Contributor's original creation(s) and/or
- Contributor has sufficient rights to grant the rights conveyed by
- this License.
-
- 3.5. Required Notices.
- You must duplicate the notice in Exhibit A in each file of the Source
- Code. If it is not possible to put such notice in a particular Source
- Code file due to its structure, then You must include such notice in a
- location (such as a relevant directory) where a user would be likely
- to look for such a notice. If You created one or more Modification(s)
- You may add your name as a Contributor to the notice described in
- Exhibit A. You must also duplicate this License in any documentation
- for the Source Code where You describe recipients' rights or ownership
- rights relating to Covered Code. You may choose to offer, and to
- charge a fee for, warranty, support, indemnity or liability
- obligations to one or more recipients of Covered Code. However, You
- may do so only on Your own behalf, and not on behalf of the Initial
- Developer or any Contributor. You must make it absolutely clear than
- any such warranty, support, indemnity or liability obligation is
- offered by You alone, and You hereby agree to indemnify the Initial
- Developer and every Contributor for any liability incurred by the
- Initial Developer or such Contributor as a result of warranty,
- support, indemnity or liability terms You offer.
-
- 3.6. Distribution of Executable Versions.
- You may distribute Covered Code in Executable form only if the
- requirements of Section 3.1-3.5 have been met for that Covered Code,
- and if You include a notice stating that the Source Code version of
- the Covered Code is available under the terms of this License,
- including a description of how and where You have fulfilled the
- obligations of Section 3.2. The notice must be conspicuously included
- in any notice in an Executable version, related documentation or
- collateral in which You describe recipients' rights relating to the
- Covered Code. You may distribute the Executable version of Covered
- Code or ownership rights under a license of Your choice, which may
- contain terms different from this License, provided that You are in
- compliance with the terms of this License and that the license for the
- Executable version does not attempt to limit or alter the recipient's
- rights in the Source Code version from the rights set forth in this
- License. If You distribute the Executable version under a different
- license You must make it absolutely clear that any terms which differ
- from this License are offered by You alone, not by the Initial
- Developer or any Contributor. You hereby agree to indemnify the
- Initial Developer and every Contributor for any liability incurred by
- the Initial Developer or such Contributor as a result of any such
- terms You offer.
-
- 3.7. Larger Works.
- You may create a Larger Work by combining Covered Code with other code
- not governed by the terms of this License and distribute the Larger
- Work as a single product. In such a case, You must make sure the
- requirements of this License are fulfilled for the Covered Code.
-
-4. Inability to Comply Due to Statute or Regulation.
-
- If it is impossible for You to comply with any of the terms of this
- License with respect to some or all of the Covered Code due to
- statute, judicial order, or regulation then You must: (a) comply with
- the terms of this License to the maximum extent possible; and (b)
- describe the limitations and the code they affect. Such description
- must be included in the LEGAL file described in Section 3.4 and must
- be included with all distributions of the Source Code. Except to the
- extent prohibited by statute or regulation, such description must be
- sufficiently detailed for a recipient of ordinary skill to be able to
- understand it.
-
-5. Application of this License.
-
- This License applies to code to which the Initial Developer has
- attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
- 6.1. New Versions.
- Netscape Communications Corporation ("Netscape") may publish revised
- and/or new versions of the License from time to time. Each version
- will be given a distinguishing version number.
-
- 6.2. Effect of New Versions.
- Once Covered Code has been published under a particular version of the
- License, You may always continue to use it under the terms of that
- version. You may also choose to use such Covered Code under the terms
- of any subsequent version of the License published by Netscape. No one
- other than Netscape has the right to modify the terms applicable to
- Covered Code created under this License.
-
- 6.3. Derivative Works.
- If You create or use a modified version of this License (which you may
- only do in order to apply it to code which is not already Covered Code
- governed by this License), You must (a) rename Your license so that
- the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
- "MPL", "NPL" or any confusingly similar phrase do not appear in your
- license (except to note that your license differs from this License)
- and (b) otherwise make it clear that Your version of the license
- contains terms which differ from the Mozilla Public License and
- Netscape Public License. (Filling in the name of the Initial
- Developer, Original Code or Contributor in the notice described in
- Exhibit A shall not of themselves be deemed to be modifications of
- this License.)
-
-7. DISCLAIMER OF WARRANTY.
-
- COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
- WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
- DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
- THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
- IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
- YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
- COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
- OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
- ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-8. TERMINATION.
-
- 8.1. This License and the rights granted hereunder will terminate
- automatically if You fail to comply with terms herein and fail to cure
- such breach within 30 days of becoming aware of the breach. All
- sublicenses to the Covered Code which are properly granted shall
- survive any termination of this License. Provisions which, by their
- nature, must remain in effect beyond the termination of this License
- shall survive.
-
- 8.2. If You initiate litigation by asserting a patent infringement
- claim (excluding declatory judgment actions) against Initial Developer
- or a Contributor (the Initial Developer or Contributor against whom
- You file such action is referred to as "Participant") alleging that:
-
- (a) such Participant's Contributor Version directly or indirectly
- infringes any patent, then any and all rights granted by such
- Participant to You under Sections 2.1 and/or 2.2 of this License
- shall, upon 60 days notice from Participant terminate prospectively,
- unless if within 60 days after receipt of notice You either: (i)
- agree in writing to pay Participant a mutually agreeable reasonable
- royalty for Your past and future use of Modifications made by such
- Participant, or (ii) withdraw Your litigation claim with respect to
- the Contributor Version against such Participant. If within 60 days
- of notice, a reasonable royalty and payment arrangement are not
- mutually agreed upon in writing by the parties or the litigation claim
- is not withdrawn, the rights granted by Participant to You under
- Sections 2.1 and/or 2.2 automatically terminate at the expiration of
- the 60 day notice period specified above.
-
- (b) any software, hardware, or device, other than such Participant's
- Contributor Version, directly or indirectly infringes any patent, then
- any rights granted to You by such Participant under Sections 2.1(b)
- and 2.2(b) are revoked effective as of the date You first made, used,
- sold, distributed, or had made, Modifications made by that
- Participant.
-
- 8.3. If You assert a patent infringement claim against Participant
- alleging that such Participant's Contributor Version directly or
- indirectly infringes any patent where such claim is resolved (such as
- by license or settlement) prior to the initiation of patent
- infringement litigation, then the reasonable value of the licenses
- granted by such Participant under Sections 2.1 or 2.2 shall be taken
- into account in determining the amount or value of any payment or
- license.
-
- 8.4. In the event of termination under Sections 8.1 or 8.2 above,
- all end user license agreements (excluding distributors and resellers)
- which have been validly granted by You or any distributor hereunder
- prior to termination shall survive termination.
-
-9. LIMITATION OF LIABILITY.
-
- UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
- (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
- DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
- OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
- ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
- CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
- WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
- COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
- INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
- LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
- RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
- PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
- EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
- THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-10. U.S. GOVERNMENT END USERS.
-
- The Covered Code is a "commercial item," as that term is defined in
- 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
- software" and "commercial computer software documentation," as such
- terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
- C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
- all U.S. Government End Users acquire Covered Code with only those
- rights set forth herein.
-
-11. MISCELLANEOUS.
-
- This License represents the complete agreement concerning subject
- matter hereof. If any provision of this License is held to be
- unenforceable, such provision shall be reformed only to the extent
- necessary to make it enforceable. This License shall be governed by
- California law provisions (except to the extent applicable law, if
- any, provides otherwise), excluding its conflict-of-law provisions.
- With respect to disputes in which at least one party is a citizen of,
- or an entity chartered or registered to do business in the United
- States of America, any litigation relating to this License shall be
- subject to the jurisdiction of the Federal Courts of the Northern
- District of California, with venue lying in Santa Clara County,
- California, with the losing party responsible for costs, including
- without limitation, court costs and reasonable attorneys' fees and
- expenses. The application of the United Nations Convention on
- Contracts for the International Sale of Goods is expressly excluded.
- Any law or regulation which provides that the language of a contract
- shall be construed against the drafter shall not apply to this
- License.
-
-12. RESPONSIBILITY FOR CLAIMS.
-
- As between Initial Developer and the Contributors, each party is
- responsible for claims and damages arising, directly or indirectly,
- out of its utilization of rights under this License and You agree to
- work with Initial Developer and Contributors to distribute such
- responsibility on an equitable basis. Nothing herein is intended or
- shall be deemed to constitute any admission of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
- Initial Developer may designate portions of the Covered Code as
- "Multiple-Licensed". "Multiple-Licensed" means that the Initial
- Developer permits you to utilize portions of the Covered Code under
- Your choice of the MPL or the alternative licenses, if any, specified
- by the Initial Developer in the file described in Exhibit A.
-
-EXHIBIT A -Mozilla Public License.
-
- ``The contents of this file are subject to the Mozilla Public License
- Version 1.1 (the "License"); you may not use this file except in
- compliance with the License. You may obtain a copy of the License at
- https://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
- License for the specific language governing rights and limitations
- under the License.
-
- The Original Code is ______________________________________.
-
- The Initial Developer of the Original Code is ________________________.
- Portions created by ______________________ are Copyright (C) ______
- _______________________. All Rights Reserved.
-
- Contributor(s): ______________________________________.
-
- Alternatively, the contents of this file may be used under the terms
- of the _____ license (the "[___] License"), in which case the
- provisions of [______] License are applicable instead of those
- above. If you wish to allow use of your version of this file only
- under the terms of the [____] License and not to allow others to use
- your version of this file under the MPL, indicate your decision by
- deleting the provisions above and replace them with the notice and
- other provisions required by the [___] License. If you do not delete
- the provisions above, a recipient may use your version of this file
- under either the MPL or the [___] License."
-
- [NOTE: The text of this Exhibit A may differ slightly from the text of
- the notices in the Source Code files of the Original Code. You should
- use the text of this Exhibit A rather than the text found in the
- Original Code Source Code for Your Modifications.]
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff-api.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff-api.txt
deleted file mode 100644
index d645695673..0000000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff-api.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed 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.
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff-core.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff-core.txt
deleted file mode 100644
index d645695673..0000000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff-core.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed 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.
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff-runtime.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff-runtime.txt
deleted file mode 100644
index d645695673..0000000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff-runtime.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed 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.
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff.collectionschema.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff.collectionschema.txt
deleted file mode 100644
index d645695673..0000000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-protostuff.collectionschema.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed 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.
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-reflections.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-reflections.txt
deleted file mode 100644
index c3155d2478..0000000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-reflections.txt
+++ /dev/null
@@ -1,13 +0,0 @@
- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
- Version 2, December 2004
-
- Copyright (C) 2004 Sam Hocevar
-
- Everyone is permitted to copy and distribute verbatim or modified
- copies of this license document, and changing it is allowed as long
- as the name is changed.
-
- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-alert/pom.xml b/dolphinscheduler-extract/dolphinscheduler-extract-alert/pom.xml
new file mode 100644
index 0000000000..1ba94d750d
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-alert/pom.xml
@@ -0,0 +1,39 @@
+
+
+
+ 4.0.0
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-extract
+ dev-SNAPSHOT
+
+
+ dolphinscheduler-extract-alert
+
+
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-extract-base
+
+
+
+
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-alert/src/main/java/org/apache/dolphinscheduler/extract/alert/IAlertOperator.java b/dolphinscheduler-extract/dolphinscheduler-extract-alert/src/main/java/org/apache/dolphinscheduler/extract/alert/IAlertOperator.java
new file mode 100644
index 0000000000..295bd3bd62
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-alert/src/main/java/org/apache/dolphinscheduler/extract/alert/IAlertOperator.java
@@ -0,0 +1,31 @@
+/*
+ * 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.extract.alert;
+
+import org.apache.dolphinscheduler.extract.alert.request.AlertSendRequest;
+import org.apache.dolphinscheduler.extract.alert.request.AlertSendResponse;
+import org.apache.dolphinscheduler.extract.base.RpcMethod;
+import org.apache.dolphinscheduler.extract.base.RpcService;
+
+@RpcService
+public interface IAlertOperator {
+
+ @RpcMethod
+ AlertSendResponse sendAlert(AlertSendRequest alertSendRequest);
+
+}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequest.java b/dolphinscheduler-extract/dolphinscheduler-extract-alert/src/main/java/org/apache/dolphinscheduler/extract/alert/request/AlertSendRequest.java
similarity index 73%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequest.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-alert/src/main/java/org/apache/dolphinscheduler/extract/alert/request/AlertSendRequest.java
index 68e29f4c28..dfa6515dde 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendRequest.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-alert/src/main/java/org/apache/dolphinscheduler/extract/alert/request/AlertSendRequest.java
@@ -15,10 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.command.alert;
-
-import org.apache.dolphinscheduler.remote.command.MessageType;
-import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder;
+package org.apache.dolphinscheduler.extract.alert.request;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -27,7 +24,7 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
-public class AlertSendRequest implements RequestMessageBuilder {
+public class AlertSendRequest {
private int groupId;
@@ -37,8 +34,4 @@ public class AlertSendRequest implements RequestMessageBuilder {
private int warnType;
- @Override
- public MessageType getCommandType() {
- return MessageType.ALERT_SEND_REQUEST;
- }
}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponse.java b/dolphinscheduler-extract/dolphinscheduler-extract-alert/src/main/java/org/apache/dolphinscheduler/extract/alert/request/AlertSendResponse.java
similarity index 79%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponse.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-alert/src/main/java/org/apache/dolphinscheduler/extract/alert/request/AlertSendResponse.java
index 0f07a5c240..832f3e1fab 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/alert/AlertSendResponse.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-alert/src/main/java/org/apache/dolphinscheduler/extract/alert/request/AlertSendResponse.java
@@ -15,10 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.command.alert;
-
-import org.apache.dolphinscheduler.remote.command.MessageType;
-import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder;
+package org.apache.dolphinscheduler.extract.alert.request;
import java.io.Serializable;
import java.util.List;
@@ -30,7 +27,7 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
-public class AlertSendResponse implements ResponseMessageBuilder {
+public class AlertSendResponse {
/**
* true:All alert are successful,
@@ -40,11 +37,6 @@ public class AlertSendResponse implements ResponseMessageBuilder {
private List resResults;
- @Override
- public MessageType getCommandType() {
- return MessageType.RESPONSE;
- }
-
@Data
@NoArgsConstructor
@AllArgsConstructor
@@ -55,4 +47,5 @@ public class AlertSendResponse implements ResponseMessageBuilder {
private String message;
}
+
}
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-base/pom.xml b/dolphinscheduler-extract/dolphinscheduler-extract-base/pom.xml
new file mode 100644
index 0000000000..9501d55706
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/pom.xml
@@ -0,0 +1,69 @@
+
+
+
+ 4.0.0
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-extract
+ dev-SNAPSHOT
+
+
+ dolphinscheduler-extract-base
+
+
+
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-bom
+ ${project.version}
+ pom
+ import
+
+
+
+
+
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-common
+ ${project.version}
+
+
+ io.netty
+ netty-all
+
+
+ org.slf4j
+ slf4j-api
+
+
+ com.google.guava
+ guava
+
+
+ org.springframework
+ spring-context
+
+
+
+
+
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/MasterRpcProcessor.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/IRpcRequest.java
similarity index 85%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/MasterRpcProcessor.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/IRpcRequest.java
index 2bac00ab84..7fca89b0ee 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/MasterRpcProcessor.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/IRpcRequest.java
@@ -15,7 +15,10 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.processor;
+package org.apache.dolphinscheduler.extract.base;
+
+import java.io.Serializable;
+
+public interface IRpcRequest extends Serializable {
-public interface MasterRpcProcessor extends NettyRequestProcessor {
}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/BaseLogProcessor.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/IRpcResponse.java
similarity index 81%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/BaseLogProcessor.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/IRpcResponse.java
index c651c01939..498efb1047 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/BaseLogProcessor.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/IRpcResponse.java
@@ -15,11 +15,16 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.processor;
+package org.apache.dolphinscheduler.extract.base;
-import lombok.extern.slf4j.Slf4j;
+public interface IRpcResponse {
-@Slf4j
-public abstract class BaseLogProcessor implements MasterRpcProcessor, WorkerRpcProcessor {
+ boolean isSuccess();
+
+ String getMessage();
+
+ byte[] getBody();
+
+ byte[] toBytes();
}
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyClientHandler.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyClientHandler.java
new file mode 100644
index 0000000000..2b49b2fec2
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyClientHandler.java
@@ -0,0 +1,97 @@
+/*
+ * 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.extract.base;
+
+import org.apache.dolphinscheduler.extract.base.future.ResponseFuture;
+import org.apache.dolphinscheduler.extract.base.protocal.HeartBeatTransporter;
+import org.apache.dolphinscheduler.extract.base.protocal.Transporter;
+import org.apache.dolphinscheduler.extract.base.serialize.JsonSerializer;
+import org.apache.dolphinscheduler.extract.base.utils.ChannelUtils;
+
+import java.util.concurrent.ExecutorService;
+
+import lombok.extern.slf4j.Slf4j;
+import io.netty.channel.ChannelFutureListener;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.handler.timeout.IdleStateEvent;
+
+@ChannelHandler.Sharable
+@Slf4j
+public class NettyClientHandler extends ChannelInboundHandlerAdapter {
+
+ private final NettyRemotingClient nettyRemotingClient;
+
+ private final ExecutorService callbackExecutor;
+
+ public NettyClientHandler(NettyRemotingClient nettyRemotingClient, ExecutorService callbackExecutor) {
+ this.nettyRemotingClient = nettyRemotingClient;
+ this.callbackExecutor = callbackExecutor;
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) {
+ nettyRemotingClient.closeChannel(ChannelUtils.toAddress(ctx.channel()));
+ ctx.channel().close();
+ }
+
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) {
+ processReceived((Transporter) msg);
+ }
+
+ private void processReceived(final Transporter transporter) {
+ ResponseFuture future = ResponseFuture.getFuture(transporter.getHeader().getOpaque());
+ if (future == null) {
+ log.warn("Cannot find the ResponseFuture if transporter: {}", transporter);
+ return;
+ }
+ StandardRpcResponse deserialize = JsonSerializer.deserialize(transporter.getBody(), StandardRpcResponse.class);
+ future.setIRpcResponse(deserialize);
+ future.release();
+ if (future.getInvokeCallback() != null) {
+ future.removeFuture();
+ this.callbackExecutor.submit(future::executeInvokeCallback);
+ } else {
+ future.putResponse(deserialize);
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+ log.error("NettyClientHandler catch an exception : {}", cause.getMessage(), cause);
+ nettyRemotingClient.closeChannel(ChannelUtils.toAddress(ctx.channel()));
+ ctx.channel().close();
+ }
+
+ @Override
+ public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
+ if (evt instanceof IdleStateEvent) {
+ ctx.channel()
+ .writeAndFlush(HeartBeatTransporter.getHeartBeatTransporter())
+ .addListener(ChannelFutureListener.CLOSE_ON_FAILURE);
+ if (log.isDebugEnabled()) {
+ log.debug("Client send heart beat to: {}", ChannelUtils.getRemoteAddress(ctx.channel()));
+ }
+ } else {
+ super.userEventTriggered(ctx, evt);
+ }
+ }
+
+}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingClient.java
similarity index 67%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingClient.java
index bbc5f960de..1ca87091af 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingClient.java
@@ -15,25 +15,23 @@
* limitations under the License.
*/
-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.Message;
-import org.apache.dolphinscheduler.remote.config.NettyClientConfig;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingTimeoutException;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingTooMuchRequestException;
-import org.apache.dolphinscheduler.remote.future.InvokeCallback;
-import org.apache.dolphinscheduler.remote.future.ReleaseSemaphore;
-import org.apache.dolphinscheduler.remote.future.ResponseFuture;
-import org.apache.dolphinscheduler.remote.handler.NettyClientHandler;
-import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor;
-import org.apache.dolphinscheduler.remote.utils.CallerThreadExecutePolicy;
-import org.apache.dolphinscheduler.remote.utils.Constants;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.remote.utils.NamedThreadFactory;
-import org.apache.dolphinscheduler.remote.utils.NettyUtils;
+package org.apache.dolphinscheduler.extract.base;
+
+import org.apache.dolphinscheduler.extract.base.config.NettyClientConfig;
+import org.apache.dolphinscheduler.extract.base.exception.RemotingException;
+import org.apache.dolphinscheduler.extract.base.exception.RemotingTimeoutException;
+import org.apache.dolphinscheduler.extract.base.exception.RemotingTooMuchRequestException;
+import org.apache.dolphinscheduler.extract.base.future.InvokeCallback;
+import org.apache.dolphinscheduler.extract.base.future.ReleaseSemaphore;
+import org.apache.dolphinscheduler.extract.base.future.ResponseFuture;
+import org.apache.dolphinscheduler.extract.base.protocal.Transporter;
+import org.apache.dolphinscheduler.extract.base.protocal.TransporterDecoder;
+import org.apache.dolphinscheduler.extract.base.protocal.TransporterEncoder;
+import org.apache.dolphinscheduler.extract.base.utils.CallerThreadExecutePolicy;
+import org.apache.dolphinscheduler.extract.base.utils.Constants;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
+import org.apache.dolphinscheduler.extract.base.utils.NamedThreadFactory;
+import org.apache.dolphinscheduler.extract.base.utils.NettyUtils;
import java.net.InetSocketAddress;
import java.util.concurrent.ConcurrentHashMap;
@@ -64,8 +62,6 @@ public class NettyRemotingClient implements AutoCloseable {
private final Bootstrap bootstrap = new Bootstrap();
- private final NettyEncoder encoder = new NettyEncoder();
-
private final ConcurrentHashMap channels = new ConcurrentHashMap<>(128);
private final AtomicBoolean isStarted = new AtomicBoolean(false);
@@ -123,24 +119,20 @@ public class NettyRemotingClient implements AutoCloseable {
public void initChannel(SocketChannel ch) {
ch.pipeline()
.addLast("client-idle-handler",
- new IdleStateHandler(Constants.NETTY_CLIENT_HEART_BEAT_TIME, 0, 0,
+ new IdleStateHandler(
+ Constants.NETTY_CLIENT_HEART_BEAT_TIME,
+ 0,
+ 0,
TimeUnit.MILLISECONDS))
- .addLast(new NettyDecoder(), clientHandler, encoder);
+ .addLast(new TransporterDecoder(), clientHandler, new TransporterEncoder());
}
});
this.responseFutureExecutor.scheduleWithFixedDelay(ResponseFuture::scanFutureTable, 0, 1, TimeUnit.SECONDS);
isStarted.compareAndSet(false, true);
}
- /**
- * async send
- *
- * @param host host
- * @param command command
- * @param timeoutMillis timeoutMillis
- * @param invokeCallback callback function
- */
- public void sendAsync(final Host host, final Message command,
+ public void sendAsync(final Host host,
+ final Transporter transporter,
final long timeoutMillis,
final InvokeCallback invokeCallback) throws InterruptedException, RemotingException {
final Channel channel = getChannel(host);
@@ -150,7 +142,7 @@ public class NettyRemotingClient implements AutoCloseable {
/*
* request unique identification
*/
- final long opaque = command.getOpaque();
+ final long opaque = transporter.getHeader().getOpaque();
/*
* control concurrency number
*/
@@ -166,7 +158,7 @@ public class NettyRemotingClient implements AutoCloseable {
invokeCallback,
releaseSemaphore);
try {
- channel.writeAndFlush(command).addListener(future -> {
+ channel.writeAndFlush(transporter).addListener(future -> {
if (future.isSuccess()) {
responseFuture.setSendOk(true);
return;
@@ -185,7 +177,7 @@ public class NettyRemotingClient implements AutoCloseable {
});
} catch (Exception ex) {
responseFuture.release();
- throw new RemotingException(String.format("send command to host: %s failed", host), ex);
+ throw new RemotingException(String.format("Send transporter to host: %s failed", host), ex);
}
} else {
String message = String.format(
@@ -195,23 +187,15 @@ public class NettyRemotingClient implements AutoCloseable {
}
}
- /**
- * sync send
- *
- * @param host host
- * @param message command
- * @param timeoutMillis timeoutMillis
- * @return command
- */
- public Message sendSync(final Host host, final Message message,
- final long timeoutMillis) throws InterruptedException, RemotingException {
+ public IRpcResponse sendSync(final Host host, final Transporter transporter,
+ 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 = message.getOpaque();
+ final long opaque = transporter.getHeader().getOpaque();
final ResponseFuture responseFuture = new ResponseFuture(opaque, timeoutMillis, null, null);
- channel.writeAndFlush(message).addListener(future -> {
+ channel.writeAndFlush(transporter).addListener(future -> {
if (future.isSuccess()) {
responseFuture.setSendOk(true);
return;
@@ -220,74 +204,22 @@ public class NettyRemotingClient implements AutoCloseable {
}
responseFuture.setCause(future.cause());
responseFuture.putResponse(null);
- log.error("send command {} to host {} failed: {}", message, host, responseFuture.getCause());
+ log.error("Send Sync request {} to host {} failed", transporter, host, responseFuture.getCause());
});
/*
* sync wait for result
*/
- Message result = responseFuture.waitResponse();
- if (result == null) {
+ IRpcResponse iRpcResponse = responseFuture.waitResponse();
+ if (iRpcResponse == null) {
if (responseFuture.isSendOK()) {
throw new RemotingTimeoutException(host.toString(), timeoutMillis, responseFuture.getCause());
} else {
throw new RemotingException(host.toString(), responseFuture.getCause());
}
}
- return result;
- }
-
- /**
- * send task
- *
- * @param host host
- * @param message command
- */
- 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(message).await();
- if (future.isSuccess()) {
- log.debug("send command : {} , to : {} successfully.", message, host.getAddress());
- } else {
- 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.", message, host.getAddress());
- throw new RemotingException(
- String.format("Send command : %s , to :%s encounter error", message, host.getAddress()), e);
- }
- }
-
- /**
- * register processor
- *
- * @param processor processor
- */
- public void registerProcessor(final NettyRequestProcessor processor) {
- this.registerProcessor(processor, null);
+ return iRpcResponse;
}
- /**
- * register processor
- *
- * @param processor processor
- * @param executor thread executor
- */
- public void registerProcessor(final NettyRequestProcessor processor,
- final ExecutorService executor) {
- this.clientHandler.registerProcessor(processor.getCommandType(), processor, executor);
- }
-
- /**
- * get channel
- */
public Channel getChannel(Host host) {
Channel channel = channels.get(host);
if (channel != null && channel.isActive()) {
@@ -299,7 +231,7 @@ public class NettyRemotingClient implements AutoCloseable {
/**
* create channel
*
- * @param host host
+ * @param host host
* @param isSync sync flag
* @return channel
*/
@@ -344,9 +276,6 @@ public class NettyRemotingClient implements AutoCloseable {
}
}
- /**
- * close channels
- */
private void closeChannels() {
for (Channel channel : this.channels.values()) {
channel.close();
@@ -354,11 +283,6 @@ public class NettyRemotingClient implements AutoCloseable {
this.channels.clear();
}
- /**
- * close channel
- *
- * @param host host
- */
public void closeChannel(Host host) {
Channel channel = this.channels.remove(host);
if (channel != null) {
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/factory/NettyRemotingClientFactory.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingClientFactory.java
similarity index 71%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/factory/NettyRemotingClientFactory.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingClientFactory.java
index 2364f97e06..7bbebfbf3d 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/factory/NettyRemotingClientFactory.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingClientFactory.java
@@ -15,10 +15,9 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.factory;
+package org.apache.dolphinscheduler.extract.base;
-import org.apache.dolphinscheduler.remote.NettyRemotingClient;
-import org.apache.dolphinscheduler.remote.config.NettyClientConfig;
+import org.apache.dolphinscheduler.extract.base.config.NettyClientConfig;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
@@ -27,9 +26,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class NettyRemotingClientFactory {
- public NettyRemotingClient buildNettyRemotingClient() {
- NettyClientConfig nettyClientConfig = new NettyClientConfig();
- log.info("NettyRemotingClient initialized with config: {}", nettyClientConfig);
+ public NettyRemotingClient buildNettyRemotingClient(NettyClientConfig nettyClientConfig) {
return new NettyRemotingClient(nettyClientConfig);
}
}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingServer.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingServer.java
similarity index 74%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingServer.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingServer.java
index 740910a9a5..50d82e2c91 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingServer.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingServer.java
@@ -15,16 +15,16 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote;
+package org.apache.dolphinscheduler.extract.base;
-import org.apache.dolphinscheduler.remote.codec.NettyDecoder;
-import org.apache.dolphinscheduler.remote.codec.NettyEncoder;
-import org.apache.dolphinscheduler.remote.config.NettyServerConfig;
-import org.apache.dolphinscheduler.remote.exceptions.RemoteException;
-import org.apache.dolphinscheduler.remote.handler.NettyServerHandler;
-import org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor;
-import org.apache.dolphinscheduler.remote.utils.Constants;
-import org.apache.dolphinscheduler.remote.utils.NettyUtils;
+import org.apache.dolphinscheduler.extract.base.config.NettyServerConfig;
+import org.apache.dolphinscheduler.extract.base.exception.RemoteException;
+import org.apache.dolphinscheduler.extract.base.protocal.TransporterDecoder;
+import org.apache.dolphinscheduler.extract.base.protocal.TransporterEncoder;
+import org.apache.dolphinscheduler.extract.base.server.JdkDynamicServerHandler;
+import org.apache.dolphinscheduler.extract.base.server.ServerMethodInvoker;
+import org.apache.dolphinscheduler.extract.base.utils.Constants;
+import org.apache.dolphinscheduler.extract.base.utils.NettyUtils;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -53,51 +53,23 @@ import io.netty.handler.timeout.IdleStateHandler;
@Slf4j
public class NettyRemotingServer {
- /**
- * server bootstrap
- */
private final ServerBootstrap serverBootstrap = new ServerBootstrap();
- /**
- * default executor
- */
- private final ExecutorService defaultExecutor = Executors.newFixedThreadPool(Constants.CPUS);
+ private final ExecutorService defaultExecutor =
+ Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);
- /**
- * boss group
- */
private final EventLoopGroup bossGroup;
- /**
- * worker group
- */
private final EventLoopGroup workGroup;
- /**
- * server config
- */
private final NettyServerConfig serverConfig;
- /**
- * server handler
- */
- private final NettyServerHandler serverHandler = new NettyServerHandler(this);
+ private final JdkDynamicServerHandler serverHandler = new JdkDynamicServerHandler(this);
- /**
- * started flag
- */
private final AtomicBoolean isStarted = new AtomicBoolean(false);
- /**
- * Netty server bind fail message
- */
private static final String NETTY_BIND_FAILURE_MSG = "NettyRemotingServer bind %s fail";
- /**
- * server init
- *
- * @param serverConfig server config
- */
public NettyRemotingServer(final NettyServerConfig serverConfig) {
this.serverConfig = serverConfig;
ThreadFactory bossThreadFactory =
@@ -113,9 +85,6 @@ public class NettyRemotingServer {
}
}
- /**
- * server start
- */
public void start() {
if (isStarted.compareAndSet(false, true)) {
this.serverBootstrap
@@ -160,42 +129,21 @@ public class NettyRemotingServer {
*/
private void initNettyChannel(SocketChannel ch) {
ch.pipeline()
- .addLast("encoder", new NettyEncoder())
- .addLast("decoder", new NettyDecoder())
+ .addLast("encoder", new TransporterEncoder())
+ .addLast("decoder", new TransporterDecoder())
.addLast("server-idle-handle",
new IdleStateHandler(0, 0, Constants.NETTY_SERVER_HEART_BEAT_TIME, TimeUnit.MILLISECONDS))
.addLast("handler", serverHandler);
}
- /**
- * register processor
- *
- * @param processor processor
- */
- public void registerProcessor(final NettyRequestProcessor processor) {
- this.registerProcessor(processor, null);
- }
-
- /**
- * register processor
- *
- * @param processor processor
- * @param executor thread executor
- */
- public void registerProcessor(final NettyRequestProcessor processor,
- final ExecutorService executor) {
- this.serverHandler.registerProcessor(processor.getCommandType(), processor, executor);
- }
-
- /**
- * get default thread executor
- *
- * @return thread executor
- */
public ExecutorService getDefaultExecutor() {
return defaultExecutor;
}
+ public void registerMethodInvoker(ServerMethodInvoker methodInvoker) {
+ serverHandler.registerMethodInvoker(methodInvoker);
+ }
+
public void close() {
if (isStarted.compareAndSet(true, false)) {
try {
diff --git a/dolphinscheduler-microbench/src/main/java/org/apache/dolphinscheduler/microbench/common/UserService.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingServerFactory.java
similarity index 68%
rename from dolphinscheduler-microbench/src/main/java/org/apache/dolphinscheduler/microbench/common/UserService.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingServerFactory.java
index ad09a34645..6bf1b8d31c 100644
--- a/dolphinscheduler-microbench/src/main/java/org/apache/dolphinscheduler/microbench/common/UserService.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/NettyRemotingServerFactory.java
@@ -15,23 +15,16 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.microbench.common;
+package org.apache.dolphinscheduler.extract.base;
-import org.apache.dolphinscheduler.rpc.base.RpcService;
+import org.apache.dolphinscheduler.extract.base.config.NettyServerConfig;
-/**
- * UserService
- */
-@RpcService("IUserService")
-public class UserService implements IUserService {
+import lombok.experimental.UtilityClass;
- @Override
- public Boolean say(String s) {
- return true;
- }
+@UtilityClass
+public class NettyRemotingServerFactory {
- @Override
- public Integer hi(int num) {
- return ++num;
+ public NettyRemotingServer buildNettyRemotingServer(NettyServerConfig nettyServerConfig) {
+ return new NettyRemotingServer(nettyServerConfig);
}
}
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/RpcMethod.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/RpcMethod.java
new file mode 100644
index 0000000000..cd1b778c9a
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/RpcMethod.java
@@ -0,0 +1,33 @@
+/*
+ * 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.extract.base;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface RpcMethod {
+
+ long timeout() default 3000L;
+
+}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/rpc/base/RpcService.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/RpcService.java
similarity index 85%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/rpc/base/RpcService.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/RpcService.java
index 81b16280e0..f4dc931efd 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/rpc/base/RpcService.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/RpcService.java
@@ -15,16 +15,19 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.rpc.base;
+package org.apache.dolphinscheduler.extract.base;
+import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-@Target({ElementType.TYPE})
+/**
+ * Used to mark a class as a RPC service
+ */
+@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
+@Documented
public @interface RpcService {
-
- String value() default "";
}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequest.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/StandardRpcRequest.java
similarity index 55%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequest.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/StandardRpcRequest.java
index 2438c3dc58..f3f0d9fb3a 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequest.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/StandardRpcRequest.java
@@ -15,40 +15,34 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.command.log;
+package org.apache.dolphinscheduler.extract.base;
-import org.apache.dolphinscheduler.remote.command.MessageType;
-import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder;
+import org.apache.dolphinscheduler.extract.base.serialize.JsonSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
-/**
- * roll view log request command
- */
@Data
-@NoArgsConstructor
@AllArgsConstructor
-public class RollViewLogRequest implements RequestMessageBuilder {
-
- /**
- * log path
- */
- private String path;
-
- /**
- * skip line number
- */
- private int skipLineNum;
-
- /**
- * query line number
- */
- private int limit;
-
- @Override
- public MessageType getCommandType() {
- return MessageType.ROLL_VIEW_LOG_REQUEST;
+@NoArgsConstructor
+public class StandardRpcRequest implements IRpcRequest {
+
+ private byte[][] args;
+
+ private Class>[] argsTypes;
+
+ public static StandardRpcRequest of(Object[] args) {
+ if (args == null || args.length == 0) {
+ return new StandardRpcRequest(null, null);
+ }
+ final byte[][] argsBytes = new byte[args.length][];
+ final Class>[] argsTypes = new Class[args.length];
+ for (int i = 0; i < args.length; i++) {
+ argsBytes[i] = JsonSerializer.serialize(args[i]);
+ argsTypes[i] = args[i].getClass();
+ }
+ return new StandardRpcRequest(argsBytes, argsTypes);
}
+
}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskDispatchResponse.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/StandardRpcResponse.java
similarity index 50%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskDispatchResponse.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/StandardRpcResponse.java
index f9c9bfb319..21a6afa76e 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskDispatchResponse.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/StandardRpcResponse.java
@@ -15,36 +15,40 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.command.task;
+package org.apache.dolphinscheduler.extract.base;
-import org.apache.dolphinscheduler.remote.command.MessageType;
-import org.apache.dolphinscheduler.remote.command.ResponseMessageBuilder;
+import org.apache.dolphinscheduler.extract.base.serialize.JsonSerializer;
-import lombok.AllArgsConstructor;
import lombok.Data;
-import lombok.NoArgsConstructor;
@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class TaskDispatchResponse implements ResponseMessageBuilder {
+public class StandardRpcResponse implements IRpcResponse {
- private Integer taskInstanceId;
-
- private boolean dispatchSuccess;
+ private boolean success;
private String message;
- public static TaskDispatchResponse success(Integer taskInstanceId) {
- return new TaskDispatchResponse(taskInstanceId, true, "dispatch success");
+ private byte[] body;
+
+ private Class> bodyType;
+
+ public static StandardRpcResponse success(byte[] body, Class> bodyType) {
+ StandardRpcResponse rpcResponse = new StandardRpcResponse();
+ rpcResponse.setSuccess(true);
+ rpcResponse.setBody(body);
+ rpcResponse.setBodyType(bodyType);
+ return rpcResponse;
}
- public static TaskDispatchResponse failed(Integer taskInstanceId, String message) {
- return new TaskDispatchResponse(taskInstanceId, false, message);
+ public static StandardRpcResponse fail(String message) {
+ StandardRpcResponse rpcResponse = new StandardRpcResponse();
+ rpcResponse.setSuccess(false);
+ rpcResponse.setMessage(message);
+ return rpcResponse;
}
@Override
- public MessageType getCommandType() {
- return MessageType.TASK_DISPATCH_RESPONSE;
+ public byte[] toBytes() {
+ return JsonSerializer.serialize(this);
}
}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/Pair.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/BaseRemoteMethodInvoker.java
similarity index 50%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/Pair.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/BaseRemoteMethodInvoker.java
index 57cec4bbe7..519dd87199 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/Pair.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/BaseRemoteMethodInvoker.java
@@ -15,42 +15,28 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.utils;
+package org.apache.dolphinscheduler.extract.base.client;
-/**
- * key value pair
- *
- * @param L generic type
- * @param R generic type
- */
-public class Pair {
+import org.apache.dolphinscheduler.extract.base.NettyRemotingClient;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
- private L left;
+import java.lang.reflect.Method;
- private R right;
+public abstract class BaseRemoteMethodInvoker implements ClientMethodInvoker {
- public Pair(L left, R right) {
- this.left = left;
- this.right = right;
- }
+ protected final String methodIdentifier;
- public L getLeft() {
- return left;
- }
+ protected final NettyRemotingClient nettyRemotingClient;
- public void setLeft(L left) {
- this.left = left;
- }
+ protected final Method localMethod;
- public R getRight() {
- return right;
- }
+ protected final Host serverHost;
- public void setRight(R right) {
- this.right = right;
+ public BaseRemoteMethodInvoker(Host serverHost, Method localMethod, NettyRemotingClient nettyRemotingClient) {
+ this.serverHost = serverHost;
+ this.localMethod = localMethod;
+ this.nettyRemotingClient = nettyRemotingClient;
+ this.methodIdentifier = localMethod.toGenericString();
}
- public static Pair of(L left, R right) {
- return new Pair<>(left, right);
- }
}
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/ClientInvocationHandler.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/ClientInvocationHandler.java
new file mode 100644
index 0000000000..d5c9ab73d3
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/ClientInvocationHandler.java
@@ -0,0 +1,58 @@
+/*
+ * 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.extract.base.client;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.apache.dolphinscheduler.extract.base.NettyRemotingClient;
+import org.apache.dolphinscheduler.extract.base.RpcMethod;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class ClientInvocationHandler implements InvocationHandler {
+
+ private final NettyRemotingClient nettyRemotingClient;
+
+ private final Map methodInvokerMap;
+
+ private final Host serverHost;
+
+ public ClientInvocationHandler(Host serverHost, NettyRemotingClient nettyRemotingClient) {
+ this.serverHost = checkNotNull(serverHost);
+ this.nettyRemotingClient = checkNotNull(nettyRemotingClient);
+ this.methodInvokerMap = new ConcurrentHashMap<>();
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ if (method.getAnnotation(RpcMethod.class) == null) {
+ return method.invoke(proxy, args);
+ }
+ ClientMethodInvoker methodInvoker = methodInvokerMap.computeIfAbsent(
+ method.toGenericString(), m -> new SyncClientMethodInvoker(serverHost, method, nettyRemotingClient));
+ return methodInvoker.invoke(proxy, method, args);
+ }
+
+}
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/ClientMethodInvoker.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/ClientMethodInvoker.java
new file mode 100644
index 0000000000..dcf53b0311
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/ClientMethodInvoker.java
@@ -0,0 +1,26 @@
+/*
+ * 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.extract.base.client;
+
+import java.lang.reflect.Method;
+
+public interface ClientMethodInvoker {
+
+ Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
+
+}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/rpc/common/AbstractRpcCallBack.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/IRpcClientProxyFactory.java
similarity index 68%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/rpc/common/AbstractRpcCallBack.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/IRpcClientProxyFactory.java
index 2b106a96e4..e60b0f18b0 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/rpc/common/AbstractRpcCallBack.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/IRpcClientProxyFactory.java
@@ -15,18 +15,18 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.rpc.common;
+package org.apache.dolphinscheduler.extract.base.client;
-/**
- * AbstractRpcCallBack
- */
-public abstract class AbstractRpcCallBack {
+public interface IRpcClientProxyFactory {
/**
- * When sending an asynchronous message, this method will be called after the response is successfully sent.
+ * Create the client proxy.
*
- * @param object response
+ * @param serverHost which server host to connect
+ * @param clientInterface which need to be proxied
+ * @param InterfaceType
+ * @return proxy client
*/
- public abstract void run(Object object);
+ T getProxyClient(String serverHost, Class clientInterface);
}
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/JdkDynamicRpcClientProxyFactory.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/JdkDynamicRpcClientProxyFactory.java
new file mode 100644
index 0000000000..25e6e32ee4
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/JdkDynamicRpcClientProxyFactory.java
@@ -0,0 +1,51 @@
+/*
+ * 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.extract.base.client;
+
+import org.apache.dolphinscheduler.extract.base.NettyRemotingClient;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
+
+import java.lang.reflect.Proxy;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * This class is used to create a proxy client which will transform local method invocation to remove invocation.
+ */
+public class JdkDynamicRpcClientProxyFactory implements IRpcClientProxyFactory {
+
+ private final NettyRemotingClient nettyRemotingClient;
+
+ // todo: use guava cache to avoid memory leak
+ private final Map> proxyClientCache = new ConcurrentHashMap<>();
+
+ public JdkDynamicRpcClientProxyFactory(NettyRemotingClient nettyRemotingClient) {
+ this.nettyRemotingClient = nettyRemotingClient;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public T getProxyClient(String serverHost, Class clientInterface) {
+ return (T) proxyClientCache
+ .computeIfAbsent(serverHost, key -> new ConcurrentHashMap<>())
+ .computeIfAbsent(clientInterface.getName(),
+ key -> Proxy.newProxyInstance(
+ clientInterface.getClassLoader(), new Class[]{clientInterface},
+ new ClientInvocationHandler(Host.of(serverHost), nettyRemotingClient)));
+ }
+}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskPauseRequest.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/SingletonJdkDynamicRpcClientProxyFactory.java
similarity index 54%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskPauseRequest.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/SingletonJdkDynamicRpcClientProxyFactory.java
index 210a5155bb..44e0420272 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/task/TaskPauseRequest.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/SingletonJdkDynamicRpcClientProxyFactory.java
@@ -15,31 +15,22 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.command.task;
+package org.apache.dolphinscheduler.extract.base.client;
-import org.apache.dolphinscheduler.remote.command.MessageType;
-import org.apache.dolphinscheduler.remote.command.RequestMessageBuilder;
+import org.apache.dolphinscheduler.extract.base.NettyRemotingClientFactory;
+import org.apache.dolphinscheduler.extract.base.config.NettyClientConfig;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.ToString;
+public class SingletonJdkDynamicRpcClientProxyFactory extends JdkDynamicRpcClientProxyFactory {
-@Data
-@NoArgsConstructor
-@ToString(callSuper = true)
-public class TaskPauseRequest implements RequestMessageBuilder {
+ private static final SingletonJdkDynamicRpcClientProxyFactory INSTANCE =
+ new SingletonJdkDynamicRpcClientProxyFactory();
- private static final long serialVersionUID = -1L;
-
- private Integer taskInstanceId;
-
- public TaskPauseRequest(Integer taskInstanceId) {
- this.taskInstanceId = taskInstanceId;
+ private SingletonJdkDynamicRpcClientProxyFactory() {
+ super(NettyRemotingClientFactory.buildNettyRemotingClient(new NettyClientConfig()));
}
- @Override
- public MessageType getCommandType() {
- return MessageType.PAUSE_TASK_INSTANCE;
+ public static SingletonJdkDynamicRpcClientProxyFactory getInstance() {
+ return INSTANCE;
}
}
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/SyncClientMethodInvoker.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/SyncClientMethodInvoker.java
new file mode 100644
index 0000000000..b5fdf3fb71
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/client/SyncClientMethodInvoker.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.extract.base.client;
+
+import org.apache.dolphinscheduler.extract.base.IRpcResponse;
+import org.apache.dolphinscheduler.extract.base.NettyRemotingClient;
+import org.apache.dolphinscheduler.extract.base.RpcMethod;
+import org.apache.dolphinscheduler.extract.base.StandardRpcRequest;
+import org.apache.dolphinscheduler.extract.base.exception.MethodInvocationException;
+import org.apache.dolphinscheduler.extract.base.protocal.Transporter;
+import org.apache.dolphinscheduler.extract.base.protocal.TransporterHeader;
+import org.apache.dolphinscheduler.extract.base.serialize.JsonSerializer;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
+
+import java.lang.reflect.Method;
+
+public class SyncClientMethodInvoker extends BaseRemoteMethodInvoker {
+
+ public SyncClientMethodInvoker(Host serverHost, Method localMethod, NettyRemotingClient nettyRemotingClient) {
+ super(serverHost, localMethod, nettyRemotingClient);
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ RpcMethod sync = method.getAnnotation(RpcMethod.class);
+ Transporter transporter = new Transporter();
+ transporter.setBody(JsonSerializer.serialize(StandardRpcRequest.of(args)));
+ transporter.setHeader(TransporterHeader.of(methodIdentifier));
+
+ IRpcResponse iRpcResponse =
+ nettyRemotingClient.sendSync(serverHost, transporter, sync.timeout());
+ if (!iRpcResponse.isSuccess()) {
+ throw MethodInvocationException.of(iRpcResponse.getMessage());
+ }
+ if (iRpcResponse.getBody() == null) {
+ return null;
+ }
+ Class> responseClass = method.getReturnType();
+ return JsonSerializer.deserialize(iRpcResponse.getBody(), responseClass);
+ }
+}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/config/NettyClientConfig.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/config/NettyClientConfig.java
similarity index 91%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/config/NettyClientConfig.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/config/NettyClientConfig.java
index ff41e9b101..a41a439b5c 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/config/NettyClientConfig.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/config/NettyClientConfig.java
@@ -15,9 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.config;
-
-import org.apache.dolphinscheduler.remote.utils.Constants;
+package org.apache.dolphinscheduler.extract.base.config;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -34,7 +32,7 @@ public class NettyClientConfig {
* worker threads,default get machine cpus
*/
@Builder.Default
- private int workerThreads = Constants.CPUS;
+ private int workerThreads = Runtime.getRuntime().availableProcessors() * 2;
/**
* whether tpc delay
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/config/NettyServerConfig.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/config/NettyServerConfig.java
similarity index 75%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/config/NettyServerConfig.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/config/NettyServerConfig.java
index 798ea732c5..f81804935b 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/config/NettyServerConfig.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/config/NettyServerConfig.java
@@ -14,9 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.config;
-import org.apache.dolphinscheduler.remote.utils.Constants;
+package org.apache.dolphinscheduler.extract.base.config;
import lombok.Data;
@@ -29,32 +28,36 @@ public class NettyServerConfig {
private int soBacklog = 1024;
/**
- * whether tpc delay
+ * whether tpc delay
*/
private boolean tcpNoDelay = true;
/**
- * whether keep alive
+ * whether keep alive
*/
private boolean soKeepalive = true;
/**
- * send buffer size
+ * send buffer size
*/
private int sendBufferSize = 65535;
/**
- * receive buffer size
+ * receive buffer size
*/
private int receiveBufferSize = 65535;
/**
- * worker threads,default get machine cpus
+ * worker threads,default get machine cpus
*/
- private int workerThread = Constants.CPUS;
+ private int workerThread = Runtime.getRuntime().availableProcessors() * 2;
/**
- * listen port
+ * listen port
*/
private int listenPort = 12346;
+
+ public NettyServerConfig(int listenPort) {
+ this.listenPort = listenPort;
+ }
}
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/MethodInvocationException.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/MethodInvocationException.java
new file mode 100644
index 0000000000..1c20b5fd2d
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/MethodInvocationException.java
@@ -0,0 +1,30 @@
+/*
+ * 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.extract.base.exception;
+
+public class MethodInvocationException extends RuntimeException {
+
+ public MethodInvocationException(String message) {
+ super(message);
+ }
+
+ public static MethodInvocationException of(String message) {
+ return new MethodInvocationException(message);
+ }
+
+}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemoteException.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemoteException.java
similarity index 95%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemoteException.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemoteException.java
index a13859026d..94f83796ae 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemoteException.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemoteException.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.exceptions;
+package org.apache.dolphinscheduler.extract.base.exception;
/**
* Custom runtime exception
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemotingException.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemotingException.java
similarity index 96%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemotingException.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemotingException.java
index 1d025cc268..4290362a01 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemotingException.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemotingException.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.exceptions;
+package org.apache.dolphinscheduler.extract.base.exception;
/**
* remote exception
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemotingTimeoutException.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemotingTimeoutException.java
similarity index 95%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemotingTimeoutException.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemotingTimeoutException.java
index 5788221d6c..22b77bf1f5 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemotingTimeoutException.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemotingTimeoutException.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.exceptions;
+package org.apache.dolphinscheduler.extract.base.exception;
/**
* timeout exception
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemotingTooMuchRequestException.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemotingTooMuchRequestException.java
similarity index 94%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemotingTooMuchRequestException.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemotingTooMuchRequestException.java
index 4e31497311..fc82298acd 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/exceptions/RemotingTooMuchRequestException.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/exception/RemotingTooMuchRequestException.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.exceptions;
+package org.apache.dolphinscheduler.extract.base.exception;
/**
* too much request exception
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/InvokeCallback.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/future/InvokeCallback.java
similarity index 94%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/InvokeCallback.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/future/InvokeCallback.java
index 84cdae867b..4df3d68e2f 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/InvokeCallback.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/future/InvokeCallback.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.future;
+package org.apache.dolphinscheduler.extract.base.future;
/**
* invoke callback
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/ReleaseSemaphore.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/future/ReleaseSemaphore.java
similarity index 95%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/ReleaseSemaphore.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/future/ReleaseSemaphore.java
index c8284890f9..e5f8d5ab98 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/ReleaseSemaphore.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/future/ReleaseSemaphore.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.future;
+package org.apache.dolphinscheduler.extract.base.future;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicBoolean;
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/ResponseFuture.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/future/ResponseFuture.java
similarity index 73%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/ResponseFuture.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/future/ResponseFuture.java
index 40b223d6e4..35405c5578 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/future/ResponseFuture.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/future/ResponseFuture.java
@@ -15,9 +15,9 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.future;
+package org.apache.dolphinscheduler.extract.base.future;
-import org.apache.dolphinscheduler.remote.command.Message;
+import org.apache.dolphinscheduler.extract.base.IRpcResponse;
import java.util.Iterator;
import java.util.Map;
@@ -25,50 +25,41 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
-/**
- * response future
- */
+@ToString
@Slf4j
public class ResponseFuture {
private static final ConcurrentHashMap FUTURE_TABLE = new ConcurrentHashMap<>(256);
- /**
- * request unique identification
- */
private final long opaque;
- /**
- * timeout
- */
+ // remove the timeout
private final long timeoutMillis;
- /**
- * invokeCallback function
- */
private final InvokeCallback invokeCallback;
- /**
- * releaseSemaphore
- */
private final ReleaseSemaphore releaseSemaphore;
private final CountDownLatch latch = new CountDownLatch(1);
private final long beginTimestamp = System.currentTimeMillis();
- /**
- * response command
- */
- private Message responseMessage;
+ @Getter
+ @Setter
+ private IRpcResponse iRpcResponse;
private volatile boolean sendOk = true;
private Throwable cause;
- public ResponseFuture(long opaque, long timeoutMillis, InvokeCallback invokeCallback,
+ public ResponseFuture(long opaque,
+ long timeoutMillis,
+ InvokeCallback invokeCallback,
ReleaseSemaphore releaseSemaphore) {
this.opaque = opaque;
this.timeoutMillis = timeoutMillis;
@@ -82,20 +73,15 @@ public class ResponseFuture {
*
* @return command
*/
- public Message waitResponse() throws InterruptedException {
+ public IRpcResponse waitResponse() throws InterruptedException {
if (!latch.await(timeoutMillis, TimeUnit.MILLISECONDS)) {
- log.warn("Wait response timeout, request id {}", opaque);
+ log.warn("Wait response in {}/ms timeout, request id {}", timeoutMillis, opaque);
}
- return this.responseMessage;
+ return this.iRpcResponse;
}
- /**
- * put response
- *
- * @param responseMessage responseCommand
- */
- public void putResponse(final Message responseMessage) {
- this.responseMessage = responseMessage;
+ public void putResponse(final IRpcResponse iRpcResponse) {
+ this.iRpcResponse = iRpcResponse;
this.latch.countDown();
FUTURE_TABLE.remove(opaque);
}
@@ -155,14 +141,6 @@ public class ResponseFuture {
return beginTimestamp;
}
- public Message getResponseCommand() {
- return responseMessage;
- }
-
- public void setResponseCommand(Message responseMessage) {
- this.responseMessage = responseMessage;
- }
-
public InvokeCallback getInvokeCallback() {
return invokeCallback;
}
@@ -199,18 +177,4 @@ public class ResponseFuture {
}
}
- @Override
- public String toString() {
- return "ResponseFuture{"
- + "opaque=" + opaque
- + ", timeoutMillis=" + timeoutMillis
- + ", invokeCallback=" + invokeCallback
- + ", releaseSemaphore=" + releaseSemaphore
- + ", latch=" + latch
- + ", beginTimestamp=" + beginTimestamp
- + ", responseCommand=" + responseMessage
- + ", sendOk=" + sendOk
- + ", cause=" + cause
- + '}';
- }
}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/rpc/common/ResponseEventType.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/protocal/HeartBeatTransporter.java
similarity index 62%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/rpc/common/ResponseEventType.java
rename to dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/protocal/HeartBeatTransporter.java
index f559e30faf..dba8b5bc0b 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/rpc/common/ResponseEventType.java
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/protocal/HeartBeatTransporter.java
@@ -15,28 +15,19 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.rpc.common;
+package org.apache.dolphinscheduler.extract.base.protocal;
-public enum ResponseEventType {
+import org.apache.dolphinscheduler.extract.base.StandardRpcResponse;
- ACK((byte) 1, "ack"),
- BUSINESS_RSP((byte) 2, "business response");
+public class HeartBeatTransporter extends Transporter {
- private Byte type;
+ public static final String METHOD_IDENTIFY = "HEART_BEAT";
- private String description;
+ private static final Transporter HEART_BEAT_TRANSPORTER =
+ of(TransporterHeader.of(METHOD_IDENTIFY), new StandardRpcResponse());
- ResponseEventType(Byte type, String description) {
- this.type = type;
- this.description = description;
- }
-
- public Byte getType() {
- return type;
- }
-
- public String getDescription() {
- return description;
+ public static Transporter getHeartBeatTransporter() {
+ return HEART_BEAT_TRANSPORTER;
}
}
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/protocal/Transporter.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/protocal/Transporter.java
new file mode 100644
index 0000000000..073c1485d9
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/protocal/Transporter.java
@@ -0,0 +1,55 @@
+/*
+ * 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.extract.base.protocal;
+
+import org.apache.dolphinscheduler.extract.base.StandardRpcRequest;
+import org.apache.dolphinscheduler.extract.base.StandardRpcResponse;
+import org.apache.dolphinscheduler.extract.base.serialize.JsonSerializer;
+
+import java.io.Serializable;
+
+import lombok.Data;
+import lombok.NonNull;
+
+@Data
+public class Transporter implements Serializable {
+
+ private static final long serialVersionUID = -1L;
+
+ public static final byte MAGIC = (byte) 0xbabe;
+ public static final byte VERSION = 0;
+
+ private TransporterHeader header;
+ private byte[] body;
+
+ public static Transporter of(@NonNull TransporterHeader header, StandardRpcResponse iRpcResponse) {
+ return of(header, JsonSerializer.serialize(iRpcResponse));
+ }
+
+ public static Transporter of(@NonNull TransporterHeader header, StandardRpcRequest iRpcRequest) {
+ return of(header, JsonSerializer.serialize(iRpcRequest));
+ }
+
+ public static Transporter of(@NonNull TransporterHeader header, byte[] body) {
+ Transporter transporter = new Transporter();
+ transporter.setHeader(header);
+ transporter.setBody(body);
+ return transporter;
+ }
+
+}
diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/protocal/TransporterDecoder.java b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/protocal/TransporterDecoder.java
new file mode 100644
index 0000000000..8f2747c079
--- /dev/null
+++ b/dolphinscheduler-extract/dolphinscheduler-extract-base/src/main/java/org/apache/dolphinscheduler/extract/base/protocal/TransporterDecoder.java
@@ -0,0 +1,94 @@
+/*
+ * 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.extract.base.protocal;
+
+import org.apache.dolphinscheduler.extract.base.serialize.JsonSerializer;
+
+import java.util.List;
+
+import lombok.extern.slf4j.Slf4j;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ReplayingDecoder;
+
+@Slf4j
+public class TransporterDecoder extends ReplayingDecoder {
+
+ public TransporterDecoder() {
+ super(State.MAGIC);
+ }
+
+ private int headerLength;
+ private byte[] header;
+ private int bodyLength;
+ private byte[] body;
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf in, List
+
org.apache.dolphinschedulerdolphinscheduler-registry-all
@@ -73,6 +74,16 @@
dolphinscheduler-storage-all
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-extract-master
+
+
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-extract-worker
+
+
org.springframework.bootspring-boot-starter-cache
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
index 1bbe919353..7169203834 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
@@ -24,8 +24,7 @@ import org.apache.dolphinscheduler.common.thread.ThreadUtils;
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
import org.apache.dolphinscheduler.scheduler.api.SchedulerApi;
import org.apache.dolphinscheduler.server.master.registry.MasterRegistryClient;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRPCServer;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
+import org.apache.dolphinscheduler.server.master.rpc.MasterRpcServer;
import org.apache.dolphinscheduler.server.master.runner.EventExecuteService;
import org.apache.dolphinscheduler.server.master.runner.FailoverExecuteThread;
import org.apache.dolphinscheduler.server.master.runner.MasterSchedulerBootstrap;
@@ -72,10 +71,7 @@ public class MasterServer implements IStoppable {
private FailoverExecuteThread failoverExecuteThread;
@Autowired
- private MasterRPCServer masterRPCServer;
-
- @Autowired
- private MasterRpcClient masterRpcClient;
+ private MasterRpcServer masterRPCServer;
public static void main(String[] args) {
Thread.currentThread().setName(Constants.THREAD_NAME_MASTER_SERVER);
@@ -89,7 +85,6 @@ public class MasterServer implements IStoppable {
public void run() throws SchedulerException {
// init rpc server
this.masterRPCServer.start();
- this.masterRpcClient.start();
// install task plugin
this.taskPluginManager.loadPlugin();
@@ -129,8 +124,7 @@ public class MasterServer implements IStoppable {
try (
SchedulerApi closedSchedulerApi = schedulerApi;
MasterSchedulerBootstrap closedSchedulerBootstrap = masterSchedulerBootstrap;
- MasterRPCServer closedRpcServer = masterRPCServer;
- MasterRpcClient closedRpcClient = masterRpcClient;
+ MasterRpcServer closedRpcServer = masterRPCServer;
MasterRegistryClient closedMasterRegistryClient = masterRegistryClient;
// close spring Context and will invoke method with @PreDestroy annotation to destroy beans.
// like ServerNodeManager,HostManager,TaskResponseService,CuratorZookeeperClient,etc
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
index 366de70323..f1b8485c69 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
@@ -20,8 +20,6 @@ package org.apache.dolphinscheduler.server.master.config;
import org.apache.dolphinscheduler.common.utils.NetUtils;
import org.apache.dolphinscheduler.registry.api.ConnectStrategyProperties;
import org.apache.dolphinscheduler.registry.api.enums.RegistryNodeType;
-import org.apache.dolphinscheduler.remote.config.NettyClientConfig;
-import org.apache.dolphinscheduler.remote.config.NettyServerConfig;
import org.apache.dolphinscheduler.server.master.dispatch.host.assign.HostSelector;
import org.apache.dolphinscheduler.server.master.processor.queue.TaskExecuteRunnable;
import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable;
@@ -101,10 +99,6 @@ public class MasterConfig implements Validator {
private Duration workerGroupRefreshInterval = Duration.ofSeconds(10L);
- private NettyClientConfig masterRpcClientConfig = new NettyClientConfig();
-
- private NettyServerConfig masterRpcServerConfig = new NettyServerConfig();
-
// ip:listenPort
private String masterAddress;
@@ -187,7 +181,5 @@ public class MasterConfig implements Validator {
log.info("Master config: masterAddress -> {} ", masterAddress);
log.info("Master config: masterRegistryPath -> {} ", masterRegistryPath);
log.info("Master config: workerGroupRefreshInterval -> {} ", workerGroupRefreshInterval);
- log.info("Master config: masterRpcServerConfig -> {} ", masterRpcServerConfig);
- log.info("Master config: masterRpcClientConfig -> {} ", masterRpcClientConfig);
}
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/controller/WorkflowExecuteController.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/controller/WorkflowExecuteController.java
index 28f26d5cb8..85d8cf49e0 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/controller/WorkflowExecuteController.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/controller/WorkflowExecuteController.java
@@ -17,7 +17,7 @@
package org.apache.dolphinscheduler.server.master.controller;
-import org.apache.dolphinscheduler.remote.dto.WorkflowExecuteDto;
+import org.apache.dolphinscheduler.extract.master.dto.WorkflowExecuteDto;
import org.apache.dolphinscheduler.server.master.service.ExecutingService;
import java.util.Optional;
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 e0b49a531a..8ad4013868 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,8 +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.Message;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
import org.apache.dolphinscheduler.server.master.dispatch.enums.ExecutorType;
import lombok.AllArgsConstructor;
@@ -35,16 +34,8 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
public class ExecutionContext {
- /**
- * host
- */
private Host host;
- /**
- * command
- */
- private Message message;
-
private TaskInstance taskInstance;
private ExecutorType executorType;
@@ -54,12 +45,11 @@ public class ExecutionContext {
*/
private String workerGroup;
- public ExecutionContext(Message message, ExecutorType executorType, TaskInstance taskInstance) {
- this(message, executorType, DEFAULT_WORKER_GROUP, taskInstance);
+ public ExecutionContext(ExecutorType executorType, TaskInstance taskInstance) {
+ this(executorType, DEFAULT_WORKER_GROUP, taskInstance);
}
- public ExecutionContext(Message message, ExecutorType executorType, String workerGroup, TaskInstance taskInstance) {
- this.message = message;
+ public ExecutionContext(ExecutorType executorType, String workerGroup, TaskInstance taskInstance) {
this.executorType = executorType;
this.workerGroup = workerGroup;
this.taskInstance = taskInstance;
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/AbstractExecutorManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/AbstractExecutorManager.java
deleted file mode 100644
index 41b1837e5d..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/AbstractExecutorManager.java
+++ /dev/null
@@ -1,46 +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.server.master.dispatch.executor;
-
-import org.apache.dolphinscheduler.server.master.dispatch.context.ExecutionContext;
-import org.apache.dolphinscheduler.server.master.dispatch.exceptions.ExecuteException;
-
-/**
- * abstract executor manager
- */
-public abstract class AbstractExecutorManager implements ExecutorManager {
-
- /**
- * before execute , add time monitor , timeout
- *
- * @param context context
- * @throws ExecuteException if error throws ExecuteException
- */
- @Override
- public void beforeExecute(ExecutionContext context) throws ExecuteException {
- }
-
- /**
- * after execute , add dispatch monitor
- * @param context context
- * @throws ExecuteException if error throws ExecuteException
- */
- @Override
- public void afterExecute(ExecutionContext context) throws ExecuteException {
- }
-}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/ExecutorManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/ExecutorManager.java
deleted file mode 100644
index 9f1e02f151..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/ExecutorManager.java
+++ /dev/null
@@ -1,58 +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.server.master.dispatch.executor;
-
-import org.apache.dolphinscheduler.server.master.dispatch.context.ExecutionContext;
-import org.apache.dolphinscheduler.server.master.dispatch.exceptions.ExecuteException;
-
-/**
- * executor manager
- */
-public interface ExecutorManager {
-
- /**
- * before execute
- *
- * @param executeContext executeContext
- * @throws ExecuteException if error throws ExecuteException
- */
- void beforeExecute(ExecutionContext executeContext) throws ExecuteException;
-
- /**
- * execute task
- *
- * @param context context
- * @return T
- * @throws ExecuteException if error throws ExecuteException
- */
- void execute(ExecutionContext context) throws ExecuteException;
-
- /**
- * execute task directly without retry
- * @param context context
- * @throws ExecuteException if error throws ExecuteException
- */
- void executeDirectly(ExecutionContext context) throws ExecuteException;
-
- /**
- * after execute
- * @param context context
- * @throws ExecuteException if error throws ExecuteException
- */
- void afterExecute(ExecutionContext context) throws ExecuteException;
-}
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
deleted file mode 100644
index 7ceb6e2977..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManager.java
+++ /dev/null
@@ -1,187 +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.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.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.registry.ServerNodeManager;
-
-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;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * netty executor manager
- */
-@Service
-@Slf4j
-public class NettyExecutorManager extends AbstractExecutorManager {
-
- /**
- * server node manager
- */
- @Autowired
- private ServerNodeManager serverNodeManager;
-
- @Autowired
- private List nettyRequestProcessors;
-
- /**
- * netty remote client
- */
- private final NettyRemotingClient nettyRemotingClient;
-
- /**
- * constructor
- */
- public NettyExecutorManager() {
- final NettyClientConfig clientConfig = new NettyClientConfig();
- this.nettyRemotingClient = new NettyRemotingClient(clientConfig);
- }
-
- @PostConstruct
- public void init() {
- for (NettyRequestProcessor nettyRequestProcessor : nettyRequestProcessors) {
- this.nettyRemotingClient.registerProcessor(nettyRequestProcessor);
- }
- }
-
- /**
- * execute logic
- *
- * @param context context
- * @return result
- * @throws ExecuteException if error throws ExecuteException
- */
- @Override
- public void execute(ExecutionContext context) throws ExecuteException {
- // all nodes
- Set allNodes = getAllNodes(context);
- // fail nodes
- Set failNodeSet = new HashSet<>();
- // build command accord executeContext
- Message message = context.getMessage();
- // execute task host
- Host host = context.getHost();
- for (int i = 0; i < allNodes.size(); i++) {
- try {
- 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
- // is not belongs to the down worker ISSUE-10842.
- context.getTaskInstance().setHost(host.getAddress());
- return;
- } catch (ExecuteException 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 : {}", message, host);
- } else {
- throw new ExecuteException("fail after try all nodes");
- }
- } catch (Throwable t) {
- throw new ExecuteException("fail after try all nodes");
- }
- }
- }
- }
-
- @Override
- public void executeDirectly(ExecutionContext context) throws ExecuteException {
- Host host = context.getHost();
- doExecute(host, context.getMessage());
- }
-
- /**
- * execute logic
- *
- * @param host host
- * @param message command
- * @throws ExecuteException if error 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, message);
- success = true;
- } catch (Exception 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", message, host));
- }
- }
-
- /**
- * get all nodes
- *
- * @param context context
- * @return nodes
- */
- private Set getAllNodes(ExecutionContext context) throws WorkerGroupNotFoundException {
- Set nodes = Collections.emptySet();
- /**
- * executor type
- */
- ExecutorType executorType = context.getExecutorType();
- switch (executorType) {
- case WORKER:
- nodes = serverNodeManager.getWorkerGroupNodes(context.getWorkerGroup());
- break;
- case CLIENT:
- break;
- default:
- throw new IllegalArgumentException("invalid executor type : " + executorType);
-
- }
- return nodes;
- }
-
-}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/CommonHostManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/CommonHostManager.java
index 91fadf31bd..5ca63f12e3 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/CommonHostManager.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/CommonHostManager.java
@@ -17,7 +17,7 @@
package org.apache.dolphinscheduler.server.master.dispatch.host;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
import org.apache.dolphinscheduler.server.master.dispatch.exceptions.WorkerGroupNotFoundException;
import org.apache.dolphinscheduler.server.master.dispatch.host.assign.HostWorker;
import org.apache.dolphinscheduler.server.master.registry.ServerNodeManager;
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/HostManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/HostManager.java
index 9ce087197f..663b5c82b2 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/HostManager.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/HostManager.java
@@ -17,7 +17,7 @@
package org.apache.dolphinscheduler.server.master.dispatch.host;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
import org.apache.dolphinscheduler.server.master.dispatch.exceptions.WorkerGroupNotFoundException;
import java.util.Optional;
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/LowerWeightHostManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/LowerWeightHostManager.java
index 0daaebd10c..a6cb9352a8 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/LowerWeightHostManager.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/LowerWeightHostManager.java
@@ -19,7 +19,7 @@ package org.apache.dolphinscheduler.server.master.dispatch.host;
import org.apache.dolphinscheduler.common.constants.Constants;
import org.apache.dolphinscheduler.common.model.WorkerHeartBeat;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
import org.apache.dolphinscheduler.server.master.dispatch.exceptions.WorkerGroupNotFoundException;
import org.apache.dolphinscheduler.server.master.dispatch.host.assign.HostWeight;
import org.apache.dolphinscheduler.server.master.dispatch.host.assign.HostWorker;
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/HostWeight.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/HostWeight.java
index b3cb2ae75c..2cd65be1f1 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/HostWeight.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/HostWeight.java
@@ -17,8 +17,8 @@
package org.apache.dolphinscheduler.server.master.dispatch.host.assign;
-import org.apache.dolphinscheduler.remote.utils.Constants;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.utils.Constants;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
/**
* host weight
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/HostWorker.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/HostWorker.java
index 6515464b89..f25b621840 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/HostWorker.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/HostWorker.java
@@ -17,7 +17,7 @@
package org.apache.dolphinscheduler.server.master.dispatch.host.assign;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
/**
* host worker
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 4afaadf460..25ed3283ed 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,7 +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.task.TaskExecuteRunningMessageAck;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.worker.ITaskInstanceExecutionEventAckListener;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceExecutionRunningEventAck;
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;
@@ -111,13 +113,11 @@ 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
- TaskExecuteRunningMessageAck taskExecuteRunningMessageAck =
- new TaskExecuteRunningMessageAck(true,
- taskEvent.getTaskInstanceId(),
- masterConfig.getMasterAddress(),
- taskEvent.getWorkerAddress(),
- System.currentTimeMillis());
- taskEvent.getChannel().writeAndFlush(taskExecuteRunningMessageAck.convert2Command());
+ ITaskInstanceExecutionEventAckListener instanceExecutionEventAckListener =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskEvent.getWorkerAddress(), ITaskInstanceExecutionEventAckListener.class);
+ instanceExecutionEventAckListener.handleTaskInstanceExecutionRunningEventAck(
+ TaskInstanceExecutionRunningEventAck.success(taskEvent.getTaskInstanceId()));
}
@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 be38e40ece..f331dfd360 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,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.task.TaskExecuteResultMessageAck;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.worker.ITaskInstanceExecutionEventAckListener;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceExecutionFinishEventAck;
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;
@@ -36,8 +38,6 @@ import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import io.netty.channel.Channel;
-
@Component
public class TaskResultEventHandler implements TaskEventHandler {
@@ -115,17 +115,11 @@ public class TaskResultEventHandler implements TaskEventHandler {
}
public void sendAckToWorker(TaskEvent taskEvent) {
- Channel channel = taskEvent.getChannel();
- if (channel == null) {
- return;
- }
- // we didn't set the receiver address, since the ack doen's need to retry
- TaskExecuteResultMessageAck taskExecuteAckMessage = new TaskExecuteResultMessageAck(true,
- taskEvent.getTaskInstanceId(),
- masterConfig.getMasterAddress(),
- taskEvent.getWorkerAddress(),
- System.currentTimeMillis());
- channel.writeAndFlush(taskExecuteAckMessage.convert2Command());
+ ITaskInstanceExecutionEventAckListener instanceExecutionEventAckListener =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskEvent.getWorkerAddress(), ITaskInstanceExecutionEventAckListener.class);
+ instanceExecutionEventAckListener.handleTaskInstanceExecutionFinishEventAck(
+ TaskInstanceExecutionFinishEventAck.success(taskEvent.getTaskInstanceId()));
}
@Override
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 eb82261b23..03300f2ddb 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,7 +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.task.TaskExecuteRunningMessageAck;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.worker.ITaskInstanceExecutionEventAckListener;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceExecutionRunningEventAck;
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;
@@ -107,14 +109,11 @@ 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
- TaskExecuteRunningMessageAck taskExecuteRunningMessageAck =
- new TaskExecuteRunningMessageAck(
- true,
- taskEvent.getTaskInstanceId(),
- masterConfig.getMasterAddress(),
- taskEvent.getWorkerAddress(),
- System.currentTimeMillis());
- taskEvent.getChannel().writeAndFlush(taskExecuteRunningMessageAck.convert2Command());
+ ITaskInstanceExecutionEventAckListener instanceExecutionEventAckListener =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskEvent.getWorkerAddress(), ITaskInstanceExecutionEventAckListener.class);
+ instanceExecutionEventAckListener.handleTaskInstanceExecutionRunningEventAck(
+ TaskInstanceExecutionRunningEventAck.success(taskEvent.getTaskInstanceId()));
}
@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 cf9fc262ad..731a16b619 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,7 +19,6 @@ 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;
@@ -76,7 +75,7 @@ public class TaskStateEventHandler implements StateEventHandler {
log.info("The task instance need to release task Group: {}", task.getTaskGroupId());
try {
workflowExecuteRunnable.releaseTaskGroup(task);
- } catch (RemotingException | InterruptedException e) {
+ } catch (Exception e) {
throw new StateEventHandleException("Release task group failed", e);
}
}
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 0c4800b8fd..f684322875 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,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.task.TaskUpdateRuntimeAckMessage;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.worker.ITaskInstanceExecutionEventAckListener;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceExecutionInfoEventAck;
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;
@@ -50,7 +52,7 @@ public class TaskUpdatePidEventHandler implements TaskEventHandler {
int processInstanceId = taskEvent.getProcessInstanceId();
WorkflowExecuteRunnable workflowExecuteRunnable =
- this.processInstanceExecCacheManager.getByProcessInstanceId(processInstanceId);
+ processInstanceExecCacheManager.getByProcessInstanceId(processInstanceId);
if (workflowExecuteRunnable == null) {
sendAckToWorker(taskEvent);
throw new TaskEventHandleError(
@@ -91,9 +93,11 @@ public class TaskUpdatePidEventHandler implements TaskEventHandler {
private void sendAckToWorker(TaskEvent taskEvent) {
// If event handle success, send ack to worker to otherwise the worker will retry this event
- TaskUpdateRuntimeAckMessage taskUpdateRuntimeAckMessage =
- new TaskUpdateRuntimeAckMessage(true, taskEvent.getTaskInstanceId());
- taskEvent.getChannel().writeAndFlush(taskUpdateRuntimeAckMessage.convert2Command());
+ ITaskInstanceExecutionEventAckListener instanceExecutionEventAckListener =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskEvent.getWorkerAddress(), ITaskInstanceExecutionEventAckListener.class);
+ instanceExecutionEventAckListener.handleTaskInstanceExecutionInfoEventAck(
+ TaskInstanceExecutionInfoEventAck.success(taskEvent.getTaskInstanceId()));
}
@Override
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/metrics/ProcessInstanceMetrics.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/metrics/ProcessInstanceMetrics.java
index dc1341db1d..2db3d04c0b 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/metrics/ProcessInstanceMetrics.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/metrics/ProcessInstanceMetrics.java
@@ -90,12 +90,12 @@ public class ProcessInstanceMetrics {
.increment();
}
- public void cleanUpProcessInstanceCountMetricsByDefinitionCode(final String processDefinitionCode) {
+ public void cleanUpProcessInstanceCountMetricsByDefinitionCode(final Long processDefinitionCode) {
for (final String state : processInstanceStates) {
final Counter counter = Metrics.globalRegistry.counter(
"ds.workflow.instance.count",
"state", state,
- "process.definition.code", processDefinitionCode);
+ "process.definition.code", String.valueOf(processDefinitionCode));
Metrics.globalRegistry.remove(counter);
}
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/MasterTaskDispatchProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/MasterTaskDispatchProcessor.java
deleted file mode 100644
index e70199152a..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/MasterTaskDispatchProcessor.java
+++ /dev/null
@@ -1,135 +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.server.master.processor;
-
-import org.apache.dolphinscheduler.common.utils.DateUtils;
-import org.apache.dolphinscheduler.common.utils.JSONUtils;
-import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
-import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
-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.TaskDispatchRequest;
-import org.apache.dolphinscheduler.remote.command.task.TaskDispatchResponse;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
-import org.apache.dolphinscheduler.server.master.runner.MasterDelayTaskExecuteRunnableDelayQueue;
-import org.apache.dolphinscheduler.server.master.runner.execute.MasterDelayTaskExecuteRunnable;
-import org.apache.dolphinscheduler.server.master.runner.execute.MasterTaskExecuteRunnableFactoryBuilder;
-import org.apache.dolphinscheduler.server.master.runner.execute.MasterTaskExecutionContextHolder;
-import org.apache.dolphinscheduler.server.master.runner.message.MasterMessageSenderManager;
-
-import java.util.concurrent.TimeUnit;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import io.netty.channel.Channel;
-
-@Slf4j
-@Component
-public class MasterTaskDispatchProcessor implements MasterRpcProcessor {
-
- @Autowired
- private MasterTaskExecuteRunnableFactoryBuilder masterTaskExecuteRunnableFactoryBuilder;
-
- @Autowired
- private MasterMessageSenderManager masterMessageSenderManager;
-
- @Autowired
- private MasterDelayTaskExecuteRunnableDelayQueue masterDelayTaskExecuteRunnableDelayQueue;
-
- @Override
- public void process(Channel channel, Message message) {
- TaskDispatchRequest taskDispatchRequest = JSONUtils.parseObject(message.getBody(), TaskDispatchRequest.class);
- log.info("Receive task dispatch request, command: {}", taskDispatchRequest);
- TaskExecutionContext taskExecutionContext = taskDispatchRequest.getTaskExecutionContext();
- taskExecutionContext.setLogPath(LogUtils.getTaskInstanceLogFullPath(taskExecutionContext));
- try {
- // Since we need to make sure remove MDC key after cache, so we use finally to remove MDC key
- LogUtils.setWorkflowAndTaskInstanceIDMDC(taskExecutionContext.getProcessInstanceId(),
- taskExecutionContext.getTaskInstanceId());
- LogUtils.setTaskInstanceLogFullPathMDC(taskExecutionContext.getLogPath());
- MasterTaskExecutionContextHolder.putTaskExecutionContext(taskExecutionContext);
- // todo: calculate the delay in master dispatcher then we don't need to use a queue to store the task
- long remainTime =
- DateUtils.getRemainTime(DateUtils.timeStampToDate(taskExecutionContext.getFirstSubmitTime()),
- TimeUnit.SECONDS.toMillis(taskExecutionContext.getDelayTime()));
-
- // todo: move this to the master delay queue
- if (remainTime > 0) {
- log.info("Current taskInstance: {} is choose delay execution, delay time: {}ms, remainTime: {}ms",
- taskExecutionContext.getTaskName(),
- TimeUnit.SECONDS.toMillis(taskExecutionContext.getDelayTime()), remainTime);
- taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.DELAY_EXECUTION);
- masterMessageSenderManager.getMasterTaskExecuteResultMessageSender()
- .sendMessage(taskExecutionContext);
- }
-
- MasterDelayTaskExecuteRunnable masterDelayTaskExecuteRunnable = masterTaskExecuteRunnableFactoryBuilder
- .createWorkerDelayTaskExecuteRunnableFactory(taskExecutionContext.getTaskType())
- .createWorkerTaskExecuteRunnable(taskExecutionContext);
- if (masterDelayTaskExecuteRunnableDelayQueue
- .submitMasterDelayTaskExecuteRunnable(masterDelayTaskExecuteRunnable)) {
- log.info(
- "Submit task: {} to MasterDelayTaskExecuteRunnableDelayQueue success",
- taskExecutionContext.getTaskName());
- sendDispatchSuccessResult(channel, message, taskExecutionContext);
- } else {
- log.error(
- "Submit task: {} to MasterDelayTaskExecuteRunnableDelayQueue failed, current task waiting queue size: {} is full",
- taskExecutionContext.getTaskName(), masterDelayTaskExecuteRunnableDelayQueue.size());
- sendDispatchRejectResult(channel, message, taskExecutionContext);
- }
- } catch (Exception ex) {
- log.error("Handle task dispatch request error, command: {}", taskDispatchRequest, ex);
- MasterTaskExecutionContextHolder.removeTaskExecutionContext(taskExecutionContext.getTaskInstanceId());
- sendDispatchFailedResult(channel, message, taskExecutionContext, ex);
- } finally {
- LogUtils.removeWorkflowAndTaskInstanceIdMDC();
- LogUtils.removeTaskInstanceLogFullPathMDC();
- }
- }
-
- private void sendDispatchSuccessResult(Channel channel, Message dispatchRequest,
- TaskExecutionContext taskExecutionContext) {
- TaskDispatchResponse taskDispatchResponse =
- TaskDispatchResponse.success(taskExecutionContext.getTaskInstanceId());
- channel.writeAndFlush(taskDispatchResponse.convert2Command(dispatchRequest.getOpaque()));
- }
-
- private void sendDispatchRejectResult(Channel channel, Message dispatchRequest,
- TaskExecutionContext taskExecutionContext) {
- TaskDispatchResponse taskDispatchResponse =
- TaskDispatchResponse.failed(taskExecutionContext.getTaskInstanceId(), "Task dispatch queue is full");
- channel.writeAndFlush(taskDispatchResponse.convert2Command(dispatchRequest.getOpaque()));
- }
-
- private void sendDispatchFailedResult(Channel channel, Message dispatchRequest,
- TaskExecutionContext taskExecutionContext, Throwable throwable) {
- TaskDispatchResponse taskDispatchResponse =
- TaskDispatchResponse.failed(taskExecutionContext.getTaskInstanceId(), throwable.getMessage());
- channel.writeAndFlush(taskDispatchResponse.convert2Command(dispatchRequest.getOpaque()));
- }
-
- @Override
- public MessageType getCommandType() {
- return MessageType.TASK_DISPATCH_REQUEST;
- }
-}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteResultProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteResultProcessor.java
deleted file mode 100644
index bf48d62b69..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteResultProcessor.java
+++ /dev/null
@@ -1,73 +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.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.Message;
-import org.apache.dolphinscheduler.remote.command.MessageType;
-import org.apache.dolphinscheduler.remote.command.task.TaskExecuteResultMessage;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
-import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent;
-import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import io.netty.channel.Channel;
-
-/**
- * task execute response processor
- */
-@Component
-@Slf4j
-public class TaskExecuteResultProcessor implements MasterRpcProcessor {
-
- @Autowired
- private TaskEventService taskEventService;
-
- /**
- * task final result response
- * need master process , state persistence
- *
- * @param channel channel
- * @param message command
- */
- @Override
- public void process(Channel channel, Message message) {
- TaskExecuteResultMessage taskExecuteResultMessage = JSONUtils.parseObject(message.getBody(),
- TaskExecuteResultMessage.class);
- TaskEvent taskResultEvent = TaskEvent.newResultEvent(taskExecuteResultMessage,
- channel,
- taskExecuteResultMessage.getMessageSenderAddress());
- try (
- final LogUtils.MDCAutoClosableContext mdcAutoClosableContext = LogUtils.setWorkflowAndTaskInstanceIDMDC(
- taskResultEvent.getProcessInstanceId(), taskResultEvent.getTaskInstanceId())) {
- log.info("Received task execute result, event: {}", taskResultEvent);
-
- 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
deleted file mode 100644
index e768693bea..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteRunningProcessor.java
+++ /dev/null
@@ -1,68 +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.server.master.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.task.TaskExecuteRunningMessage;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
-import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent;
-import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import io.netty.channel.Channel;
-
-/**
- * task execute running processor
- */
-@Component
-@Slf4j
-public class TaskExecuteRunningProcessor implements MasterRpcProcessor {
-
- @Autowired
- private TaskEventService taskEventService;
-
- /**
- * task ack process
- *
- * @param channel channel channel
- * @param message command TaskExecuteAckCommand
- */
- @Override
- public void process(Channel channel, Message message) {
- TaskExecuteRunningMessage taskExecuteRunningMessage =
- JSONUtils.parseObject(message.getBody(), TaskExecuteRunningMessage.class);
- log.info("taskExecuteRunningCommand: {}", taskExecuteRunningMessage);
-
- TaskEvent taskEvent = TaskEvent.newRunningEvent(taskExecuteRunningMessage,
- channel,
- taskExecuteRunningMessage.getMessageSenderAddress());
- 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
deleted file mode 100644
index 67c69555d1..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskExecuteStartProcessor.java
+++ /dev/null
@@ -1,78 +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.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.Message;
-import org.apache.dolphinscheduler.remote.command.MessageType;
-import org.apache.dolphinscheduler.remote.command.task.TaskExecuteStartMessage;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
-import org.apache.dolphinscheduler.server.master.runner.StreamTaskExecuteRunnable;
-import org.apache.dolphinscheduler.server.master.runner.StreamTaskExecuteThreadPool;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import io.netty.channel.Channel;
-
-/**
- * task execute start processor, from api to master
- */
-@Component
-@Slf4j
-public class TaskExecuteStartProcessor implements MasterRpcProcessor {
-
- @Autowired
- private StreamTaskExecuteThreadPool streamTaskExecuteThreadPool;
-
- @Autowired
- private TaskDefinitionDao taskDefinitionDao;
-
- @Override
- public void process(Channel channel, Message message) {
- TaskExecuteStartMessage taskExecuteStartMessage =
- JSONUtils.parseObject(message.getBody(), TaskExecuteStartMessage.class);
- log.info("taskExecuteStartCommand: {}", taskExecuteStartMessage);
-
- TaskDefinition taskDefinition = taskDefinitionDao.findTaskDefinition(
- taskExecuteStartMessage.getTaskDefinitionCode(), taskExecuteStartMessage.getTaskDefinitionVersion());
- if (taskDefinition == null) {
- log.error("Task definition can not be found, taskDefinitionCode:{}, taskDefinitionVersion:{}",
- taskExecuteStartMessage.getTaskDefinitionCode(),
- taskExecuteStartMessage.getTaskDefinitionVersion());
- return;
- }
- streamTaskExecuteThreadPool.execute(new StreamTaskExecuteRunnable(taskDefinition, taskExecuteStartMessage));
-
- // response
- 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/TaskKillResponseProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessor.java
deleted file mode 100644
index 76ec751103..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessor.java
+++ /dev/null
@@ -1,58 +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.server.master.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.task.TaskKillResponse;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.stereotype.Component;
-
-import io.netty.channel.Channel;
-
-/**
- * task response processor
- */
-@Component
-@Slf4j
-public class TaskKillResponseProcessor implements MasterRpcProcessor {
-
- /**
- * task final result response
- * need master process , state persistence
- *
- * @param channel channel
- * @param message command
- */
- @Override
- 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.RESPONSE;
- }
-
-}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskUpdateRuntimeProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskUpdateRuntimeProcessor.java
deleted file mode 100644
index 5edf3acf6e..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskUpdateRuntimeProcessor.java
+++ /dev/null
@@ -1,68 +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.server.master.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.task.TaskUpdateRuntimeMessage;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
-import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent;
-import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import io.netty.channel.Channel;
-
-/**
- * task execute running processor
- */
-@Component
-@Slf4j
-public class TaskUpdateRuntimeProcessor implements MasterRpcProcessor {
-
- @Autowired
- private TaskEventService taskEventService;
-
- /**
- * task ack process
- *
- * @param channel channel channel
- * @param message command TaskExecuteAckCommand
- */
- @Override
- public void process(Channel channel, Message message) {
- TaskUpdateRuntimeMessage taskUpdatePidRequest =
- JSONUtils.parseObject(message.getBody(), TaskUpdateRuntimeMessage.class);
- log.info("taskUpdatePidCommand: {}", taskUpdatePidRequest);
-
- TaskEvent taskEvent = TaskEvent.newUpdatePidEvent(taskUpdatePidRequest,
- channel,
- taskUpdatePidRequest.getMessageSenderAddress());
- taskEventService.addEvent(taskEvent);
- }
-
- @Override
- public MessageType getCommandType() {
- return MessageType.TASK_UPDATE_RUNTIME_MESSAGE;
- }
-
-}
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
deleted file mode 100644
index 036cc315ff..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/WorkflowExecutingDataRequestProcessor.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.server.master.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.workflow.WorkflowExecutingDataRequest;
-import org.apache.dolphinscheduler.remote.command.workflow.WorkflowExecutingDataResponse;
-import org.apache.dolphinscheduler.remote.dto.WorkflowExecuteDto;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
-import org.apache.dolphinscheduler.server.master.service.ExecutingService;
-
-import java.util.Optional;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import io.netty.channel.Channel;
-
-/**
- * workflow executing data process from api/master
- */
-@Component
-@Slf4j
-public class WorkflowExecutingDataRequestProcessor implements MasterRpcProcessor {
-
- @Autowired
- private ExecutingService executingService;
-
- @Override
- 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());
-
- WorkflowExecutingDataResponse responseCommand = new WorkflowExecutingDataResponse();
- workflowExecuteDtoOptional.ifPresent(responseCommand::setWorkflowExecuteDto);
- 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
deleted file mode 100644
index dae969c4ad..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/WorkflowMetricsCleanUpProcessor.java
+++ /dev/null
@@ -1,48 +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.server.master.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.workflow.WorkflowMetricsCleanUpRequest;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
-import org.apache.dolphinscheduler.server.master.metrics.ProcessInstanceMetrics;
-
-import org.springframework.stereotype.Component;
-
-import io.netty.channel.Channel;
-
-@Component
-public class WorkflowMetricsCleanUpProcessor implements MasterRpcProcessor {
-
- @Override
- public void process(Channel channel, Message message) {
- WorkflowMetricsCleanUpRequest workflowMetricsCleanUpRequest =
- JSONUtils.parseObject(message.getBody(), WorkflowMetricsCleanUpRequest.class);
-
- ProcessInstanceMetrics.cleanUpProcessInstanceCountMetricsByDefinitionCode(
- 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 11329732c9..03f254a09c 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,6 @@ 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.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;
@@ -39,8 +38,6 @@ 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 StateEventResponseService {
@@ -74,11 +71,11 @@ public class StateEventResponseService {
List remainEvents = new ArrayList<>(eventQueue.size());
eventQueue.drainTo(remainEvents);
for (StateEvent event : remainEvents) {
- try (
- final LogUtils.MDCAutoClosableContext mdcAutoClosableContext =
- LogUtils.setWorkflowAndTaskInstanceIDMDC(event.getProcessInstanceId(),
- event.getTaskInstanceId())) {
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(event.getProcessInstanceId(), event.getTaskInstanceId());
this.persist(event);
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
}
@@ -118,32 +115,24 @@ public class StateEventResponseService {
Thread.currentThread().interrupt();
break;
}
- try (
- final LogUtils.MDCAutoClosableContext mdcAutoClosableContext =
- LogUtils.setWorkflowAndTaskInstanceIDMDC(stateEvent.getProcessInstanceId(),
- stateEvent.getTaskInstanceId())) {
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(stateEvent.getProcessInstanceId(),
+ stateEvent.getTaskInstanceId());
// if not task , blocking here
persist(stateEvent);
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
log.info("State event loop service stopped");
}
}
- private void writeResponse(StateEvent stateEvent) {
- Channel channel = stateEvent.getChannel();
- if (channel != null) {
- StateEventResponse command = new StateEventResponse(stateEvent.getKey());
- channel.writeAndFlush(command.convert2Command());
- }
- }
-
private void persist(StateEvent stateEvent) {
try {
if (!this.processInstanceExecCacheManager.contains(stateEvent.getProcessInstanceId())) {
log.warn("Persist event into workflow execute thread error, "
+ "cannot find the workflow instance from cache manager, event: {}", stateEvent);
- writeResponse(stateEvent);
return;
}
@@ -160,8 +149,6 @@ public class StateEventResponseService {
default:
}
workflowExecuteThreadPool.submitStateEvent(stateEvent);
- // this response is not needed.
- writeResponse(stateEvent);
} catch (Exception e) {
log.error("Persist event queue error, event: {}", stateEvent, e);
}
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 ff250ed403..e55dfbdd5d 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
@@ -19,10 +19,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.extract.master.transportor.TaskInstanceExecutionFinishEvent;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceExecutionInfoEvent;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceExecutionRunningEvent;
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
-import org.apache.dolphinscheduler.remote.command.task.TaskExecuteResultMessage;
-import org.apache.dolphinscheduler.remote.command.task.TaskExecuteRunningMessage;
-import org.apache.dolphinscheduler.remote.command.task.TaskUpdateRuntimeMessage;
import java.util.Date;
@@ -30,7 +30,6 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
-import io.netty.channel.Channel;
@Data
@Builder
@@ -95,11 +94,6 @@ public class TaskEvent {
private int cacheTaskInstanceId;
- /**
- * channel
- */
- private Channel channel;
-
private int processInstanceId;
public static TaskEvent newDispatchEvent(int processInstanceId, int taskInstanceId, String workerAddress) {
@@ -111,7 +105,7 @@ public class TaskEvent {
return event;
}
- public static TaskEvent newRunningEvent(TaskExecuteRunningMessage command, Channel channel, String workerAddress) {
+ public static TaskEvent newRunningEvent(TaskInstanceExecutionRunningEvent command) {
TaskEvent event = new TaskEvent();
event.setProcessInstanceId(command.getProcessInstanceId());
event.setTaskInstanceId(command.getTaskInstanceId());
@@ -120,13 +114,12 @@ public class TaskEvent {
event.setExecutePath(command.getExecutePath());
event.setLogPath(command.getLogPath());
event.setAppIds(command.getAppIds());
- event.setChannel(channel);
- event.setWorkerAddress(workerAddress);
+ event.setWorkerAddress(command.getHost());
event.setEvent(TaskEventType.RUNNING);
return event;
}
- public static TaskEvent newResultEvent(TaskExecuteResultMessage command, Channel channel, String workerAddress) {
+ public static TaskEvent newResultEvent(TaskInstanceExecutionFinishEvent command) {
TaskEvent event = new TaskEvent();
event.setProcessInstanceId(command.getProcessInstanceId());
event.setTaskInstanceId(command.getTaskInstanceId());
@@ -138,8 +131,7 @@ public class TaskEvent {
event.setProcessId(command.getProcessId());
event.setAppIds(command.getAppIds());
event.setVarPool(command.getVarPool());
- event.setChannel(channel);
- event.setWorkerAddress(workerAddress);
+ event.setWorkerAddress(command.getHost());
event.setEvent(TaskEventType.RESULT);
return event;
}
@@ -153,14 +145,13 @@ public class TaskEvent {
return event;
}
- public static TaskEvent newUpdatePidEvent(TaskUpdateRuntimeMessage command, Channel channel, String workerAddress) {
+ public static TaskEvent newUpdatePidEvent(TaskInstanceExecutionInfoEvent command) {
TaskEvent event = new TaskEvent();
event.setProcessInstanceId(command.getProcessInstanceId());
event.setTaskInstanceId(command.getTaskInstanceId());
event.setStartTime(DateUtils.timeStampToDate(command.getStartTime()));
event.setLogPath(command.getLogPath());
- event.setChannel(channel);
- event.setWorkerAddress(workerAddress);
+ event.setWorkerAddress(command.getHost());
event.setEvent(TaskEventType.UPDATE_PID);
return event;
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskExecuteRunnable.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskExecuteRunnable.java
index ab022a762b..78199f517d 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskExecuteRunnable.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskExecuteRunnable.java
@@ -50,9 +50,8 @@ public class TaskExecuteRunnable implements Runnable {
while (!this.events.isEmpty()) {
// we handle the task event belongs to one task serial, so if the event comes in wrong order,
TaskEvent event = this.events.peek();
- try (
- final LogUtils.MDCAutoClosableContext mdcAutoClosableContext = LogUtils
- .setWorkflowAndTaskInstanceIDMDC(event.getProcessInstanceId(), event.getTaskInstanceId())) {
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(event.getProcessInstanceId(), event.getTaskInstanceId());
log.info("Handle task event begin: {}", event);
taskEventHandlerMap.get(event.getEvent()).handleTaskEvent(event);
events.remove(event);
@@ -69,6 +68,8 @@ public class TaskExecuteRunnable implements Runnable {
log.error("Handle task event error, get a unknown exception, this event will be removed, event: {}",
event, unknownException);
events.remove(event);
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/registry/MasterWaitingStrategy.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/registry/MasterWaitingStrategy.java
index 6929317ebd..4089acfd02 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/registry/MasterWaitingStrategy.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/registry/MasterWaitingStrategy.java
@@ -27,7 +27,7 @@ import org.apache.dolphinscheduler.registry.api.StrategyType;
import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.event.WorkflowEventQueue;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRPCServer;
+import org.apache.dolphinscheduler.server.master.rpc.MasterRpcServer;
import org.apache.dolphinscheduler.server.master.runner.StateWheelExecuteThread;
import java.time.Duration;
@@ -51,7 +51,7 @@ public class MasterWaitingStrategy implements MasterConnectStrategy {
@Autowired
private RegistryClient registryClient;
@Autowired
- private MasterRPCServer masterRPCServer;
+ private MasterRpcServer masterRPCServer;
@Autowired
private WorkflowEventQueue workflowEventQueue;
@Autowired
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/registry/ServerNodeManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/registry/ServerNodeManager.java
index 3e2ba337ea..852f73ce73 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/registry/ServerNodeManager.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/registry/ServerNodeManager.java
@@ -24,12 +24,12 @@ import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.dao.AlertDao;
import org.apache.dolphinscheduler.dao.entity.WorkerGroup;
import org.apache.dolphinscheduler.dao.mapper.WorkerGroupMapper;
+import org.apache.dolphinscheduler.extract.base.utils.NamedThreadFactory;
import org.apache.dolphinscheduler.registry.api.Event;
import org.apache.dolphinscheduler.registry.api.Event.Type;
import org.apache.dolphinscheduler.registry.api.RegistryClient;
import org.apache.dolphinscheduler.registry.api.SubscribeListener;
import org.apache.dolphinscheduler.registry.api.enums.RegistryNodeType;
-import org.apache.dolphinscheduler.remote.utils.NamedThreadFactory;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.dispatch.exceptions.WorkerGroupNotFoundException;
import org.apache.dolphinscheduler.service.queue.MasterPriorityQueue;
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/WorkerRpcProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/ITaskInstanceOperationFunction.java
similarity index 85%
rename from dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/WorkerRpcProcessor.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/ITaskInstanceOperationFunction.java
index 898d56475c..640ee6be12 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/processor/WorkerRpcProcessor.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/ITaskInstanceOperationFunction.java
@@ -15,7 +15,10 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.remote.processor;
+package org.apache.dolphinscheduler.server.master.rpc;
+
+public interface ITaskInstanceOperationFunction {
+
+ Y operate(X x);
-public interface WorkerRpcProcessor extends NettyRequestProcessor {
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicITaskInstanceDispatchOperationFunction.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicITaskInstanceDispatchOperationFunction.java
new file mode 100644
index 0000000000..22258c613b
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicITaskInstanceDispatchOperationFunction.java
@@ -0,0 +1,96 @@
+/*
+ * 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.rpc;
+
+import org.apache.dolphinscheduler.common.utils.DateUtils;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskDispatchRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskDispatchResponse;
+import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
+import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
+import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils;
+import org.apache.dolphinscheduler.server.master.runner.MasterDelayTaskExecuteRunnableDelayQueue;
+import org.apache.dolphinscheduler.server.master.runner.execute.MasterDelayTaskExecuteRunnable;
+import org.apache.dolphinscheduler.server.master.runner.execute.MasterTaskExecuteRunnableFactoryBuilder;
+import org.apache.dolphinscheduler.server.master.runner.execute.MasterTaskExecutionContextHolder;
+
+import java.util.concurrent.TimeUnit;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogicITaskInstanceDispatchOperationFunction
+ implements
+ ITaskInstanceOperationFunction {
+
+ @Autowired
+ private MasterTaskExecuteRunnableFactoryBuilder masterTaskExecuteRunnableFactoryBuilder;
+
+ @Autowired
+ private MasterDelayTaskExecuteRunnableDelayQueue masterDelayTaskExecuteRunnableDelayQueue;
+
+ @Override
+ public LogicTaskDispatchResponse operate(LogicTaskDispatchRequest taskDispatchRequest) {
+ log.info("Received dispatchLogicTask request: {}", taskDispatchRequest);
+ TaskExecutionContext taskExecutionContext = taskDispatchRequest.getTaskExecutionContext();
+ try {
+ final int taskInstanceId = taskExecutionContext.getTaskInstanceId();
+ final int workflowInstanceId = taskExecutionContext.getProcessInstanceId();
+ final String taskInstanceName = taskExecutionContext.getTaskName();
+
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(workflowInstanceId, taskInstanceId);
+ LogUtils.setTaskInstanceLogFullPathMDC(taskExecutionContext.getLogPath());
+
+ MasterTaskExecutionContextHolder.putTaskExecutionContext(taskExecutionContext);
+ // todo: calculate the delay in master dispatcher then we don't need to use a queue to store the task
+ final long remainTime =
+ DateUtils.getRemainTime(DateUtils.timeStampToDate(taskExecutionContext.getFirstSubmitTime()),
+ TimeUnit.SECONDS.toMillis(taskExecutionContext.getDelayTime()));
+ if (remainTime > 0) {
+ log.info("Current taskInstance: {} is choosing delay execution, delay time: {}/ms, remainTime: {}/ms",
+ taskExecutionContext.getTaskName(),
+ TimeUnit.SECONDS.toMillis(taskExecutionContext.getDelayTime()), remainTime);
+ taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.DELAY_EXECUTION);
+ // todo: send delay execution message
+ return LogicTaskDispatchResponse.success(taskExecutionContext.getTaskInstanceId());
+ }
+
+ final MasterDelayTaskExecuteRunnable masterDelayTaskExecuteRunnable =
+ masterTaskExecuteRunnableFactoryBuilder
+ .createWorkerDelayTaskExecuteRunnableFactory(taskExecutionContext.getTaskType())
+ .createWorkerTaskExecuteRunnable(taskExecutionContext);
+ if (masterDelayTaskExecuteRunnableDelayQueue
+ .submitMasterDelayTaskExecuteRunnable(masterDelayTaskExecuteRunnable)) {
+ log.info("Submit LogicTask: {} to MasterDelayTaskExecuteRunnableDelayQueue success", taskInstanceName);
+ return LogicTaskDispatchResponse.success(taskInstanceId);
+ } else {
+ log.error(
+ "Submit LogicTask: {} to MasterDelayTaskExecuteRunnableDelayQueue failed, current task waiting queue size: {} is full",
+ taskInstanceName, masterDelayTaskExecuteRunnableDelayQueue.size());
+ return LogicTaskDispatchResponse.failed(taskInstanceId,
+ "MasterDelayTaskExecuteRunnableDelayQueue is full");
+ }
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
+ LogUtils.removeTaskInstanceLogFullPathMDC();
+ }
+ }
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/MasterTaskKillProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicITaskInstanceKillOperationFunction.java
similarity index 62%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/MasterTaskKillProcessor.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicITaskInstanceKillOperationFunction.java
index 37a61e6246..6b43a7690a 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/MasterTaskKillProcessor.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicITaskInstanceKillOperationFunction.java
@@ -15,15 +15,11 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.server.master.processor;
+package org.apache.dolphinscheduler.server.master.rpc;
-import org.apache.dolphinscheduler.common.utils.JSONUtils;
-import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskKillRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskKillResponse;
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.TaskKillRequest;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
import org.apache.dolphinscheduler.server.master.exception.MasterTaskExecuteException;
import org.apache.dolphinscheduler.server.master.runner.MasterDelayTaskExecuteRunnableDelayQueue;
import org.apache.dolphinscheduler.server.master.runner.execute.MasterTaskExecuteRunnable;
@@ -35,49 +31,42 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import io.netty.channel.Channel;
-
@Slf4j
@Component
-public class MasterTaskKillProcessor implements MasterRpcProcessor {
+public class LogicITaskInstanceKillOperationFunction
+ implements
+ ITaskInstanceOperationFunction {
@Autowired
private MasterDelayTaskExecuteRunnableDelayQueue masterDelayTaskExecuteRunnableDelayQueue;
@Override
- public void process(Channel channel, Message message) {
- TaskKillRequest taskKillRequest = JSONUtils.parseObject(message.getBody(), TaskKillRequest.class);
- log.info("Master receive task kill request: {}", taskKillRequest);
- int taskInstanceId = taskKillRequest.getTaskInstanceId();
- try (LogUtils.MDCAutoClosableContext mdcAutoClosableContext = LogUtils.setTaskInstanceIdMDC(taskInstanceId)) {
- TaskExecutionContext taskExecutionContext =
- MasterTaskExecutionContextHolder.getTaskExecutionContext(taskInstanceId);
- if (taskExecutionContext == null) {
- log.error("Cannot find the TaskExecutionContext, this task may already been killed");
- return;
- }
- MasterTaskExecuteRunnable masterTaskExecuteRunnable =
+ public LogicTaskKillResponse operate(LogicTaskKillRequest taskKillRequest) {
+ final int taskInstanceId = taskKillRequest.getTaskInstanceId();
+ try {
+ LogUtils.setTaskInstanceIdMDC(taskKillRequest.getTaskInstanceId());
+ log.info("Received killLogicTask request: {}", taskKillRequest);
+ final MasterTaskExecuteRunnable masterTaskExecuteRunnable =
MasterTaskExecuteRunnableHolder.getMasterTaskExecuteRunnable(taskInstanceId);
if (masterTaskExecuteRunnable == null) {
log.error("Cannot find the MasterTaskExecuteRunnable, this task may already been killed");
- return;
+ return LogicTaskKillResponse.fail("Cannot find the MasterTaskExecuteRunnable");
}
try {
masterTaskExecuteRunnable.cancelTask();
masterDelayTaskExecuteRunnableDelayQueue
.removeMasterDelayTaskExecuteRunnable(masterTaskExecuteRunnable);
+ return LogicTaskKillResponse.success();
} catch (MasterTaskExecuteException e) {
log.error("Cancel MasterTaskExecuteRunnable failed ", e);
+ return LogicTaskKillResponse.fail("Cancel MasterTaskExecuteRunnable failed: " + e.getMessage());
} finally {
+ // todo: If cancel failed, we cannot remove the context?
MasterTaskExecutionContextHolder.removeTaskExecutionContext(taskInstanceId);
MasterTaskExecuteRunnableHolder.removeMasterTaskExecuteRunnable(taskInstanceId);
}
+ } finally {
+ LogUtils.removeTaskInstanceIdMDC();
}
}
-
- @Override
- public MessageType getCommandType() {
- return MessageType.TASK_KILL_REQUEST;
- }
-
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/MasterTaskPauseProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicITaskInstancePauseOperationFunction.java
similarity index 55%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/MasterTaskPauseProcessor.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicITaskInstancePauseOperationFunction.java
index 41c9c50d69..912193b91e 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/MasterTaskPauseProcessor.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicITaskInstancePauseOperationFunction.java
@@ -15,15 +15,12 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.server.master.processor;
+package org.apache.dolphinscheduler.server.master.rpc;
-import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskPauseRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskPauseResponse;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
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.TaskPauseRequest;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
import org.apache.dolphinscheduler.server.master.exception.MasterTaskExecuteException;
import org.apache.dolphinscheduler.server.master.runner.execute.MasterTaskExecuteRunnable;
import org.apache.dolphinscheduler.server.master.runner.execute.MasterTaskExecuteRunnableHolder;
@@ -32,33 +29,34 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
-import io.netty.channel.Channel;
-
@Slf4j
@Component
-public class MasterTaskPauseProcessor implements MasterRpcProcessor {
+public class LogicITaskInstancePauseOperationFunction
+ implements
+ ITaskInstanceOperationFunction {
@Override
- public void process(Channel channel, Message message) {
- TaskPauseRequest taskPauseRequest = JSONUtils.parseObject(message.getBody(), TaskPauseRequest.class);
- MasterTaskExecuteRunnable masterTaskExecuteRunnable =
- MasterTaskExecuteRunnableHolder.getMasterTaskExecuteRunnable(taskPauseRequest.getTaskInstanceId());
- if (masterTaskExecuteRunnable == null) {
- log.info("Cannot find the MasterTaskExecuteRunnable");
- return;
- }
- TaskExecutionContext taskExecutionContext = masterTaskExecuteRunnable.getTaskExecutionContext();
+ public LogicTaskPauseResponse operate(LogicTaskPauseRequest taskPauseRequest) {
try {
+ LogUtils.setTaskInstanceIdMDC(taskPauseRequest.getTaskInstanceId());
+ final MasterTaskExecuteRunnable masterTaskExecuteRunnable =
+ MasterTaskExecuteRunnableHolder.getMasterTaskExecuteRunnable(taskPauseRequest.getTaskInstanceId());
+ if (masterTaskExecuteRunnable == null) {
+ log.info("Cannot find the MasterTaskExecuteRunnable");
+ return LogicTaskPauseResponse.fail("Cannot find the MasterTaskExecuteRunnable");
+ }
+ final TaskExecutionContext taskExecutionContext = masterTaskExecuteRunnable.getTaskExecutionContext();
LogUtils.setWorkflowAndTaskInstanceIDMDC(taskExecutionContext.getProcessInstanceId(),
taskExecutionContext.getTaskInstanceId());
masterTaskExecuteRunnable.pauseTask();
+ return LogicTaskPauseResponse.success();
} catch (MasterTaskExecuteException e) {
log.error("Pause MasterTaskExecuteRunnable failed", e);
+ return LogicTaskPauseResponse.fail("Pause MasterTaskExecuteRunnable failed: " + e.getMessage());
+ } finally {
+ LogUtils.removeTaskInstanceIdMDC();
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
- @Override
- public MessageType getCommandType() {
- return MessageType.PAUSE_TASK_INSTANCE;
- }
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicTaskInstanceOperationFunctionManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicTaskInstanceOperationFunctionManager.java
new file mode 100644
index 0000000000..3a07d68364
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicTaskInstanceOperationFunctionManager.java
@@ -0,0 +1,60 @@
+/*
+ * 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.rpc;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class LogicTaskInstanceOperationFunctionManager {
+
+ @Autowired
+ private LogicITaskInstanceDispatchOperationFunction logicITaskInstanceDispatchOperationFunction;
+
+ @Autowired
+ private LogicITaskInstanceKillOperationFunction logicITaskInstanceKillOperationFunction;
+
+ @Autowired
+ private LogicITaskInstancePauseOperationFunction logicITaskInstancePauseOperationFunction;
+
+ @Autowired
+ private TaskInstanceForceStartOperationFunction taskInstanceForceStartOperationFunction;
+
+ @Autowired
+ private TaskInstanceWakeupOperationFunction taskInstanceWakeupOperationFunction;
+
+ public LogicITaskInstanceDispatchOperationFunction getLogicTaskInstanceDispatchOperationFunction() {
+ return logicITaskInstanceDispatchOperationFunction;
+ }
+
+ public LogicITaskInstanceKillOperationFunction getLogicTaskInstanceKillOperationFunction() {
+ return logicITaskInstanceKillOperationFunction;
+ }
+
+ public LogicITaskInstancePauseOperationFunction getLogicTaskInstancePauseOperationFunction() {
+ return logicITaskInstancePauseOperationFunction;
+ }
+
+ public TaskInstanceForceStartOperationFunction getTaskInstanceForceStartOperationFunction() {
+ return taskInstanceForceStartOperationFunction;
+ }
+
+ public TaskInstanceWakeupOperationFunction getTaskInstanceWakeupOperationFunction() {
+ return taskInstanceWakeupOperationFunction;
+ }
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicTaskInstanceOperatorImpl.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicTaskInstanceOperatorImpl.java
new file mode 100644
index 0000000000..c99968d1e9
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/LogicTaskInstanceOperatorImpl.java
@@ -0,0 +1,72 @@
+/*
+ * 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.rpc;
+
+import org.apache.dolphinscheduler.extract.master.ILogicTaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskDispatchRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskDispatchResponse;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskKillRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskKillResponse;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskPauseRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskPauseResponse;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceForceStartRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceForceStartResponse;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceWakeupRequest;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class LogicTaskInstanceOperatorImpl implements ILogicTaskInstanceOperator {
+
+ @Autowired
+ private LogicTaskInstanceOperationFunctionManager logicTaskInstanceOperationFunctionManager;
+
+ @Override
+ public LogicTaskDispatchResponse dispatchLogicTask(LogicTaskDispatchRequest taskDispatchRequest) {
+ return logicTaskInstanceOperationFunctionManager.getLogicTaskInstanceDispatchOperationFunction()
+ .operate(taskDispatchRequest);
+ }
+
+ @Override
+ public LogicTaskKillResponse killLogicTask(LogicTaskKillRequest taskKillRequest) {
+ return logicTaskInstanceOperationFunctionManager.getLogicTaskInstanceKillOperationFunction()
+ .operate(taskKillRequest);
+ }
+
+ @Override
+ public LogicTaskPauseResponse pauseLogicTask(LogicTaskPauseRequest taskPauseRequest) {
+ return logicTaskInstanceOperationFunctionManager.getLogicTaskInstancePauseOperationFunction()
+ .operate(taskPauseRequest);
+ }
+
+ @Override
+ public TaskInstanceForceStartResponse forceStartTaskInstance(TaskInstanceForceStartRequest taskForceStartRequest) {
+ return logicTaskInstanceOperationFunctionManager.getTaskInstanceForceStartOperationFunction()
+ .operate(taskForceStartRequest);
+ }
+
+ @Override
+ public void wakeupTaskInstance(TaskInstanceWakeupRequest taskWakeupRequest) {
+ logicTaskInstanceOperationFunctionManager.getTaskInstanceWakeupOperationFunction().operate(taskWakeupRequest);
+ }
+
+}
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/rpc/MasterCacheServiceImpl.java
similarity index 59%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/CacheProcessor.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterCacheServiceImpl.java
index ee49520a80..08448da811 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/rpc/MasterCacheServiceImpl.java
@@ -15,50 +15,28 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.server.master.processor;
+package org.apache.dolphinscheduler.server.master.rpc;
import org.apache.dolphinscheduler.common.enums.CacheType;
-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.cache.CacheExpireRequest;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
+import org.apache.dolphinscheduler.extract.master.IMasterCacheService;
+import org.apache.dolphinscheduler.extract.master.transportor.CacheExpireRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
-import io.netty.channel.Channel;
-
-/**
- * cache process from master/api
- */
-@Component
@Slf4j
-public class CacheProcessor implements MasterRpcProcessor {
+@Service
+public class MasterCacheServiceImpl implements IMasterCacheService {
@Autowired
private CacheManager cacheManager;
@Override
- public void process(Channel channel, Message message) {
- CacheExpireRequest cacheExpireRequest = JSONUtils.parseObject(message.getBody(), CacheExpireRequest.class);
-
- log.info("received command : {}", cacheExpireRequest);
-
- this.cacheExpire(cacheExpireRequest);
- }
-
- @Override
- public MessageType getCommandType() {
- return MessageType.CACHE_EXPIRE;
- }
-
- private void cacheExpire(CacheExpireRequest cacheExpireRequest) {
-
+ public void cacheExpire(CacheExpireRequest cacheExpireRequest) {
if (cacheExpireRequest.getCacheKey().isEmpty()) {
return;
}
@@ -70,4 +48,5 @@ public class CacheProcessor implements MasterRpcProcessor {
log.info("cache evict, type:{}, key:{}", cacheType.getCacheName(), cacheExpireRequest.getCacheKey());
}
}
+
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterLogServiceImpl.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterLogServiceImpl.java
new file mode 100644
index 0000000000..6d908d16ac
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterLogServiceImpl.java
@@ -0,0 +1,69 @@
+/*
+ * 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.rpc;
+
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.extract.master.IMasterLogService;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskInstanceLogPageQueryResponse;
+
+import java.io.File;
+import java.util.List;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class MasterLogServiceImpl implements IMasterLogService {
+
+ @Override
+ public LogicTaskInstanceLogFileDownloadResponse getLogicTaskInstanceWholeLogFileBytes(LogicTaskInstanceLogFileDownloadRequest logicTaskInstanceLogFileDownloadRequest) {
+ byte[] bytes =
+ LogUtils.getFileContentBytes(logicTaskInstanceLogFileDownloadRequest.getTaskInstanceLogAbsolutePath());
+ // todo: if file not exists, return error result
+ return new LogicTaskInstanceLogFileDownloadResponse(bytes);
+ }
+
+ @Override
+ public LogicTaskInstanceLogPageQueryResponse pageQueryLogicTaskInstanceLog(LogicTaskInstanceLogPageQueryRequest taskInstanceLogPageQueryRequest) {
+
+ List lines = LogUtils.readPartFileContent(
+ taskInstanceLogPageQueryRequest.getTaskInstanceLogAbsolutePath(),
+ taskInstanceLogPageQueryRequest.getSkipLineNum(),
+ taskInstanceLogPageQueryRequest.getLimit());
+
+ String logContent = LogUtils.rollViewLogLines(lines);
+ return new LogicTaskInstanceLogPageQueryResponse(logContent);
+ }
+
+ @Override
+ public void removeLogicTaskInstanceLog(String taskInstanceLogAbsolutePath) {
+ File taskLogFile = new File(taskInstanceLogAbsolutePath);
+ try {
+ if (taskLogFile.exists()) {
+ taskLogFile.delete();
+ }
+ } catch (Exception e) {
+ log.error("Remove LogicTaskInstanceLog error", e);
+ }
+ }
+}
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
deleted file mode 100644
index f5cadb7339..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRPCServer.java
+++ /dev/null
@@ -1,68 +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.server.master.rpc;
-
-import org.apache.dolphinscheduler.remote.NettyRemotingServer;
-import org.apache.dolphinscheduler.remote.config.NettyServerConfig;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
-import org.apache.dolphinscheduler.server.master.config.MasterConfig;
-
-import java.util.List;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * Master RPC Server, used to send/receive request to other system.
- */
-@Service
-@Slf4j
-public class MasterRPCServer implements AutoCloseable {
-
- private NettyRemotingServer nettyRemotingServer;
-
- @Autowired
- private MasterConfig masterConfig;
-
- @Autowired
- private List masterRpcProcessors;
-
- public void start() {
- log.info("Starting Master RPC Server...");
- // init remoting server
- NettyServerConfig serverConfig = masterConfig.getMasterRpcServerConfig();
- serverConfig.setListenPort(masterConfig.getListenPort());
- this.nettyRemotingServer = new NettyRemotingServer(serverConfig);
- for (MasterRpcProcessor masterRpcProcessor : masterRpcProcessors) {
- this.nettyRemotingServer.registerProcessor(masterRpcProcessor);
- log.info("Success register netty processor: {}", masterRpcProcessor.getClass().getName());
- }
- this.nettyRemotingServer.start();
- log.info("Started Master RPC Server...");
- }
-
- @Override
- public void close() {
- log.info("Closing Master RPC Server...");
- this.nettyRemotingServer.close();
- log.info("Closed 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
deleted file mode 100644
index 15d976cbee..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRpcClient.java
+++ /dev/null
@@ -1,63 +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.server.master.rpc;
-
-import org.apache.dolphinscheduler.remote.NettyRemotingClient;
-import org.apache.dolphinscheduler.remote.command.Message;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.server.master.config.MasterConfig;
-
-import lombok.NonNull;
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Slf4j
-@Component
-public class MasterRpcClient implements AutoCloseable {
-
- @Autowired
- private MasterConfig masterConfig;
-
- private static final long DEFAULT_TIME_OUT_MILLS = 10_000L;
- private NettyRemotingClient client;
-
- public void start() {
- client = new NettyRemotingClient(masterConfig.getMasterRpcClientConfig());
- log.info("Success initialized MasterRPCClient...");
- }
-
- public Message sendSyncCommand(@NonNull Host host,
- @NonNull Message rpcMessage) throws RemotingException, InterruptedException {
- return client.sendSync(host, rpcMessage, DEFAULT_TIME_OUT_MILLS);
- }
-
- public void send(@NonNull Host host, @NonNull Message message) throws RemotingException {
- client.send(host, message);
- }
-
- @Override
- public void close() {
- if (client != null) {
- client.close();
- }
- }
-
-}
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
new file mode 100644
index 0000000000..91a7448b7c
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterRpcServer.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.server.master.rpc;
+
+import org.apache.dolphinscheduler.extract.base.NettyRemotingServerFactory;
+import org.apache.dolphinscheduler.extract.base.config.NettyServerConfig;
+import org.apache.dolphinscheduler.extract.base.server.SpringServerMethodInvokerDiscovery;
+import org.apache.dolphinscheduler.server.master.config.MasterConfig;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class MasterRpcServer extends SpringServerMethodInvokerDiscovery implements AutoCloseable {
+
+ public MasterRpcServer(MasterConfig masterConfig) {
+ super(NettyRemotingServerFactory.buildNettyRemotingServer(new NettyServerConfig(masterConfig.getListenPort())));
+ }
+
+ public void start() {
+ log.info("Starting MasterRPCServer...");
+ nettyRemotingServer.start();
+ log.info("Started MasterRPCServer...");
+ }
+
+ @Override
+ public void close() {
+ log.info("Closing MasterRPCServer...");
+ nettyRemotingServer.close();
+ log.info("Closed MasterRPCServer...");
+ }
+
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/StreamingTaskOperatorImpl.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/StreamingTaskOperatorImpl.java
new file mode 100644
index 0000000000..705b0554c7
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/StreamingTaskOperatorImpl.java
@@ -0,0 +1,58 @@
+/*
+ * 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.rpc;
+
+import org.apache.dolphinscheduler.dao.entity.TaskDefinition;
+import org.apache.dolphinscheduler.dao.repository.TaskDefinitionDao;
+import org.apache.dolphinscheduler.extract.master.IStreamingTaskOperator;
+import org.apache.dolphinscheduler.extract.master.transportor.StreamingTaskTriggerRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.StreamingTaskTriggerResponse;
+import org.apache.dolphinscheduler.server.master.runner.StreamTaskExecuteRunnable;
+import org.apache.dolphinscheduler.server.master.runner.StreamTaskExecuteThreadPool;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class StreamingTaskOperatorImpl implements IStreamingTaskOperator {
+
+ @Autowired
+ private StreamTaskExecuteThreadPool streamTaskExecuteThreadPool;
+
+ @Autowired
+ private TaskDefinitionDao taskDefinitionDao;
+
+ @Override
+ public StreamingTaskTriggerResponse triggerStreamingTask(StreamingTaskTriggerRequest streamingTaskTriggerRequest) {
+ log.info("Receive triggerStreamingTask request: {}", streamingTaskTriggerRequest);
+
+ TaskDefinition taskDefinition =
+ taskDefinitionDao.findTaskDefinition(streamingTaskTriggerRequest.getTaskDefinitionCode(),
+ streamingTaskTriggerRequest.getTaskDefinitionVersion());
+ if (taskDefinition == null) {
+ log.error("Cannot find the Streaming TaskDefinition: {}", streamingTaskTriggerRequest);
+ return StreamingTaskTriggerResponse.fail("Cannot find the Streaming TaskDefinition");
+ }
+ streamTaskExecuteThreadPool.execute(new StreamTaskExecuteRunnable(taskDefinition, streamingTaskTriggerRequest));
+ return StreamingTaskTriggerResponse.success();
+ }
+
+}
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/rpc/TaskInstanceForceStartOperationFunction.java
similarity index 54%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskForceStartProcessor.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/TaskInstanceForceStartOperationFunction.java
index 5a1dfb93a6..a15766e4c4 100644
--- 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/rpc/TaskInstanceForceStartOperationFunction.java
@@ -15,15 +15,12 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.server.master.processor;
+package org.apache.dolphinscheduler.server.master.rpc;
import org.apache.dolphinscheduler.common.enums.StateEventType;
-import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceForceStartRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceForceStartResponse;
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.MasterRpcProcessor;
import org.apache.dolphinscheduler.server.master.event.TaskStateEvent;
import org.apache.dolphinscheduler.server.master.processor.queue.StateEventResponseService;
@@ -32,35 +29,30 @@ 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 MasterRpcProcessor {
+@Component
+public class TaskInstanceForceStartOperationFunction
+ implements
+ ITaskInstanceOperationFunction {
@Autowired
private StateEventResponseService stateEventResponseService;
@Override
- public void process(Channel channel, Message message) {
- TaskForceStartRequest taskEventChangeCommand =
- JSONUtils.parseObject(message.getBody(), TaskForceStartRequest.class);
+ public TaskInstanceForceStartResponse operate(TaskInstanceForceStartRequest taskInstanceForceStartRequest) {
TaskStateEvent stateEvent = TaskStateEvent.builder()
- .processInstanceId(taskEventChangeCommand.getProcessInstanceId())
- .taskInstanceId(taskEventChangeCommand.getTaskInstanceId())
- .key(taskEventChangeCommand.getKey())
+ .processInstanceId(taskInstanceForceStartRequest.getProcessInstanceId())
+ .taskInstanceId(taskInstanceForceStartRequest.getTaskInstanceId())
+ .key(taskInstanceForceStartRequest.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);
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(stateEvent.getProcessInstanceId(), stateEvent.getTaskInstanceId());
+ log.info("Received forceStartTaskInstance, event: {}", stateEvent);
stateEventResponseService.addEvent2WorkflowExecute(stateEvent);
+ return TaskInstanceForceStartResponse.success();
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
-
- @Override
- public MessageType getCommandType() {
- return MessageType.TASK_FORCE_STATE_EVENT_REQUEST;
- }
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/TaskInstanceListenerImpl.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/TaskInstanceListenerImpl.java
new file mode 100644
index 0000000000..e5e67abc49
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/TaskInstanceListenerImpl.java
@@ -0,0 +1,64 @@
+/*
+ * 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.rpc;
+
+import org.apache.dolphinscheduler.extract.master.ITaskInstanceExecutionEventListener;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceExecutionFinishEvent;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceExecutionInfoEvent;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceExecutionRunningEvent;
+import org.apache.dolphinscheduler.extract.master.transportor.WorkflowInstanceStateChangeEvent;
+import org.apache.dolphinscheduler.server.master.runner.listener.TaskInstanceExecutionEventListenerFunctionManager;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class TaskInstanceListenerImpl implements ITaskInstanceExecutionEventListener {
+
+ @Autowired
+ private TaskInstanceExecutionEventListenerFunctionManager taskInstanceExecutionEventListenerManager;
+
+ @Override
+ public void onTaskInstanceExecutionRunning(TaskInstanceExecutionRunningEvent taskInstanceExecutionRunningEvent) {
+ taskInstanceExecutionEventListenerManager
+ .getTaskInstanceExecutionRunningEventListenFunction()
+ .handleTaskInstanceExecutionEvent(taskInstanceExecutionRunningEvent);
+
+ }
+
+ @Override
+ public void onTaskInstanceExecutionFinish(TaskInstanceExecutionFinishEvent taskInstanceExecutionFinishEvent) {
+ taskInstanceExecutionEventListenerManager.getTaskInstanceExecutionResultEventListenFunction()
+ .handleTaskInstanceExecutionEvent(taskInstanceExecutionFinishEvent);
+ }
+
+ @Override
+ public void onTaskInstanceExecutionInfoUpdate(TaskInstanceExecutionInfoEvent taskInstanceExecutionInfoEvent) {
+ taskInstanceExecutionEventListenerManager.getTaskInstanceExecutionInfoEventListenFunction()
+ .handleTaskInstanceExecutionEvent(taskInstanceExecutionInfoEvent);
+ }
+
+ @Override
+ public void onWorkflowInstanceInstanceStateChange(WorkflowInstanceStateChangeEvent taskInstanceStateChangeEvent) {
+ taskInstanceExecutionEventListenerManager.getTaskInstanceStateEventListenFunction()
+ .handleTaskInstanceExecutionEvent(taskInstanceStateChangeEvent);
+ }
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskWakeupProcessor.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/TaskInstanceWakeupOperationFunction.java
similarity index 53%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskWakeupProcessor.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/TaskInstanceWakeupOperationFunction.java
index d7cf7b5a8f..9a5b716e90 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskWakeupProcessor.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/TaskInstanceWakeupOperationFunction.java
@@ -15,15 +15,12 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.server.master.processor;
+package org.apache.dolphinscheduler.server.master.rpc;
import org.apache.dolphinscheduler.common.enums.StateEventType;
-import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceWakeupRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceWakeupResponse;
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.TaskWakeupRequest;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
import org.apache.dolphinscheduler.server.master.event.TaskStateEvent;
import org.apache.dolphinscheduler.server.master.processor.queue.StateEventResponseService;
@@ -32,39 +29,30 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import io.netty.channel.Channel;
-
-/**
- * handle state event received from master/api
- */
-@Component
@Slf4j
-public class TaskWakeupProcessor implements MasterRpcProcessor {
+@Component
+public class TaskInstanceWakeupOperationFunction
+ implements
+ ITaskInstanceOperationFunction {
@Autowired
private StateEventResponseService stateEventResponseService;
@Override
- public void process(Channel channel, Message message) {
- TaskWakeupRequest taskEventChangeCommand =
- JSONUtils.parseObject(message.getBody(), TaskWakeupRequest.class);
+ public TaskInstanceWakeupResponse operate(TaskInstanceWakeupRequest taskInstanceWakeupRequest) {
TaskStateEvent stateEvent = TaskStateEvent.builder()
- .processInstanceId(taskEventChangeCommand.getProcessInstanceId())
- .taskInstanceId(taskEventChangeCommand.getTaskInstanceId())
- .key(taskEventChangeCommand.getKey())
+ .processInstanceId(taskInstanceWakeupRequest.getProcessInstanceId())
+ .taskInstanceId(taskInstanceWakeupRequest.getTaskInstanceId())
+ .key(taskInstanceWakeupRequest.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);
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(stateEvent.getProcessInstanceId(), stateEvent.getTaskInstanceId());
+ log.info("Received wakeupTaskInstance request, event: {}", stateEvent);
stateEventResponseService.addEvent2WorkflowExecute(stateEvent);
+ return TaskInstanceWakeupResponse.success();
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
-
- @Override
- public MessageType getCommandType() {
- return MessageType.TASK_WAKEUP_EVENT_REQUEST;
- }
-
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/WorkflowInstanceServiceImpl.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/WorkflowInstanceServiceImpl.java
new file mode 100644
index 0000000000..c3420cb1da
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/WorkflowInstanceServiceImpl.java
@@ -0,0 +1,52 @@
+/*
+ * 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.rpc;
+
+import org.apache.dolphinscheduler.extract.master.IWorkflowInstanceService;
+import org.apache.dolphinscheduler.extract.master.dto.WorkflowExecuteDto;
+import org.apache.dolphinscheduler.server.master.metrics.ProcessInstanceMetrics;
+import org.apache.dolphinscheduler.server.master.service.ExecutingService;
+
+import java.util.Optional;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class WorkflowInstanceServiceImpl implements IWorkflowInstanceService {
+
+ @Autowired
+ private ExecutingService executingService;
+
+ @Override
+ public void clearWorkflowMetrics(Long workflowDefinitionCode) {
+ log.info("Receive clearWorkflowMetrics request: {}", workflowDefinitionCode);
+ ProcessInstanceMetrics.cleanUpProcessInstanceCountMetricsByDefinitionCode(workflowDefinitionCode);
+ }
+
+ @Override
+ public WorkflowExecuteDto getWorkflowExecutingData(Integer workflowInstanceId) {
+ log.info("Receive getWorkflowExecutingData request: {}", workflowInstanceId);
+ Optional workflowExecuteDtoOptional =
+ executingService.queryWorkflowExecutingData(workflowInstanceId);
+ return workflowExecuteDtoOptional.orElse(null);
+ }
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/BaseTaskDispatcher.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/BaseTaskDispatcher.java
index 9878391ea5..0ad515e93a 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/BaseTaskDispatcher.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/BaseTaskDispatcher.java
@@ -21,20 +21,14 @@ import static com.google.common.base.Preconditions.checkNotNull;
import org.apache.dolphinscheduler.common.enums.TaskEventType;
import org.apache.dolphinscheduler.common.utils.DateUtils;
-import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
-import org.apache.dolphinscheduler.remote.command.Message;
-import org.apache.dolphinscheduler.remote.command.task.TaskDispatchRequest;
-import org.apache.dolphinscheduler.remote.command.task.TaskDispatchResponse;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.utils.Host;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.dispatch.exceptions.WorkerGroupNotFoundException;
import org.apache.dolphinscheduler.server.master.exception.TaskDispatchException;
import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent;
import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.dispatcher.TaskDispatcher;
import org.apache.dolphinscheduler.server.master.runner.execute.TaskExecuteRunnable;
@@ -48,14 +42,11 @@ public abstract class BaseTaskDispatcher implements TaskDispatcher {
protected final TaskEventService taskEventService;
protected final MasterConfig masterConfig;
- protected final MasterRpcClient masterRpcClient;
protected BaseTaskDispatcher(TaskEventService taskEventService,
- MasterConfig masterConfig,
- MasterRpcClient masterRpcClient) {
+ MasterConfig masterConfig) {
this.taskEventService = checkNotNull(taskEventService);
this.masterConfig = checkNotNull(masterConfig);
- this.masterRpcClient = checkNotNull(masterRpcClient);
}
@Override
@@ -78,30 +69,9 @@ public abstract class BaseTaskDispatcher implements TaskDispatcher {
addDispatchEvent(taskExecuteRunnable);
}
- protected abstract Optional getTaskInstanceDispatchHost(TaskExecuteRunnable taskExecutionContext) throws TaskDispatchException, WorkerGroupNotFoundException;
+ protected abstract void doDispatch(TaskExecuteRunnable taskExecuteRunnable) throws TaskDispatchException;
- protected void doDispatch(TaskExecuteRunnable taskExecuteRunnable) throws TaskDispatchException {
- TaskExecutionContext taskExecutionContext = taskExecuteRunnable.getTaskExecutionContext();
- TaskDispatchRequest taskDispatchRequest = new TaskDispatchRequest(taskExecutionContext);
- try {
- Message message = masterRpcClient.sendSyncCommand(Host.of(taskExecutionContext.getHost()),
- taskDispatchRequest.convert2Command());
- TaskDispatchResponse taskDispatchResponse =
- JSONUtils.parseObject(message.getBody(), TaskDispatchResponse.class);
- if (!taskDispatchResponse.isDispatchSuccess()) {
- throw new TaskDispatchException(String.format("Dispatch task to %s failed, response is: %s",
- taskExecutionContext.getHost(), taskDispatchResponse));
- }
- } catch (InterruptedException e) {
- // This exception should only happen when we close the server.
- Thread.currentThread().interrupt();
- throw new TaskDispatchException(String.format("Dispatch task to %s failed, get response failed",
- taskExecutionContext.getHost()), e);
- } catch (RemotingException e) {
- throw new TaskDispatchException(String.format("Dispatch task to %s failed",
- taskExecutionContext.getHost()), e);
- }
- }
+ protected abstract Optional getTaskInstanceDispatchHost(TaskExecuteRunnable taskExecutionContext) throws TaskDispatchException, WorkerGroupNotFoundException;
protected void addDispatchEvent(TaskExecuteRunnable taskExecuteRunnable) {
TaskExecutionContext taskExecutionContext = taskExecuteRunnable.getTaskExecutionContext();
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/StateWheelExecuteThread.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/StateWheelExecuteThread.java
index 6ca37a3fe8..38086a8b46 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/StateWheelExecuteThread.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/StateWheelExecuteThread.java
@@ -130,9 +130,8 @@ public class StateWheelExecuteThread extends BaseDaemonThread {
return;
}
for (Integer processInstanceId : processInstanceTimeoutCheckList) {
- try (
- LogUtils.MDCAutoClosableContext mdcAutoClosableContext =
- LogUtils.setWorkflowInstanceIdMDC(processInstanceId)) {
+ try {
+ LogUtils.setWorkflowInstanceIdMDC(processInstanceId);
WorkflowExecuteRunnable workflowExecuteThread = processInstanceExecCacheManager.getByProcessInstanceId(
processInstanceId);
if (workflowExecuteThread == null) {
@@ -158,6 +157,8 @@ public class StateWheelExecuteThread extends BaseDaemonThread {
}
} catch (Exception ex) {
log.error("Check workflow instance timeout error");
+ } finally {
+ LogUtils.removeWorkflowInstanceIdMDC();
}
}
}
@@ -220,9 +221,8 @@ public class StateWheelExecuteThread extends BaseDaemonThread {
return;
}
for (TaskInstanceKey taskInstanceKey : taskInstanceTimeoutCheckList) {
- try (
- LogUtils.MDCAutoClosableContext mdcAutoClosableContext =
- LogUtils.setWorkflowInstanceIdMDC(taskInstanceKey.getProcessInstanceId())) {
+ try {
+ LogUtils.setWorkflowInstanceIdMDC(taskInstanceKey.getProcessInstanceId());
int processInstanceId = taskInstanceKey.getProcessInstanceId();
long taskCode = taskInstanceKey.getTaskCode();
@@ -257,6 +257,8 @@ public class StateWheelExecuteThread extends BaseDaemonThread {
}
} catch (Exception ex) {
log.error("Check task timeout error, taskInstanceKey: {}", taskInstanceKey, ex);
+ } finally {
+ LogUtils.removeWorkflowInstanceIdMDC();
}
}
}
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 40ef9e5df6..a4b4f083d9 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
@@ -22,6 +22,7 @@ import static org.apache.dolphinscheduler.common.constants.Constants.DEFAULT_WOR
import org.apache.dolphinscheduler.common.constants.Constants;
import org.apache.dolphinscheduler.common.enums.Flag;
import org.apache.dolphinscheduler.common.enums.Priority;
+import org.apache.dolphinscheduler.common.enums.TaskEventType;
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
import org.apache.dolphinscheduler.dao.entity.Environment;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
@@ -31,6 +32,12 @@ import org.apache.dolphinscheduler.dao.entity.TaskDefinition;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
import org.apache.dolphinscheduler.dao.mapper.ProcessTaskRelationMapper;
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.transportor.StreamingTaskTriggerRequest;
+import org.apache.dolphinscheduler.extract.worker.ITaskInstanceExecutionEventAckListener;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceExecutionFinishEventAck;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceExecutionInfoEventAck;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceExecutionRunningEventAck;
import org.apache.dolphinscheduler.plugin.task.api.TaskChannel;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
@@ -42,8 +49,6 @@ 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.utils.LogUtils;
import org.apache.dolphinscheduler.plugin.task.api.utils.ParameterUtils;
-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 +108,7 @@ public class StreamTaskExecuteRunnable implements Runnable {
protected ProcessDefinition processDefinition;
- protected TaskExecuteStartMessage taskExecuteStartMessage;
+ protected StreamingTaskTriggerRequest taskExecuteStartMessage;
protected TaskExecutionContextFactory taskExecutionContextFactory;
@@ -114,7 +119,8 @@ public class StreamTaskExecuteRunnable implements Runnable {
private TaskRunnableStatus taskRunnableStatus = TaskRunnableStatus.CREATED;
- public StreamTaskExecuteRunnable(TaskDefinition taskDefinition, TaskExecuteStartMessage taskExecuteStartMessage) {
+ public StreamTaskExecuteRunnable(TaskDefinition taskDefinition,
+ StreamingTaskTriggerRequest taskExecuteStartMessage) {
this.processService = SpringApplicationContext.getBean(ProcessService.class);
this.masterConfig = SpringApplicationContext.getBean(MasterConfig.class);
this.workerTaskDispatcher = SpringApplicationContext.getBean(WorkerTaskDispatcher.class);
@@ -466,14 +472,27 @@ 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
- TaskExecuteRunningMessageAck taskExecuteRunningMessageAck =
- new TaskExecuteRunningMessageAck(
- true,
- taskEvent.getTaskInstanceId(),
- masterConfig.getMasterAddress(),
- taskEvent.getWorkerAddress(),
- System.currentTimeMillis());
- taskEvent.getChannel().writeAndFlush(taskExecuteRunningMessageAck.convert2Command());
+ ITaskInstanceExecutionEventAckListener instanceExecutionEventAckListener =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskEvent.getWorkerAddress(), ITaskInstanceExecutionEventAckListener.class);
+ if (taskEvent.getEvent() == TaskEventType.RUNNING) {
+ log.error("taskEvent.getChannel() is null, taskEvent:{}", taskEvent);
+ instanceExecutionEventAckListener.handleTaskInstanceExecutionRunningEventAck(
+ TaskInstanceExecutionRunningEventAck.success(taskEvent.getTaskInstanceId()));
+ return;
+ }
+ if (taskEvent.getEvent() == TaskEventType.RESULT) {
+ instanceExecutionEventAckListener.handleTaskInstanceExecutionFinishEventAck(
+ TaskInstanceExecutionFinishEventAck.success(taskEvent.getTaskInstanceId()));
+ return;
+ }
+
+ if (taskEvent.getEvent() == TaskEventType.UPDATE_PID) {
+ instanceExecutionEventAckListener.handleTaskInstanceExecutionInfoEventAck(
+ TaskInstanceExecutionInfoEventAck.success(taskEvent.getTaskInstanceId()));
+ return;
+ }
+ log.warn("SendAckToWorker error, get an unknown event: {}", taskEvent);
}
private enum TaskRunnableStatus {
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowEventLooper.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowEventLooper.java
index af9eafbec3..b409327742 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowEventLooper.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowEventLooper.java
@@ -86,9 +86,8 @@ public class WorkflowEventLooper extends BaseDaemonThread implements AutoCloseab
Thread.currentThread().interrupt();
break;
}
- try (
- LogUtils.MDCAutoClosableContext mdcAutoClosableContext =
- LogUtils.setWorkflowInstanceIdMDC(workflowEvent.getWorkflowInstanceId())) {
+ try {
+ LogUtils.setWorkflowInstanceIdMDC(workflowEvent.getWorkflowInstanceId());
log.info("Begin to handle WorkflowEvent: {}", workflowEvent);
WorkflowEventHandler workflowEventHandler =
workflowEventHandlerMap.get(workflowEvent.getWorkflowEventType());
@@ -108,6 +107,8 @@ public class WorkflowEventLooper extends BaseDaemonThread implements AutoCloseab
unknownException);
workflowEventQueue.addEvent(workflowEvent);
ThreadUtils.sleep(Constants.SLEEP_TIME_MILLIS);
+ } finally {
+ LogUtils.removeWorkflowInstanceIdMDC();
}
}
}
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 e8e2a6a233..b3fc7c4960 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
@@ -57,18 +57,17 @@ import org.apache.dolphinscheduler.dao.entity.TaskInstance;
import org.apache.dolphinscheduler.dao.repository.ProcessInstanceDao;
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
import org.apache.dolphinscheduler.dao.utils.TaskCacheUtils;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ILogicTaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceWakeupRequest;
+import org.apache.dolphinscheduler.extract.worker.transportor.UpdateWorkflowHostRequest;
+import org.apache.dolphinscheduler.extract.worker.transportor.UpdateWorkflowHostResponse;
import org.apache.dolphinscheduler.plugin.task.api.enums.DependResult;
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.parameters.SwitchParameters;
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;
-import org.apache.dolphinscheduler.remote.utils.Host;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.event.StateEvent;
import org.apache.dolphinscheduler.server.master.event.StateEventHandleError;
@@ -78,10 +77,8 @@ import org.apache.dolphinscheduler.server.master.event.StateEventHandler;
import org.apache.dolphinscheduler.server.master.event.StateEventHandlerManager;
import org.apache.dolphinscheduler.server.master.event.TaskStateEvent;
import org.apache.dolphinscheduler.server.master.event.WorkflowStateEvent;
-import org.apache.dolphinscheduler.server.master.exception.TaskExecuteRunnableCreateException;
import org.apache.dolphinscheduler.server.master.graph.IWorkflowGraph;
import org.apache.dolphinscheduler.server.master.metrics.TaskMetrics;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnable;
import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnableFactory;
import org.apache.dolphinscheduler.server.master.utils.TaskUtils;
@@ -143,8 +140,6 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
private final ProcessAlertManager processAlertManager;
- private final MasterRpcClient masterRpcClient;
-
private final IWorkflowExecuteContext workflowExecuteContext;
private WorkflowRunnableStatus workflowRunnableStatus = WorkflowRunnableStatus.CREATED;
@@ -232,7 +227,6 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
@NonNull CommandService commandService,
@NonNull ProcessService processService,
@NonNull ProcessInstanceDao processInstanceDao,
- @NonNull MasterRpcClient masterRpcClient,
@NonNull ProcessAlertManager processAlertManager,
@NonNull MasterConfig masterConfig,
@NonNull StateWheelExecuteThread stateWheelExecuteThread,
@@ -243,7 +237,6 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
this.commandService = commandService;
this.processInstanceDao = processInstanceDao;
this.workflowExecuteContext = workflowExecuteContext;
- this.masterRpcClient = masterRpcClient;
this.masterConfig = masterConfig;
this.processAlertManager = processAlertManager;
this.stateWheelExecuteThread = stateWheelExecuteThread;
@@ -449,7 +442,7 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
* release task group
*
*/
- public void releaseTaskGroup(TaskInstance taskInstance) throws RemotingException, InterruptedException {
+ public void releaseTaskGroup(TaskInstance taskInstance) throws InterruptedException {
ProcessInstance workflowInstance = workflowExecuteContext.getWorkflowInstance();
// todo: use Integer
if (taskInstance.getTaskGroupId() <= 0) {
@@ -473,9 +466,10 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
} else {
ProcessInstance processInstance =
processService.findProcessInstanceById(nextTaskInstance.getProcessInstanceId());
- masterRpcClient.sendSyncCommand(
- Host.of(processInstance.getHost()),
- new TaskWakeupRequest(processInstance.getId(), nextTaskInstance.getId()).convert2Command());
+ ILogicTaskInstanceOperator taskInstanceOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(processInstance.getHost(), ILogicTaskInstanceOperator.class);
+ taskInstanceOperator.wakeupTaskInstance(
+ new TaskInstanceWakeupRequest(processInstance.getId(), nextTaskInstance.getId()));
}
log.info("Success send wakeup message to next taskInstance: {}", nextTaskInstance.getId());
}
@@ -829,9 +823,8 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
taskInstanceDao.queryValidTaskListByWorkflowInstanceId(workflowInstance.getId(),
workflowInstance.getTestFlag());
for (TaskInstance task : validTaskInstanceList) {
- try (
- final LogUtils.MDCAutoClosableContext mdcAutoClosableContext =
- LogUtils.setWorkflowAndTaskInstanceIDMDC(task.getProcessInstanceId(), task.getId());) {
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(task.getProcessInstanceId(), task.getId());
log.info(
"Check the taskInstance from a exist workflowInstance, existTaskInstanceCode: {}, taskInstanceStatus: {}",
task.getTaskCode(),
@@ -881,6 +874,8 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
if (task.getState().isFailure()) {
errorTaskMap.put(task.getTaskCode(), task.getId());
}
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
clearDataIfExecuteTask();
@@ -947,9 +942,8 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
}
// 2. create task execute runnable
// in a dag, only one taskInstance is valid per taskCode, so need to set the old taskInstance invalid
- try (
- LogUtils.MDCAutoClosableContext mdcAutoClosableContext =
- LogUtils.setTaskInstanceIdMDC(taskInstance.getId())) {
+ try {
+ LogUtils.setTaskInstanceIdMDC(taskInstance.getId());
DefaultTaskExecuteRunnable taskExecuteRunnable =
defaultTaskExecuteRunnableFactory.createTaskExecuteRunnable(taskInstance);
if (validTaskMap.containsKey(taskInstance.getTaskCode())) {
@@ -992,6 +986,8 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
stateWheelExecuteThread.addTask4TimeoutCheck(workflowInstance, taskInstance);
return true;
+ } finally {
+ LogUtils.removeTaskInstanceIdMDC();
}
} catch (Exception e) {
log.error("Submit standby task {} error", taskInstance.getName(), e);
@@ -1389,21 +1385,15 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
return false;
}
try {
- Message message =
- masterRpcClient.sendSyncCommand(Host.of(taskInstance.getHost()),
- new WorkflowHostChangeRequest(taskInstance.getId(), masterConfig.getMasterAddress())
- .convert2Command());
- if (message == null) {
+ org.apache.dolphinscheduler.extract.worker.ITaskInstanceOperator iTaskInstanceOperator =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(),
+ org.apache.dolphinscheduler.extract.worker.ITaskInstanceOperator.class);
+ UpdateWorkflowHostResponse updateWorkflowHostResponse = iTaskInstanceOperator.updateWorkflowInstanceHost(
+ new UpdateWorkflowHostRequest(taskInstance.getId(), masterConfig.getMasterAddress()));
+ if (!updateWorkflowHostResponse.isSuccess()) {
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(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",
+ "Takeover TaskInstance failed, receive a failed response from worker: {}, will try to create a new TaskInstance",
taskInstance.getHost());
return false;
}
@@ -1417,9 +1407,9 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
stateWheelExecuteThread.addTask4TimeoutCheck(workflowInstance, taskInstance);
stateWheelExecuteThread.addTask4RetryCheck(workflowInstance, taskInstance);
return true;
- } catch (RemotingException | InterruptedException | TaskExecuteRunnableCreateException e) {
+ } catch (Exception e) {
log.error(
- "Takeover task instance failed, the worker {} might not be alive, will try to create a new task instance",
+ "Takeover TaskInstance failed, the worker {} might not be alive, will try to create a new TaskInstance",
taskInstance.getHost(), e);
return false;
}
@@ -1872,9 +1862,8 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
if (taskInstanceId == null || taskInstanceId.equals(0)) {
continue;
}
- try (
- final LogUtils.MDCAutoClosableContext mdcAutoClosableContext =
- LogUtils.setWorkflowAndTaskInstanceIDMDC(workflowInstance.getId(), taskInstanceId)) {
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(workflowInstance.getId(), taskInstanceId);
TaskInstance taskInstance = taskInstanceDao.queryById(taskInstanceId);
if (taskInstance == null || taskInstance.getState().isFinished()) {
continue;
@@ -1890,6 +1879,8 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
.build();
this.addStateEvent(taskStateEvent);
}
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnableFactory.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnableFactory.java
index 0d04f2d92a..ed4fb8855b 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnableFactory.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnableFactory.java
@@ -22,7 +22,6 @@ import org.apache.dolphinscheduler.dao.repository.ProcessInstanceDao;
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.exception.WorkflowCreateException;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnableFactory;
import org.apache.dolphinscheduler.service.alert.ProcessAlertManager;
import org.apache.dolphinscheduler.service.command.CommandService;
@@ -49,9 +48,6 @@ public class WorkflowExecuteRunnableFactory {
@Autowired
private ProcessInstanceDao processInstanceDao;
- @Autowired
- private MasterRpcClient masterRpcClient;
-
@Autowired
private ProcessAlertManager processAlertManager;
@@ -82,7 +78,6 @@ public class WorkflowExecuteRunnableFactory {
commandService,
processService,
processInstanceDao,
- masterRpcClient,
processAlertManager,
masterConfig,
stateWheelExecuteThread,
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 7911c338e0..8fe1a9a683 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
@@ -22,11 +22,11 @@ import org.apache.dolphinscheduler.common.enums.StateEventType;
import org.apache.dolphinscheduler.common.utils.NetUtils;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ITaskInstanceExecutionEventListener;
+import org.apache.dolphinscheduler.extract.master.transportor.WorkflowInstanceStateChangeEvent;
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils;
-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;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.event.StateEvent;
@@ -67,9 +67,6 @@ public class WorkflowExecuteThreadPool extends ThreadPoolTaskExecutor {
@Autowired
private ProcessInstanceExecCacheManager processInstanceExecCacheManager;
- @Autowired
- private StateEventCallbackService stateEventCallbackService;
-
@Autowired
private StateWheelExecuteThread stateWheelExecuteThread;
@@ -171,9 +168,8 @@ public class WorkflowExecuteThreadPool extends ThreadPoolTaskExecutor {
TaskInstance taskInstance = entry.getValue();
crossWorkflowParameterPassing(finishProcessInstance, taskInstance);
String address = NetUtils.getAddr(masterConfig.getListenPort());
- try (
- final LogUtils.MDCAutoClosableContext mdcAutoClosableContext =
- LogUtils.setWorkflowAndTaskInstanceIDMDC(processInstance.getId(), taskInstance.getId())) {
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(processInstance.getId(), taskInstance.getId());
if (processInstance.getHost().equalsIgnoreCase(address)) {
log.info("Process host is local master, will notify it");
this.notifyMyself(processInstance, taskInstance);
@@ -181,6 +177,8 @@ public class WorkflowExecuteThreadPool extends ThreadPoolTaskExecutor {
log.info("Process host is remote master, will notify it");
this.notifyProcess(finishProcessInstance, processInstance, taskInstance);
}
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
}
@@ -227,10 +225,13 @@ public class WorkflowExecuteThreadPool extends ThreadPoolTaskExecutor {
taskInstance.getName(), taskInstance.getId());
return;
}
- WorkflowStateEventChangeRequest workflowStateEventChangeRequest = new WorkflowStateEventChangeRequest(
+ ITaskInstanceExecutionEventListener iTaskInstanceExecutionEventListener =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(processInstanceHost, ITaskInstanceExecutionEventListener.class);
+
+ WorkflowInstanceStateChangeEvent workflowInstanceStateChangeEvent = new WorkflowInstanceStateChangeEvent(
finishProcessInstance.getId(), 0, finishProcessInstance.getState(), processInstance.getId(),
taskInstance.getId());
- Host host = new Host(processInstanceHost);
- stateEventCallbackService.sendResult(host, workflowStateEventChangeRequest.convert2Command());
+ iTaskInstanceExecutionEventListener.onWorkflowInstanceInstanceStateChange(workflowInstanceStateChangeEvent);
}
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/MasterTaskDispatcher.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/MasterTaskDispatcher.java
index f4fb3a908d..4a4ca42c58 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/MasterTaskDispatcher.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/MasterTaskDispatcher.java
@@ -17,10 +17,15 @@
package org.apache.dolphinscheduler.server.master.runner.dispatcher;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
+import org.apache.dolphinscheduler.extract.master.ILogicTaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskDispatchRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskDispatchResponse;
+import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
+import org.apache.dolphinscheduler.server.master.exception.TaskDispatchException;
import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.BaseTaskDispatcher;
import org.apache.dolphinscheduler.server.master.runner.execute.TaskExecuteRunnable;
@@ -37,12 +42,31 @@ public class MasterTaskDispatcher extends BaseTaskDispatcher {
private final Optional masterTaskExecuteHost;
public MasterTaskDispatcher(TaskEventService taskEventService,
- MasterConfig masterConfig,
- MasterRpcClient masterRpcClient) {
- super(taskEventService, masterConfig, masterRpcClient);
+ MasterConfig masterConfig) {
+ super(taskEventService, masterConfig);
masterTaskExecuteHost = Optional.of(Host.of(masterConfig.getMasterAddress()));
}
+ @Override
+ protected void doDispatch(TaskExecuteRunnable taskExecuteRunnable) throws TaskDispatchException {
+ TaskExecutionContext taskExecutionContext = taskExecuteRunnable.getTaskExecutionContext();
+ try {
+ ILogicTaskInstanceOperator taskInstanceOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskExecutionContext.getHost(), ILogicTaskInstanceOperator.class);
+ LogicTaskDispatchResponse logicTaskDispatchResponse = taskInstanceOperator
+ .dispatchLogicTask(new LogicTaskDispatchRequest(taskExecuteRunnable.getTaskExecutionContext()));
+ if (!logicTaskDispatchResponse.isDispatchSuccess()) {
+ throw new TaskDispatchException(String.format("Dispatch LogicTask to %s failed, response is: %s",
+ taskExecutionContext.getHost(), logicTaskDispatchResponse));
+ }
+ } catch (TaskDispatchException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new TaskDispatchException(String.format("Dispatch task to %s failed",
+ taskExecutionContext.getHost()), e);
+ }
+ }
+
@Override
protected Optional getTaskInstanceDispatchHost(TaskExecuteRunnable taskExecutionContext) {
return masterTaskExecuteHost;
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/WorkerTaskDispatcher.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/WorkerTaskDispatcher.java
index b2c256cd26..6760633b9b 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/WorkerTaskDispatcher.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/WorkerTaskDispatcher.java
@@ -19,12 +19,17 @@ package org.apache.dolphinscheduler.server.master.runner.dispatcher;
import static com.google.common.base.Preconditions.checkNotNull;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
+import org.apache.dolphinscheduler.extract.worker.ITaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceDispatchRequest;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceDispatchResponse;
+import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.dispatch.exceptions.WorkerGroupNotFoundException;
import org.apache.dolphinscheduler.server.master.dispatch.host.HostManager;
+import org.apache.dolphinscheduler.server.master.exception.TaskDispatchException;
import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.BaseTaskDispatcher;
import org.apache.dolphinscheduler.server.master.runner.execute.TaskExecuteRunnable;
@@ -42,12 +47,31 @@ public class WorkerTaskDispatcher extends BaseTaskDispatcher {
public WorkerTaskDispatcher(TaskEventService taskEventService,
MasterConfig masterConfig,
- MasterRpcClient masterRpcClient,
HostManager hostManager) {
- super(taskEventService, masterConfig, masterRpcClient);
+ super(taskEventService, masterConfig);
this.hostManager = checkNotNull(hostManager);
}
+ @Override
+ protected void doDispatch(TaskExecuteRunnable taskExecuteRunnable) throws TaskDispatchException {
+ TaskExecutionContext taskExecutionContext = taskExecuteRunnable.getTaskExecutionContext();
+ try {
+ ITaskInstanceOperator taskInstanceOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskExecutionContext.getHost(), ITaskInstanceOperator.class);
+ TaskInstanceDispatchResponse taskInstanceDispatchResponse = taskInstanceOperator
+ .dispatchTask(new TaskInstanceDispatchRequest(taskExecuteRunnable.getTaskExecutionContext()));
+ if (!taskInstanceDispatchResponse.isDispatchSuccess()) {
+ throw new TaskDispatchException(String.format("Dispatch task to %s failed, response is: %s",
+ taskExecutionContext.getHost(), taskInstanceDispatchResponse));
+ }
+ } catch (TaskDispatchException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new TaskDispatchException(String.format("Dispatch task to %s failed",
+ taskExecutionContext.getHost()), e);
+ }
+ }
+
@Override
protected Optional getTaskInstanceDispatchHost(TaskExecuteRunnable taskExecuteRunnable) throws WorkerGroupNotFoundException {
String workerGroup = taskExecuteRunnable.getTaskExecutionContext().getWorkerGroup();
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterDelayTaskExecuteRunnable.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterDelayTaskExecuteRunnable.java
index 5b41481714..8a6e6d8e87 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterDelayTaskExecuteRunnable.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterDelayTaskExecuteRunnable.java
@@ -19,7 +19,7 @@ package org.apache.dolphinscheduler.server.master.runner.execute;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
import org.apache.dolphinscheduler.server.master.exception.MasterTaskExecuteException;
-import org.apache.dolphinscheduler.server.master.runner.message.MasterMessageSenderManager;
+import org.apache.dolphinscheduler.server.master.runner.message.LogicTaskInstanceExecutionEventSenderManager;
import org.apache.dolphinscheduler.server.master.runner.task.IAsyncLogicTask;
import org.apache.dolphinscheduler.server.master.runner.task.LogicTaskPluginFactoryBuilder;
@@ -32,9 +32,9 @@ public class AsyncMasterDelayTaskExecuteRunnable extends MasterDelayTaskExecuteR
public AsyncMasterDelayTaskExecuteRunnable(TaskExecutionContext taskExecutionContext,
LogicTaskPluginFactoryBuilder logicTaskPluginFactoryBuilder,
- MasterMessageSenderManager masterMessageSenderManager,
+ LogicTaskInstanceExecutionEventSenderManager logicTaskInstanceExecutionEventSenderManager,
AsyncMasterTaskDelayQueue asyncTaskDelayQueue) {
- super(taskExecutionContext, logicTaskPluginFactoryBuilder, masterMessageSenderManager);
+ super(taskExecutionContext, logicTaskPluginFactoryBuilder, logicTaskInstanceExecutionEventSenderManager);
this.asyncMasterTaskDelayQueue = asyncTaskDelayQueue;
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterDelayTaskExecuteRunnableFactory.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterDelayTaskExecuteRunnableFactory.java
index 169d57a2e4..a71f394b7d 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterDelayTaskExecuteRunnableFactory.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterDelayTaskExecuteRunnableFactory.java
@@ -18,7 +18,7 @@
package org.apache.dolphinscheduler.server.master.runner.execute;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
-import org.apache.dolphinscheduler.server.master.runner.message.MasterMessageSenderManager;
+import org.apache.dolphinscheduler.server.master.runner.message.LogicTaskInstanceExecutionEventSenderManager;
import org.apache.dolphinscheduler.server.master.runner.task.LogicTaskPluginFactoryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,7 +33,7 @@ public class AsyncMasterDelayTaskExecuteRunnableFactory
private LogicTaskPluginFactoryBuilder logicTaskPluginFactoryBuilder;
@Autowired
- private MasterMessageSenderManager masterMessageSenderManager;
+ private LogicTaskInstanceExecutionEventSenderManager logicTaskInstanceExecutionEventSenderManager;
@Autowired
private AsyncMasterTaskDelayQueue asyncTaskDelayQueue;
@@ -42,7 +42,7 @@ public class AsyncMasterDelayTaskExecuteRunnableFactory
public AsyncMasterDelayTaskExecuteRunnable createWorkerTaskExecuteRunnable(TaskExecutionContext taskExecutionContext) {
return new AsyncMasterDelayTaskExecuteRunnable(taskExecutionContext,
logicTaskPluginFactoryBuilder,
- masterMessageSenderManager,
+ logicTaskInstanceExecutionEventSenderManager,
asyncTaskDelayQueue);
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterTaskDelayQueueLooper.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterTaskDelayQueueLooper.java
index afdab35eb1..63b8636be6 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterTaskDelayQueueLooper.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/AsyncMasterTaskDelayQueueLooper.java
@@ -75,11 +75,10 @@ public class AsyncMasterTaskDelayQueueLooper extends BaseDaemonThread implements
break;
}
final TaskExecutionContext taskExecutionContext = asyncTaskExecutionContext.getTaskExecutionContext();
- try (
- LogUtils.MDCAutoClosableContext mdcAutoClosableContext = LogUtils.setWorkflowAndTaskInstanceIDMDC(
- taskExecutionContext.getProcessInstanceId(), taskExecutionContext.getTaskInstanceId());
- LogUtils.MDCAutoClosableContext mdcAutoClosableContext1 =
- LogUtils.setTaskInstanceLogFullPathMDC(taskExecutionContext.getLogPath())) {
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(taskExecutionContext.getProcessInstanceId(),
+ taskExecutionContext.getTaskInstanceId());
+ LogUtils.setTaskInstanceLogFullPathMDC(taskExecutionContext.getLogPath());
if (MasterTaskExecutionContextHolder
.getTaskExecutionContext(taskExecutionContext.getTaskInstanceId()) == null) {
@@ -118,6 +117,9 @@ public class AsyncMasterTaskDelayQueueLooper extends BaseDaemonThread implements
LogUtils.removeTaskInstanceIdMDC();
}
});
+ } finally {
+ LogUtils.removeTaskInstanceLogFullPathMDC();
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
log.info("AsyncMasterTaskDelayQueueLooper closed...");
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/DefaultTaskExecuteRunnable.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/DefaultTaskExecuteRunnable.java
index 4e9a5aed9f..6f736139b6 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/DefaultTaskExecuteRunnable.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/DefaultTaskExecuteRunnable.java
@@ -22,37 +22,37 @@ import static com.google.common.base.Preconditions.checkNotNull;
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.server.master.runner.operator.TaskOperatorManager;
+import org.apache.dolphinscheduler.server.master.runner.operator.TaskExecuteRunnableOperatorManager;
public class DefaultTaskExecuteRunnable extends PriorityTaskExecuteRunnable {
- private final TaskOperatorManager taskOperatorManager;
+ private final TaskExecuteRunnableOperatorManager taskExecuteRunnableOperatorManager;
public DefaultTaskExecuteRunnable(ProcessInstance workflowInstance,
TaskInstance taskInstance,
TaskExecutionContext taskExecutionContext,
- TaskOperatorManager taskOperatorManager) {
+ TaskExecuteRunnableOperatorManager taskExecuteRunnableOperatorManager) {
super(workflowInstance, taskInstance, taskExecutionContext);
- this.taskOperatorManager = checkNotNull(taskOperatorManager);
+ this.taskExecuteRunnableOperatorManager = checkNotNull(taskExecuteRunnableOperatorManager);
}
@Override
public void dispatch() {
- taskOperatorManager.getTaskDispatchOperator().handle(this);
+ taskExecuteRunnableOperatorManager.getTaskDispatchOperator(this).operate(this);
}
@Override
public void kill() {
- taskOperatorManager.getTaskKillOperator().handle(this);
+ taskExecuteRunnableOperatorManager.getTaskKillOperator(this).operate(this);
}
@Override
public void pause() {
- taskOperatorManager.getTaskPauseOperator().handle(this);
+ taskExecuteRunnableOperatorManager.getTaskPauseOperator(this).operate(this);
}
@Override
public void timeout() {
- taskOperatorManager.getTaskTimeoutOperator().handle(this);
+ taskExecuteRunnableOperatorManager.getTaskTimeoutOperator(this).operate(this);
}
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/DefaultTaskExecuteRunnableFactory.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/DefaultTaskExecuteRunnableFactory.java
index 7c447ba02b..64443855fa 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/DefaultTaskExecuteRunnableFactory.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/DefaultTaskExecuteRunnableFactory.java
@@ -22,7 +22,7 @@ import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheM
import org.apache.dolphinscheduler.server.master.exception.TaskExecuteRunnableCreateException;
import org.apache.dolphinscheduler.server.master.exception.TaskExecutionContextCreateException;
import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable;
-import org.apache.dolphinscheduler.server.master.runner.operator.TaskOperatorManager;
+import org.apache.dolphinscheduler.server.master.runner.operator.TaskExecuteRunnableOperatorManager;
import lombok.extern.slf4j.Slf4j;
@@ -40,7 +40,7 @@ public class DefaultTaskExecuteRunnableFactory implements TaskExecuteRunnableFac
private TaskExecutionContextFactory taskExecutionContextFactory;
@Autowired
- private TaskOperatorManager taskOperatorManager;
+ private TaskExecuteRunnableOperatorManager taskExecuteRunnableOperatorManager;
@Override
public DefaultTaskExecuteRunnable createTaskExecuteRunnable(TaskInstance taskInstance) throws TaskExecuteRunnableCreateException {
@@ -51,7 +51,7 @@ public class DefaultTaskExecuteRunnableFactory implements TaskExecuteRunnableFac
workflowExecuteRunnable.getWorkflowExecuteContext().getWorkflowInstance(),
taskInstance,
taskExecutionContextFactory.createTaskExecutionContext(taskInstance),
- taskOperatorManager);
+ taskExecuteRunnableOperatorManager);
} catch (TaskExecutionContextCreateException ex) {
throw new TaskExecuteRunnableCreateException("Create DefaultTaskExecuteRunnable failed", ex);
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/MasterDelayTaskExecuteRunnable.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/MasterDelayTaskExecuteRunnable.java
index 653901f4de..70f3e93521 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/MasterDelayTaskExecuteRunnable.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/MasterDelayTaskExecuteRunnable.java
@@ -19,7 +19,7 @@ package org.apache.dolphinscheduler.server.master.runner.execute;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
-import org.apache.dolphinscheduler.server.master.runner.message.MasterMessageSenderManager;
+import org.apache.dolphinscheduler.server.master.runner.message.LogicTaskInstanceExecutionEventSenderManager;
import org.apache.dolphinscheduler.server.master.runner.task.LogicTaskPluginFactoryBuilder;
import java.util.concurrent.Delayed;
@@ -29,8 +29,8 @@ public abstract class MasterDelayTaskExecuteRunnable extends MasterTaskExecuteRu
public MasterDelayTaskExecuteRunnable(TaskExecutionContext taskExecutionContext,
LogicTaskPluginFactoryBuilder logicTaskPluginFactoryBuilder,
- MasterMessageSenderManager masterMessageSenderManager) {
- super(taskExecutionContext, logicTaskPluginFactoryBuilder, masterMessageSenderManager);
+ LogicTaskInstanceExecutionEventSenderManager logicTaskInstanceExecutionEventSenderManager) {
+ super(taskExecutionContext, logicTaskPluginFactoryBuilder, logicTaskInstanceExecutionEventSenderManager);
}
@Override
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/MasterTaskExecuteRunnable.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/MasterTaskExecuteRunnable.java
index 8abcebc48e..5fa1364616 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/MasterTaskExecuteRunnable.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/MasterTaskExecuteRunnable.java
@@ -25,11 +25,10 @@ import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
import org.apache.dolphinscheduler.plugin.task.api.log.TaskInstanceLogHeader;
import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
import org.apache.dolphinscheduler.server.master.exception.LogicTaskFactoryNotFoundException;
import org.apache.dolphinscheduler.server.master.exception.LogicTaskInitializeException;
import org.apache.dolphinscheduler.server.master.exception.MasterTaskExecuteException;
-import org.apache.dolphinscheduler.server.master.runner.message.MasterMessageSenderManager;
+import org.apache.dolphinscheduler.server.master.runner.message.LogicTaskInstanceExecutionEventSenderManager;
import org.apache.dolphinscheduler.server.master.runner.task.ILogicTask;
import org.apache.dolphinscheduler.server.master.runner.task.LogicTaskPluginFactoryBuilder;
@@ -40,15 +39,15 @@ public abstract class MasterTaskExecuteRunnable implements Runnable {
protected final TaskExecutionContext taskExecutionContext;
protected final LogicTaskPluginFactoryBuilder logicTaskPluginFactoryBuilder;
- protected final MasterMessageSenderManager masterMessageSenderManager;
+ protected final LogicTaskInstanceExecutionEventSenderManager logicTaskInstanceExecutionEventSenderManager;
protected ILogicTask logicTask;
public MasterTaskExecuteRunnable(TaskExecutionContext taskExecutionContext,
LogicTaskPluginFactoryBuilder logicTaskPluginFactoryBuilder,
- MasterMessageSenderManager masterMessageSenderManager) {
+ LogicTaskInstanceExecutionEventSenderManager logicTaskInstanceExecutionEventSenderManager) {
this.taskExecutionContext = taskExecutionContext;
this.logicTaskPluginFactoryBuilder = logicTaskPluginFactoryBuilder;
- this.masterMessageSenderManager = masterMessageSenderManager;
+ this.logicTaskInstanceExecutionEventSenderManager = logicTaskInstanceExecutionEventSenderManager;
}
protected abstract void executeTask() throws MasterTaskExecuteException;
@@ -134,9 +133,10 @@ public abstract class MasterTaskExecuteRunnable implements Runnable {
log.info("End initialize task {}", JSONUtils.toPrettyJsonString(taskExecutionContext));
}
- protected void beforeExecute() throws LogicTaskFactoryNotFoundException, LogicTaskInitializeException, RemotingException {
+ protected void beforeExecute() throws LogicTaskFactoryNotFoundException, LogicTaskInitializeException {
taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.RUNNING_EXECUTION);
- masterMessageSenderManager.getMasterTaskExecuteRunningMessageSender().sendMessage(taskExecutionContext);
+ logicTaskInstanceExecutionEventSenderManager.getMasterTaskExecuteRunningMessageSender()
+ .sendMessage(taskExecutionContext);
log.info("Send task status {} to master {}", taskExecutionContext.getCurrentExecutionStatus().name(),
taskExecutionContext.getWorkflowInstanceHost());
@@ -166,7 +166,8 @@ public abstract class MasterTaskExecuteRunnable implements Runnable {
try {
taskExecutionContext.setEndTime(System.currentTimeMillis());
taskExecutionContext.setVarPool(JSONUtils.toJsonString(logicTask.getTaskParameters().getVarPool()));
- masterMessageSenderManager.getMasterTaskExecuteResultMessageSender().sendMessage(taskExecutionContext);
+ logicTaskInstanceExecutionEventSenderManager.getLogicTaskInstanceExecutionFinishEventSender()
+ .sendMessage(taskExecutionContext);
log.info("Send task status: {} to master: {} successfully",
taskExecutionContext.getCurrentExecutionStatus().name(),
taskExecutionContext.getWorkflowInstanceHost());
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/SyncMasterDelayTaskExecuteRunnable.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/SyncMasterDelayTaskExecuteRunnable.java
index 04f9321c08..62365f78cb 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/SyncMasterDelayTaskExecuteRunnable.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/SyncMasterDelayTaskExecuteRunnable.java
@@ -20,7 +20,7 @@ package org.apache.dolphinscheduler.server.master.runner.execute;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
import org.apache.dolphinscheduler.plugin.task.api.log.TaskInstanceLogHeader;
import org.apache.dolphinscheduler.server.master.exception.MasterTaskExecuteException;
-import org.apache.dolphinscheduler.server.master.runner.message.MasterMessageSenderManager;
+import org.apache.dolphinscheduler.server.master.runner.message.LogicTaskInstanceExecutionEventSenderManager;
import org.apache.dolphinscheduler.server.master.runner.task.ISyncLogicTask;
import org.apache.dolphinscheduler.server.master.runner.task.LogicTaskPluginFactoryBuilder;
@@ -31,8 +31,8 @@ public class SyncMasterDelayTaskExecuteRunnable extends MasterDelayTaskExecuteRu
public SyncMasterDelayTaskExecuteRunnable(TaskExecutionContext taskExecutionContext,
LogicTaskPluginFactoryBuilder logicTaskPluginFactoryBuilder,
- MasterMessageSenderManager masterMessageSenderManager) {
- super(taskExecutionContext, logicTaskPluginFactoryBuilder, masterMessageSenderManager);
+ LogicTaskInstanceExecutionEventSenderManager logicTaskInstanceExecutionEventSenderManager) {
+ super(taskExecutionContext, logicTaskPluginFactoryBuilder, logicTaskInstanceExecutionEventSenderManager);
}
@Override
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/SyncMasterDelayTaskExecuteRunnableFactory.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/SyncMasterDelayTaskExecuteRunnableFactory.java
index 8c254485ae..2bf829c021 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/SyncMasterDelayTaskExecuteRunnableFactory.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/execute/SyncMasterDelayTaskExecuteRunnableFactory.java
@@ -18,7 +18,7 @@
package org.apache.dolphinscheduler.server.master.runner.execute;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
-import org.apache.dolphinscheduler.server.master.runner.message.MasterMessageSenderManager;
+import org.apache.dolphinscheduler.server.master.runner.message.LogicTaskInstanceExecutionEventSenderManager;
import org.apache.dolphinscheduler.server.master.runner.task.LogicTaskPluginFactoryBuilder;
import lombok.extern.slf4j.Slf4j;
@@ -35,11 +35,11 @@ public class SyncMasterDelayTaskExecuteRunnableFactory
@Autowired
private LogicTaskPluginFactoryBuilder logicTaskPluginFactoryBuilder;
@Autowired
- private MasterMessageSenderManager masterMessageSenderManager;
+ private LogicTaskInstanceExecutionEventSenderManager logicTaskInstanceExecutionEventSenderManager;
@Override
public SyncMasterDelayTaskExecuteRunnable createWorkerTaskExecuteRunnable(TaskExecutionContext taskExecutionContext) {
return new SyncMasterDelayTaskExecuteRunnable(taskExecutionContext, logicTaskPluginFactoryBuilder,
- masterMessageSenderManager);
+ logicTaskInstanceExecutionEventSenderManager);
}
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/ITaskInstanceExecutionEventListenFunction.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/ITaskInstanceExecutionEventListenFunction.java
new file mode 100644
index 0000000000..5be6d207a0
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/ITaskInstanceExecutionEventListenFunction.java
@@ -0,0 +1,24 @@
+/*
+ * 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.runner.listener;
+
+public interface ITaskInstanceExecutionEventListenFunction {
+
+ void handleTaskInstanceExecutionEvent(E e);
+
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionEventListenerFunctionManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionEventListenerFunctionManager.java
new file mode 100644
index 0000000000..239cc6def0
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionEventListenerFunctionManager.java
@@ -0,0 +1,57 @@
+/*
+ * 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.runner.listener;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class TaskInstanceExecutionEventListenerFunctionManager {
+
+ @Autowired
+ private TaskInstanceExecutionRunningEventListenFunction taskInstanceExecutionRunningEventListenFunction;
+
+ @Autowired
+ private TaskInstanceExecutionResultEventListenFunction taskInstanceExecutionResultEventListenFunction;
+
+ @Autowired
+ private TaskInstanceExecutionInfoEventListenFunction taskInstanceExecutionInfoEventListenFunction;
+
+ @Autowired
+ private TaskInstanceStateEventListenFunction taskInstanceStateEventListenFunction;
+
+ public TaskInstanceExecutionRunningEventListenFunction getTaskInstanceExecutionRunningEventListenFunction() {
+ return taskInstanceExecutionRunningEventListenFunction;
+ }
+
+ public TaskInstanceExecutionResultEventListenFunction getTaskInstanceExecutionResultEventListenFunction() {
+ return taskInstanceExecutionResultEventListenFunction;
+ }
+
+ public TaskInstanceExecutionInfoEventListenFunction getTaskInstanceExecutionInfoEventListenFunction() {
+ return taskInstanceExecutionInfoEventListenFunction;
+ }
+
+ public TaskInstanceStateEventListenFunction getTaskInstanceStateEventListenFunction() {
+ return taskInstanceStateEventListenFunction;
+ }
+
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskOperatorManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionInfoEventListenFunction.java
similarity index 53%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskOperatorManager.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionInfoEventListenFunction.java
index fd647240e0..47dec6ba85 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskOperatorManager.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionInfoEventListenFunction.java
@@ -15,40 +15,29 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.server.master.runner.operator;
+package org.apache.dolphinscheduler.server.master.runner.listener;
+
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceExecutionInfoEvent;
+import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent;
+import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
+
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+@Slf4j
@Component
-public class TaskOperatorManager {
-
- @Autowired
- private TaskKillOperator taskKillOperator;
-
- @Autowired
- private TaskPauseOperator taskPauseOperator;
-
- @Autowired
- private TaskDispatchOperator taskDispatchOperator;
+public class TaskInstanceExecutionInfoEventListenFunction
+ implements
+ ITaskInstanceExecutionEventListenFunction {
@Autowired
- private TaskTimeoutOperator taskTimeoutOperator;
+ private TaskEventService taskEventService;
- public TaskOperator getTaskKillOperator() {
- return taskKillOperator;
+ @Override
+ public void handleTaskInstanceExecutionEvent(TaskInstanceExecutionInfoEvent taskInstanceExecutionInfoEvent) {
+ TaskEvent taskEvent = TaskEvent.newUpdatePidEvent(taskInstanceExecutionInfoEvent);
+ taskEventService.addEvent(taskEvent);
}
-
- public TaskPauseOperator getTaskPauseOperator() {
- return taskPauseOperator;
- }
-
- public TaskDispatchOperator getTaskDispatchOperator() {
- return taskDispatchOperator;
- }
-
- public TaskTimeoutOperator getTaskTimeoutOperator() {
- return taskTimeoutOperator;
- }
-
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionResultEventListenFunction.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionResultEventListenFunction.java
new file mode 100644
index 0000000000..45766f1697
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionResultEventListenFunction.java
@@ -0,0 +1,52 @@
+/*
+ * 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.runner.listener;
+
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceExecutionFinishEvent;
+import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils;
+import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent;
+import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class TaskInstanceExecutionResultEventListenFunction
+ implements
+ ITaskInstanceExecutionEventListenFunction {
+
+ @Autowired
+ private TaskEventService taskEventService;
+
+ @Override
+ public void handleTaskInstanceExecutionEvent(TaskInstanceExecutionFinishEvent taskInstanceExecutionFinishEvent) {
+ TaskEvent taskResultEvent = TaskEvent.newResultEvent(taskInstanceExecutionFinishEvent);
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(taskResultEvent.getProcessInstanceId(),
+ taskResultEvent.getTaskInstanceId());
+ log.info("Received TaskInstanceExecutionFinishEvent: {}", taskResultEvent);
+ taskEventService.addEvent(taskResultEvent);
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
+ }
+ }
+
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionRunningEventListenFunction.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionRunningEventListenFunction.java
new file mode 100644
index 0000000000..5cdd39c3fd
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceExecutionRunningEventListenFunction.java
@@ -0,0 +1,43 @@
+/*
+ * 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.runner.listener;
+
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceExecutionRunningEvent;
+import org.apache.dolphinscheduler.server.master.processor.queue.TaskEvent;
+import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class TaskInstanceExecutionRunningEventListenFunction
+ implements
+ ITaskInstanceExecutionEventListenFunction {
+
+ @Autowired
+ private TaskEventService taskEventService;
+
+ @Override
+ public void handleTaskInstanceExecutionEvent(TaskInstanceExecutionRunningEvent taskInstanceExecutionRunningEvent) {
+ log.info("Receive handleTaskInstanceExecutionEvent request: {}", taskInstanceExecutionRunningEvent);
+ taskEventService.addEvent(TaskEvent.newRunningEvent(taskInstanceExecutionRunningEvent));
+ }
+}
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/runner/listener/TaskInstanceStateEventListenFunction.java
similarity index 64%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/StateEventProcessor.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/listener/TaskInstanceStateEventListenFunction.java
index bfee81dc48..1beea02443 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/runner/listener/TaskInstanceStateEventListenFunction.java
@@ -15,16 +15,12 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.server.master.processor;
+package org.apache.dolphinscheduler.server.master.runner.listener;
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.extract.master.transportor.WorkflowInstanceStateChangeEvent;
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.workflow.WorkflowStateEventChangeRequest;
-import org.apache.dolphinscheduler.remote.processor.MasterRpcProcessor;
import org.apache.dolphinscheduler.server.master.event.StateEvent;
import org.apache.dolphinscheduler.server.master.event.TaskStateEvent;
import org.apache.dolphinscheduler.server.master.event.WorkflowStateEvent;
@@ -35,44 +31,34 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import io.netty.channel.Channel;
-
-/**
- * handle state event received from master/api
- */
-@Component
@Slf4j
-public class StateEventProcessor implements MasterRpcProcessor {
+@Component
+public class TaskInstanceStateEventListenFunction
+ implements
+ ITaskInstanceExecutionEventListenFunction {
@Autowired
private StateEventResponseService stateEventResponseService;
@Override
- public void process(Channel channel, Message message) {
- WorkflowStateEventChangeRequest workflowStateEventChangeRequest =
- JSONUtils.parseObject(message.getBody(), WorkflowStateEventChangeRequest.class);
- StateEvent stateEvent;
- if (workflowStateEventChangeRequest.getDestTaskInstanceId() == 0) {
- stateEvent = createWorkflowStateEvent(workflowStateEventChangeRequest);
+ public void handleTaskInstanceExecutionEvent(WorkflowInstanceStateChangeEvent taskInstanceInstanceStateChangeEvent) {
+ final StateEvent stateEvent;
+ if (taskInstanceInstanceStateChangeEvent.getDestTaskInstanceId() == 0) {
+ stateEvent = createWorkflowStateEvent(taskInstanceInstanceStateChangeEvent);
} else {
- stateEvent = createTaskStateEvent(workflowStateEventChangeRequest);
+ stateEvent = createTaskStateEvent(taskInstanceInstanceStateChangeEvent);
}
- try (
- final LogUtils.MDCAutoClosableContext mdcAutoClosableContext = LogUtils.setWorkflowAndTaskInstanceIDMDC(
- stateEvent.getProcessInstanceId(), stateEvent.getTaskInstanceId())) {
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(stateEvent.getProcessInstanceId(), stateEvent.getTaskInstanceId());
log.info("Received state change command, event: {}", stateEvent);
stateEventResponseService.addStateChangeEvent(stateEvent);
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
-
}
- @Override
- public MessageType getCommandType() {
- return MessageType.STATE_EVENT_REQUEST;
- }
-
- private TaskStateEvent createTaskStateEvent(WorkflowStateEventChangeRequest workflowStateEventChangeRequest) {
+ private TaskStateEvent createTaskStateEvent(WorkflowInstanceStateChangeEvent workflowStateEventChangeRequest) {
return TaskStateEvent.builder()
.processInstanceId(workflowStateEventChangeRequest.getDestProcessInstanceId())
.taskInstanceId(workflowStateEventChangeRequest.getDestTaskInstanceId())
@@ -81,7 +67,7 @@ public class StateEventProcessor implements MasterRpcProcessor {
.build();
}
- private WorkflowStateEvent createWorkflowStateEvent(WorkflowStateEventChangeRequest workflowStateEventChangeRequest) {
+ private WorkflowStateEvent createWorkflowStateEvent(WorkflowInstanceStateChangeEvent workflowStateEventChangeRequest) {
WorkflowExecutionStatus workflowExecutionStatus = workflowStateEventChangeRequest.getSourceStatus();
if (workflowStateEventChangeRequest.getSourceProcessInstanceId() != workflowStateEventChangeRequest
.getDestProcessInstanceId()) {
@@ -94,5 +80,4 @@ public class StateEventProcessor implements MasterRpcProcessor {
.key(workflowStateEventChangeRequest.getKey())
.build();
}
-
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterTaskExecuteRunningMessageSender.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecuteRunningEventSender.java
similarity index 56%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterTaskExecuteRunningMessageSender.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecuteRunningEventSender.java
index ca846bbb57..1dcca72878 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterTaskExecuteRunningMessageSender.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecuteRunningEventSender.java
@@ -17,39 +17,32 @@
package org.apache.dolphinscheduler.server.master.runner.message;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ITaskInstanceExecutionEventListener;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceExecutionRunningEvent;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
-import org.apache.dolphinscheduler.remote.command.MessageType;
-import org.apache.dolphinscheduler.remote.command.task.TaskExecuteRunningMessage;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.server.master.config.MasterConfig;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import lombok.NonNull;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
-public class MasterTaskExecuteRunningMessageSender implements MasterMessageSender {
-
- @Autowired
- private MasterRpcClient masterRpcClient;
-
- @Autowired
- private MasterConfig masterConfig;
+public class LogicTaskInstanceExecuteRunningEventSender
+ implements
+ LogicTaskInstanceExecutionEventSender {
@Override
- public void sendMessage(TaskExecuteRunningMessage message) throws RemotingException {
- masterRpcClient.send(Host.of(message.getMessageReceiverAddress()), message.convert2Command());
+ public void sendMessage(TaskInstanceExecutionRunningEvent taskInstanceExecutionRunningEvent) {
+ ITaskInstanceExecutionEventListener iTaskInstanceExecutionEventListener =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstanceExecutionRunningEvent.getHost(),
+ ITaskInstanceExecutionEventListener.class);
+ iTaskInstanceExecutionEventListener.onTaskInstanceExecutionRunning(taskInstanceExecutionRunningEvent);
}
@Override
- public TaskExecuteRunningMessage buildMessage(@NonNull TaskExecutionContext taskExecutionContext) {
- TaskExecuteRunningMessage taskExecuteRunningMessage =
- new TaskExecuteRunningMessage(masterConfig.getMasterAddress(),
- taskExecutionContext.getWorkflowInstanceHost(),
- System.currentTimeMillis());
+ public TaskInstanceExecutionRunningEvent buildMessage(@NonNull TaskExecutionContext taskExecutionContext) {
+ TaskInstanceExecutionRunningEvent taskExecuteRunningMessage = new TaskInstanceExecutionRunningEvent();
taskExecuteRunningMessage.setTaskInstanceId(taskExecutionContext.getTaskInstanceId());
taskExecuteRunningMessage.setProcessInstanceId(taskExecutionContext.getProcessInstanceId());
taskExecuteRunningMessage.setStatus(taskExecutionContext.getCurrentExecutionStatus());
@@ -61,8 +54,4 @@ public class MasterTaskExecuteRunningMessageSender implements MasterMessageSende
return taskExecuteRunningMessage;
}
- @Override
- public MessageType getMessageType() {
- return MessageType.TASK_EXECUTE_RUNNING_MESSAGE;
- }
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterMessageSender.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecutionEventSender.java
similarity index 71%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterMessageSender.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecutionEventSender.java
index 8c2693b0c6..3b3ff7f645 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterMessageSender.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecutionEventSender.java
@@ -18,21 +18,16 @@
package org.apache.dolphinscheduler.server.master.runner.message;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
-import org.apache.dolphinscheduler.remote.command.BaseMessage;
-import org.apache.dolphinscheduler.remote.command.MessageType;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
// todo: unify with WorkerMessageSender
-public interface MasterMessageSender {
+public interface LogicTaskInstanceExecutionEventSender {
/**
* Send the message
- *
- * @throws RemotingException Cannot connect to the target host.
*/
- void sendMessage(T message) throws RemotingException;
+ void sendMessage(T message);
- default void sendMessage(TaskExecutionContext taskExecutionContext) throws RemotingException {
+ default void sendMessage(TaskExecutionContext taskExecutionContext) {
T message = buildMessage(taskExecutionContext);
sendMessage(message);
}
@@ -42,9 +37,4 @@ public interface MasterMessageSender {
*/
T buildMessage(TaskExecutionContext taskExecutionContext);
- /**
- * The message type can be sent by this sender.
- */
- MessageType getMessageType();
-
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterMessageSenderManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecutionEventSenderManager.java
similarity index 58%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterMessageSenderManager.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecutionEventSenderManager.java
index 82fbb00c41..1625dd73b1 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterMessageSenderManager.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecutionEventSenderManager.java
@@ -24,27 +24,20 @@ import org.springframework.stereotype.Component;
@Slf4j
@Component
-public class MasterMessageSenderManager {
+public class LogicTaskInstanceExecutionEventSenderManager {
@Autowired
- private MasterTaskExecuteResultMessageSender masterTaskExecuteResultMessageSender;
+ private LogicTaskInstanceExecutionFinishEventSender logicTaskInstanceExecutionFinishEventSender;
@Autowired
- private MasterTaskExecuteRunningMessageSender masterTaskExecuteRunningMessageSender;
+ private LogicTaskInstanceExecuteRunningEventSender logicTaskInstanceExecuteRunningEventSender;
- @Autowired
- private MasterTaskUpdateRuntimeMessageSender masterTaskUpdateRuntimeMessageSender;
-
- public MasterTaskExecuteResultMessageSender getMasterTaskExecuteResultMessageSender() {
- return masterTaskExecuteResultMessageSender;
- }
-
- public MasterTaskExecuteRunningMessageSender getMasterTaskExecuteRunningMessageSender() {
- return masterTaskExecuteRunningMessageSender;
+ public LogicTaskInstanceExecutionFinishEventSender getLogicTaskInstanceExecutionFinishEventSender() {
+ return logicTaskInstanceExecutionFinishEventSender;
}
- public MasterTaskUpdateRuntimeMessageSender getMasterTaskUpdatePidMessageSender() {
- return masterTaskUpdateRuntimeMessageSender;
+ public LogicTaskInstanceExecuteRunningEventSender getMasterTaskExecuteRunningMessageSender() {
+ return logicTaskInstanceExecuteRunningEventSender;
}
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterTaskExecuteResultMessageSender.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecutionFinishEventSender.java
similarity index 60%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterTaskExecuteResultMessageSender.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecutionFinishEventSender.java
index 90986a59eb..94fc1f57ec 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterTaskExecuteResultMessageSender.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/LogicTaskInstanceExecutionFinishEventSender.java
@@ -17,37 +17,29 @@
package org.apache.dolphinscheduler.server.master.runner.message;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ITaskInstanceExecutionEventListener;
+import org.apache.dolphinscheduler.extract.master.transportor.TaskInstanceExecutionFinishEvent;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
-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.master.config.MasterConfig;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
-public class MasterTaskExecuteResultMessageSender implements MasterMessageSender {
-
- @Autowired
- private MasterConfig masterConfig;
-
- @Autowired
- private MasterRpcClient masterRpcClient;
+public class LogicTaskInstanceExecutionFinishEventSender
+ implements
+ LogicTaskInstanceExecutionEventSender {
@Override
- public void sendMessage(TaskExecuteResultMessage message) throws RemotingException {
- masterRpcClient.send(Host.of(message.getMessageReceiverAddress()), message.convert2Command());
+ public void sendMessage(TaskInstanceExecutionFinishEvent message) {
+ ITaskInstanceExecutionEventListener iTaskInstanceExecutionEventListener =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(message.getHost(), ITaskInstanceExecutionEventListener.class);
+ iTaskInstanceExecutionEventListener.onTaskInstanceExecutionFinish(new TaskInstanceExecutionFinishEvent());
}
@Override
- public TaskExecuteResultMessage buildMessage(TaskExecutionContext taskExecutionContext) {
- TaskExecuteResultMessage taskExecuteResultMessage =
- new TaskExecuteResultMessage(masterConfig.getMasterAddress(),
- taskExecutionContext.getWorkflowInstanceHost(),
- System.currentTimeMillis());
+ public TaskInstanceExecutionFinishEvent buildMessage(TaskExecutionContext taskExecutionContext) {
+ TaskInstanceExecutionFinishEvent taskExecuteResultMessage = new TaskInstanceExecutionFinishEvent();
taskExecuteResultMessage.setProcessInstanceId(taskExecutionContext.getProcessInstanceId());
taskExecuteResultMessage.setTaskInstanceId(taskExecutionContext.getTaskInstanceId());
taskExecuteResultMessage.setStatus(taskExecutionContext.getCurrentExecutionStatus().getCode());
@@ -63,8 +55,4 @@ public class MasterTaskExecuteResultMessageSender implements MasterMessageSender
return taskExecuteResultMessage;
}
- @Override
- public MessageType getMessageType() {
- return MessageType.TASK_EXECUTE_RESULT_MESSAGE;
- }
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterTaskUpdateRuntimeMessageSender.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterTaskUpdateRuntimeMessageSender.java
deleted file mode 100644
index 6af8f3f391..0000000000
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/message/MasterTaskUpdateRuntimeMessageSender.java
+++ /dev/null
@@ -1,64 +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.server.master.runner.message;
-
-import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
-import org.apache.dolphinscheduler.remote.command.MessageType;
-import org.apache.dolphinscheduler.remote.command.task.TaskUpdateRuntimeMessage;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.server.master.config.MasterConfig;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
-
-import lombok.NonNull;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-public class MasterTaskUpdateRuntimeMessageSender implements MasterMessageSender {
-
- @Autowired
- private MasterRpcClient masterRpcClient;
-
- @Autowired
- private MasterConfig masterConfig;
-
- @Override
- public void sendMessage(TaskUpdateRuntimeMessage message) throws RemotingException {
- masterRpcClient.send(Host.of(message.getMessageReceiverAddress()), message.convert2Command());
- }
-
- @Override
- public TaskUpdateRuntimeMessage buildMessage(@NonNull TaskExecutionContext taskExecutionContext) {
- TaskUpdateRuntimeMessage taskUpdatePidRequest =
- new TaskUpdateRuntimeMessage(masterConfig.getMasterAddress(),
- taskExecutionContext.getWorkflowInstanceHost(),
- System.currentTimeMillis());
- taskUpdatePidRequest.setTaskInstanceId(taskExecutionContext.getTaskInstanceId());
- taskUpdatePidRequest.setProcessInstanceId(taskExecutionContext.getProcessInstanceId());
- taskUpdatePidRequest.setHost(taskExecutionContext.getHost());
- taskUpdatePidRequest.setStartTime(taskExecutionContext.getStartTime());
- return taskUpdatePidRequest;
- }
-
- @Override
- public MessageType getMessageType() {
- return MessageType.TASK_UPDATE_RUNTIME_MESSAGE;
- }
-}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnableDispatchOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnableDispatchOperator.java
new file mode 100644
index 0000000000..6294f581ec
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnableDispatchOperator.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.server.master.runner.operator;
+
+import org.apache.dolphinscheduler.server.master.runner.GlobalTaskDispatchWaitingQueue;
+import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnable;
+
+public abstract class BaseTaskExecuteRunnableDispatchOperator implements TaskExecuteRunnableOperator {
+
+ private final GlobalTaskDispatchWaitingQueue globalTaskDispatchWaitingQueue;
+
+ public BaseTaskExecuteRunnableDispatchOperator(GlobalTaskDispatchWaitingQueue globalTaskDispatchWaitingQueue) {
+ this.globalTaskDispatchWaitingQueue = globalTaskDispatchWaitingQueue;
+ }
+
+ @Override
+ public void operate(DefaultTaskExecuteRunnable taskExecuteRunnable) {
+ globalTaskDispatchWaitingQueue.submitNeedToDispatchTaskExecuteRunnable(taskExecuteRunnable);
+ }
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskKillOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnableKillOperator.java
similarity index 66%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskKillOperator.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnableKillOperator.java
index c2bf2867c5..a1d0a893fc 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskKillOperator.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnableKillOperator.java
@@ -20,33 +20,23 @@ package org.apache.dolphinscheduler.server.master.runner.operator;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
-import org.apache.dolphinscheduler.remote.command.task.TaskKillRequest;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnable;
-import org.apache.commons.lang3.StringUtils;
-
import java.util.Date;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
@Slf4j
-@Component
-public class TaskKillOperator implements TaskOperator {
+public abstract class BaseTaskExecuteRunnableKillOperator implements TaskExecuteRunnableOperator {
- @Autowired
- private TaskInstanceDao taskInstanceDao;
+ private final TaskInstanceDao taskInstanceDao;
- @Autowired
- private MasterRpcClient masterRpcClient;
+ public BaseTaskExecuteRunnableKillOperator(TaskInstanceDao taskInstanceDao) {
+ this.taskInstanceDao = taskInstanceDao;
+ }
@Override
- public void handle(DefaultTaskExecuteRunnable taskExecuteRunnable) {
+ public void operate(DefaultTaskExecuteRunnable taskExecuteRunnable) {
TaskInstance taskInstance = taskExecuteRunnable.getTaskInstance();
log.info("Begin to kill task instance: {}", taskInstance.getName());
if (taskInstance.getState().isFinished()) {
@@ -62,18 +52,11 @@ public class TaskKillOperator implements TaskOperator {
}
}
+ protected abstract void killRemoteTaskInstanceInThreadPool(TaskInstance taskInstance);
+
private void killTaskInstanceInDB(TaskInstance taskInstance) {
taskInstance.setState(TaskExecutionStatus.KILL);
taskInstance.setEndTime(new Date());
taskInstanceDao.updateById(taskInstance);
}
-
- private void killRemoteTaskInstanceInThreadPool(TaskInstance taskInstance) throws RemotingException {
- if (StringUtils.isEmpty(taskInstance.getHost())) {
- return;
- }
- TaskKillRequest killCommand = new TaskKillRequest(taskInstance.getId());
- masterRpcClient.send(Host.of(taskInstance.getHost()), killCommand.convert2Command());
- }
-
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnablePauseOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnablePauseOperator.java
new file mode 100644
index 0000000000..383752d3f3
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnablePauseOperator.java
@@ -0,0 +1,38 @@
+/*
+ * 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.runner.operator;
+
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnable;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public abstract class BaseTaskExecuteRunnablePauseOperator implements TaskExecuteRunnableOperator {
+
+ @Override
+ public void operate(DefaultTaskExecuteRunnable taskExecuteRunnable) {
+ try {
+ pauseRemoteTaskInstanceInThreadPool(taskExecuteRunnable.getTaskInstance());
+ } catch (Exception e) {
+ log.error("Pause DefaultTaskExecuteRunnable failed", e);
+ }
+ }
+
+ protected abstract void pauseRemoteTaskInstanceInThreadPool(TaskInstance taskInstance);
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskTimeoutOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnableTimeoutOperator.java
similarity index 74%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskTimeoutOperator.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnableTimeoutOperator.java
index 0da88a0dd3..4068bfa082 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskTimeoutOperator.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/BaseTaskExecuteRunnableTimeoutOperator.java
@@ -21,33 +21,23 @@ import org.apache.dolphinscheduler.dao.entity.TaskInstance;
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskTimeoutStrategy;
-import org.apache.dolphinscheduler.remote.command.task.TaskKillRequest;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnable;
-import org.apache.commons.lang3.StringUtils;
-
import java.util.Date;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
@Slf4j
-@Component
-public class TaskTimeoutOperator implements TaskOperator {
+public abstract class BaseTaskExecuteRunnableTimeoutOperator implements TaskExecuteRunnableOperator {
- @Autowired
private TaskInstanceDao taskInstanceDao;
- @Autowired
- private MasterRpcClient masterRpcClient;
+ public BaseTaskExecuteRunnableTimeoutOperator(TaskInstanceDao taskInstanceDao) {
+ this.taskInstanceDao = taskInstanceDao;
+ }
@Override
- public void handle(DefaultTaskExecuteRunnable taskExecuteRunnable) {
+ public void operate(DefaultTaskExecuteRunnable taskExecuteRunnable) {
// Right now, if the task is running in worker, the timeout strategy will be handled at worker side.
// if the task is in master, the timeout strategy will be handled at master side.
// todo: we should unify this, the master only need to handle the timeout strategy. and send request to worker
@@ -70,17 +60,12 @@ public class TaskTimeoutOperator implements TaskOperator {
}
+ protected abstract void killRemoteTaskInstanceInThreadPool(TaskInstance taskInstance);
+
private void timeoutTaskInstanceInDB(TaskInstance taskInstance) {
taskInstance.setState(TaskExecutionStatus.FAILURE);
taskInstance.setEndTime(new Date());
taskInstanceDao.updateById(taskInstance);
}
- private void killRemoteTaskInstanceInThreadPool(TaskInstance taskInstance) throws RemotingException {
- if (StringUtils.isEmpty(taskInstance.getHost())) {
- return;
- }
- TaskKillRequest killCommand = new TaskKillRequest(taskInstance.getId());
- masterRpcClient.send(Host.of(taskInstance.getHost()), killCommand.convert2Command());
- }
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnableDispatchOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnableDispatchOperator.java
new file mode 100644
index 0000000000..d5b0802372
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnableDispatchOperator.java
@@ -0,0 +1,31 @@
+/*
+ * 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.runner.operator;
+
+import org.apache.dolphinscheduler.server.master.runner.GlobalTaskDispatchWaitingQueue;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class LogicTaskExecuteRunnableDispatchOperator extends BaseTaskExecuteRunnableDispatchOperator {
+
+ public LogicTaskExecuteRunnableDispatchOperator(GlobalTaskDispatchWaitingQueue globalTaskDispatchWaitingQueue) {
+ super(globalTaskDispatchWaitingQueue);
+ }
+
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnableKillOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnableKillOperator.java
new file mode 100644
index 0000000000..29ef03906d
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnableKillOperator.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.server.master.runner.operator;
+
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ILogicTaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskKillRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskKillResponse;
+
+import org.apache.commons.lang3.StringUtils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogicTaskExecuteRunnableKillOperator extends BaseTaskExecuteRunnableKillOperator {
+
+ public LogicTaskExecuteRunnableKillOperator(TaskInstanceDao taskInstanceDao) {
+ super(taskInstanceDao);
+ }
+
+ @Override
+ protected void killRemoteTaskInstanceInThreadPool(TaskInstance taskInstance) {
+ if (StringUtils.isEmpty(taskInstance.getHost())) {
+ log.info("The LogicTaskInstance: {}'s host is null, no need to killRemoteTaskInstance",
+ taskInstance.getName());
+ return;
+ }
+ final ILogicTaskInstanceOperator taskInstanceOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), ILogicTaskInstanceOperator.class);
+ final LogicTaskKillRequest logicTaskKillRequest = new LogicTaskKillRequest(taskInstance.getId());
+ final LogicTaskKillResponse logicTaskKillResponse = taskInstanceOperator.killLogicTask(logicTaskKillRequest);
+ log.info("Kill LogicTaskInstance {} on host {} with response {}", taskInstance.getName(),
+ taskInstance.getHost(), logicTaskKillResponse);
+ }
+
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnablePauseOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnablePauseOperator.java
new file mode 100644
index 0000000000..af865f05f6
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnablePauseOperator.java
@@ -0,0 +1,52 @@
+/*
+ * 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.runner.operator;
+
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ILogicTaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskPauseRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskPauseResponse;
+
+import org.apache.commons.lang3.StringUtils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogicTaskExecuteRunnablePauseOperator extends BaseTaskExecuteRunnablePauseOperator {
+
+ @Override
+ protected void pauseRemoteTaskInstanceInThreadPool(TaskInstance taskInstance) {
+ if (StringUtils.isEmpty(taskInstance.getHost())) {
+ log.info("The LogicTaskInstance: {}'s host is null, no need to pauseRemoteTaskInstance",
+ taskInstance.getName());
+ return;
+ }
+ final ILogicTaskInstanceOperator taskInstanceOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), ILogicTaskInstanceOperator.class);
+ final LogicTaskPauseRequest logicTaskPauseRequest = new LogicTaskPauseRequest(taskInstance.getId());
+ final LogicTaskPauseResponse logicTaskPauseResponse =
+ taskInstanceOperator.pauseLogicTask(logicTaskPauseRequest);
+ log.info("Pause LogicTaskInstance: {} on host: {} with response: {}", taskInstance.getName(),
+ taskInstance.getHost(), logicTaskPauseResponse);
+ }
+
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnableTimeoutOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnableTimeoutOperator.java
new file mode 100644
index 0000000000..4cf16bb2c7
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/LogicTaskExecuteRunnableTimeoutOperator.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.server.master.runner.operator;
+
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ILogicTaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskKillRequest;
+import org.apache.dolphinscheduler.extract.master.transportor.LogicTaskKillResponse;
+
+import org.apache.commons.lang3.StringUtils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogicTaskExecuteRunnableTimeoutOperator extends BaseTaskExecuteRunnableTimeoutOperator {
+
+ public LogicTaskExecuteRunnableTimeoutOperator(TaskInstanceDao taskInstanceDao) {
+ super(taskInstanceDao);
+ }
+
+ @Override
+ protected void killRemoteTaskInstanceInThreadPool(TaskInstance taskInstance) {
+ if (StringUtils.isEmpty(taskInstance.getHost())) {
+ log.info("The LogicTaskInstance: {}'s host is null, no need to killRemoteTaskInstance",
+ taskInstance.getId());
+ return;
+ }
+
+ final ILogicTaskInstanceOperator iLogicTaskInstanceOperator =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), ILogicTaskInstanceOperator.class);
+
+ final LogicTaskKillRequest taskInstanceKillRequest = new LogicTaskKillRequest(taskInstance.getId());
+ final LogicTaskKillResponse taskInstanceKillResponse =
+ iLogicTaskInstanceOperator.killLogicTask(taskInstanceKillRequest);
+ log.info("Timeout kill LogicTaskInstance {} on host {} with response {}", taskInstance.getName(),
+ taskInstance.getHost(), taskInstanceKillResponse);
+ }
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskDispatchOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableDispatchOperator.java
similarity index 89%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskDispatchOperator.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableDispatchOperator.java
index 1280b772e7..5a9f070641 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskDispatchOperator.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableDispatchOperator.java
@@ -24,13 +24,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
-public class TaskDispatchOperator implements TaskOperator {
+public class TaskExecuteRunnableDispatchOperator implements TaskExecuteRunnableOperator {
@Autowired
private GlobalTaskDispatchWaitingQueue globalTaskDispatchWaitingQueue;
@Override
- public void handle(DefaultTaskExecuteRunnable taskExecuteRunnable) {
+ public void operate(DefaultTaskExecuteRunnable taskExecuteRunnable) {
globalTaskDispatchWaitingQueue.submitNeedToDispatchTaskExecuteRunnable(taskExecuteRunnable);
}
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableKillOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableKillOperator.java
new file mode 100644
index 0000000000..b80cb79561
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableKillOperator.java
@@ -0,0 +1,54 @@
+/*
+ * 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.runner.operator;
+
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.worker.ITaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceKillRequest;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceKillResponse;
+
+import org.apache.commons.lang3.StringUtils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class TaskExecuteRunnableKillOperator extends BaseTaskExecuteRunnableKillOperator {
+
+ public TaskExecuteRunnableKillOperator(TaskInstanceDao taskInstanceDao) {
+ super(taskInstanceDao);
+ }
+
+ protected void killRemoteTaskInstanceInThreadPool(TaskInstance taskInstance) {
+ if (StringUtils.isEmpty(taskInstance.getHost())) {
+ log.info("TaskInstance {} host is empty, no need to killRemoteTask", taskInstance.getName());
+ return;
+ }
+ ITaskInstanceOperator taskInstanceOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), ITaskInstanceOperator.class);
+ TaskInstanceKillRequest taskInstanceKillRequest = new TaskInstanceKillRequest(taskInstance.getId());
+ TaskInstanceKillResponse taskInstanceKillResponse = taskInstanceOperator.killTask(taskInstanceKillRequest);
+ log.info("Kill TaskInstance {} on host {} with response {}", taskInstance.getName(), taskInstance.getHost(),
+ taskInstanceKillResponse);
+ }
+
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableOperator.java
similarity index 89%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskOperator.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableOperator.java
index 6667b364e1..d270103da1 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskOperator.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableOperator.java
@@ -19,8 +19,8 @@ package org.apache.dolphinscheduler.server.master.runner.operator;
import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnable;
-public interface TaskOperator {
+public interface TaskExecuteRunnableOperator {
- void handle(DefaultTaskExecuteRunnable taskExecuteRunnable);
+ void operate(DefaultTaskExecuteRunnable taskExecuteRunnable);
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableOperatorManager.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableOperatorManager.java
new file mode 100644
index 0000000000..b217aff866
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableOperatorManager.java
@@ -0,0 +1,81 @@
+/*
+ * 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.runner.operator;
+
+import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnable;
+import org.apache.dolphinscheduler.server.master.utils.TaskUtils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TaskExecuteRunnableOperatorManager {
+
+ @Autowired
+ private TaskExecuteRunnableKillOperator taskKillOperator;
+
+ @Autowired
+ private LogicTaskExecuteRunnableKillOperator logicTaskKillOperator;
+
+ @Autowired
+ private TaskExecuteRunnablePauseOperator taskPauseOperator;
+
+ @Autowired
+ private LogicTaskExecuteRunnablePauseOperator logicTaskPauseOperator;
+
+ @Autowired
+ private TaskExecuteRunnableDispatchOperator taskDispatchOperator;
+
+ @Autowired
+ private LogicTaskExecuteRunnableDispatchOperator logicTaskDispatchOperator;
+
+ @Autowired
+ private TaskExecuteRunnableTimeoutOperator taskTimeoutOperator;
+
+ @Autowired
+ private LogicTaskExecuteRunnableTimeoutOperator logicTaskTimeoutOperator;
+
+ public TaskExecuteRunnableOperator getTaskKillOperator(DefaultTaskExecuteRunnable defaultTaskExecuteRunnable) {
+ if (TaskUtils.isMasterTask(defaultTaskExecuteRunnable.getTaskInstance().getTaskType())) {
+ return logicTaskKillOperator;
+ }
+ return taskKillOperator;
+ }
+
+ public TaskExecuteRunnableOperator getTaskPauseOperator(DefaultTaskExecuteRunnable defaultTaskExecuteRunnable) {
+ if (TaskUtils.isMasterTask(defaultTaskExecuteRunnable.getTaskInstance().getTaskType())) {
+ return logicTaskPauseOperator;
+ }
+ return taskPauseOperator;
+ }
+
+ public TaskExecuteRunnableOperator getTaskDispatchOperator(DefaultTaskExecuteRunnable defaultTaskExecuteRunnable) {
+ if (TaskUtils.isMasterTask(defaultTaskExecuteRunnable.getTaskInstance().getTaskType())) {
+ return logicTaskDispatchOperator;
+ }
+ return taskDispatchOperator;
+ }
+
+ public TaskExecuteRunnableOperator getTaskTimeoutOperator(DefaultTaskExecuteRunnable defaultTaskExecuteRunnable) {
+ if (TaskUtils.isMasterTask(defaultTaskExecuteRunnable.getTaskInstance().getTaskType())) {
+ return logicTaskTimeoutOperator;
+ }
+ return taskTimeoutOperator;
+ }
+
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskPauseOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnablePauseOperator.java
similarity index 52%
rename from dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskPauseOperator.java
rename to dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnablePauseOperator.java
index 656e402adf..a0636b8504 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskPauseOperator.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnablePauseOperator.java
@@ -18,41 +18,42 @@
package org.apache.dolphinscheduler.server.master.runner.operator;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
-import org.apache.dolphinscheduler.remote.command.task.TaskPauseRequest;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.worker.ITaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstancePauseRequest;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstancePauseResponse;
import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnable;
import org.apache.commons.lang3.StringUtils;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Slf4j
@Component
-public class TaskPauseOperator implements TaskOperator {
-
- @Autowired
- private MasterRpcClient masterRpcClient;
+public class TaskExecuteRunnablePauseOperator implements TaskExecuteRunnableOperator {
@Override
- public void handle(DefaultTaskExecuteRunnable taskExecuteRunnable) {
+ public void operate(DefaultTaskExecuteRunnable taskExecuteRunnable) {
try {
pauseRemoteTaskInstanceInThreadPool(taskExecuteRunnable.getTaskInstance());
} catch (Exception e) {
- log.error("Pause MasterTaskExecuteRunnable failed", e);
+ log.error("Pause DefaultTaskExecuteRunnable failed", e);
}
}
- private void pauseRemoteTaskInstanceInThreadPool(TaskInstance taskInstance) throws RemotingException {
+ private void pauseRemoteTaskInstanceInThreadPool(TaskInstance taskInstance) {
if (StringUtils.isEmpty(taskInstance.getHost())) {
- log.info("The task instance: {}'s host is null", taskInstance.getName());
+ log.info("The TaskInstance: {} host is null, no need to pauseRemoteTaskInstance", taskInstance.getName());
return;
}
- masterRpcClient.send(Host.of(taskInstance.getHost()),
- new TaskPauseRequest(taskInstance.getId()).convert2Command());
+ final ITaskInstanceOperator taskInstanceOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), ITaskInstanceOperator.class);
+ final TaskInstancePauseRequest taskInstancePauseRequest = new TaskInstancePauseRequest(taskInstance.getId());
+ final TaskInstancePauseResponse taskInstancePauseResponse =
+ taskInstanceOperator.pauseTask(taskInstancePauseRequest);
+ log.info("Pause TaskInstance: {} on host: {} with response: {}", taskInstance.getName(), taskInstance.getHost(),
+ taskInstancePauseResponse);
}
}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableTimeoutOperator.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableTimeoutOperator.java
new file mode 100644
index 0000000000..7154f5fa62
--- /dev/null
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/operator/TaskExecuteRunnableTimeoutOperator.java
@@ -0,0 +1,57 @@
+/*
+ * 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.runner.operator;
+
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.worker.ITaskInstanceOperator;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceKillRequest;
+import org.apache.dolphinscheduler.extract.worker.transportor.TaskInstanceKillResponse;
+
+import org.apache.commons.lang3.StringUtils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class TaskExecuteRunnableTimeoutOperator extends BaseTaskExecuteRunnableTimeoutOperator {
+
+ public TaskExecuteRunnableTimeoutOperator(TaskInstanceDao taskInstanceDao) {
+ super(taskInstanceDao);
+ }
+
+ @Override
+ protected void killRemoteTaskInstanceInThreadPool(TaskInstance taskInstance) {
+ if (StringUtils.isEmpty(taskInstance.getHost())) {
+ log.info("TaskInstance {} host is empty, no need to killRemoteTask", taskInstance.getName());
+ return;
+ }
+
+ final ITaskInstanceOperator iTaskInstanceOperator = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), ITaskInstanceOperator.class);
+
+ final TaskInstanceKillRequest taskInstanceKillRequest = new TaskInstanceKillRequest(taskInstance.getId());
+ final TaskInstanceKillResponse taskInstanceKillResponse =
+ iTaskInstanceOperator.killTask(taskInstanceKillRequest);
+ log.info("Timeout kill TaskInstance {} in host {} with response {}", taskInstance.getName(),
+ taskInstance.getHost(), taskInstanceKillResponse);
+ }
+}
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTask.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTask.java
index 453446fda2..25b53c8d6d 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTask.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTask.java
@@ -30,16 +30,15 @@ import org.apache.dolphinscheduler.dao.mapper.CommandMapper;
import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
import org.apache.dolphinscheduler.dao.repository.ProcessInstanceDao;
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
+import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory;
+import org.apache.dolphinscheduler.extract.master.ITaskInstanceExecutionEventListener;
+import org.apache.dolphinscheduler.extract.master.transportor.WorkflowInstanceStateChangeEvent;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
import org.apache.dolphinscheduler.plugin.task.api.model.DynamicInputParameter;
import org.apache.dolphinscheduler.plugin.task.api.model.Property;
import org.apache.dolphinscheduler.plugin.task.api.parameters.DynamicParameters;
import org.apache.dolphinscheduler.plugin.task.api.utils.ParameterUtils;
-import org.apache.dolphinscheduler.remote.command.workflow.WorkflowStateEventChangeRequest;
-import org.apache.dolphinscheduler.remote.exceptions.RemotingException;
-import org.apache.dolphinscheduler.remote.utils.Host;
import org.apache.dolphinscheduler.server.master.exception.MasterTaskExecuteException;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.execute.AsyncTaskExecuteFunction;
import org.apache.dolphinscheduler.server.master.runner.task.BaseAsyncLogicTask;
import org.apache.dolphinscheduler.service.process.ProcessService;
@@ -78,8 +77,6 @@ public class DynamicLogicTask extends BaseAsyncLogicTask {
private TaskInstance taskInstance;
- private final MasterRpcClient masterRpcClient;
-
private boolean haveBeenCanceled = false;
public DynamicLogicTask(TaskExecutionContext taskExecutionContext,
@@ -87,7 +84,6 @@ public class DynamicLogicTask extends BaseAsyncLogicTask {
TaskInstanceDao taskInstanceDao,
SubWorkflowService subWorkflowService,
ProcessService processService,
- MasterRpcClient masterRpcClient,
ProcessDefinitionMapper processDefineMapper,
CommandMapper commandMapper) {
super(taskExecutionContext,
@@ -96,7 +92,6 @@ public class DynamicLogicTask extends BaseAsyncLogicTask {
this.processInstanceDao = processInstanceDao;
this.subWorkflowService = subWorkflowService;
this.processService = processService;
- this.masterRpcClient = masterRpcClient;
this.processDefineMapper = processDefineMapper;
this.commandMapper = commandMapper;
@@ -280,7 +275,7 @@ public class DynamicLogicTask extends BaseAsyncLogicTask {
sendToSubProcess(taskExecutionContext, subProcessInstance);
log.info("Success send [{}] request to SubWorkflow's master: {}", stopStatus,
subProcessInstance.getHost());
- } catch (RemotingException e) {
+ } catch (Exception e) {
throw new MasterTaskExecuteException(
String.format("Send stop request to SubWorkflow's master: %s failed",
subProcessInstance.getHost()),
@@ -289,16 +284,17 @@ public class DynamicLogicTask extends BaseAsyncLogicTask {
}
}
- private void sendToSubProcess(TaskExecutionContext taskExecutionContext,
- ProcessInstance subProcessInstance) throws RemotingException {
- WorkflowStateEventChangeRequest stateEventChangeCommand = new WorkflowStateEventChangeRequest(
+ private void sendToSubProcess(TaskExecutionContext taskExecutionContext, ProcessInstance subProcessInstance) {
+ final ITaskInstanceExecutionEventListener iTaskInstanceExecutionEventListener =
+ SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(subProcessInstance.getHost(), ITaskInstanceExecutionEventListener.class);
+ final WorkflowInstanceStateChangeEvent workflowInstanceStateChangeEvent = new WorkflowInstanceStateChangeEvent(
taskExecutionContext.getProcessInstanceId(),
taskExecutionContext.getTaskInstanceId(),
subProcessInstance.getState(),
subProcessInstance.getId(),
0);
- Host host = new Host(subProcessInstance.getHost());
- masterRpcClient.send(host, stateEventChangeCommand.convert2Command());
+ iTaskInstanceExecutionEventListener.onWorkflowInstanceInstanceStateChange(workflowInstanceStateChangeEvent);
}
public boolean isCancel() {
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTaskPluginFactory.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTaskPluginFactory.java
index cbcc50ada6..caca32d431 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTaskPluginFactory.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTaskPluginFactory.java
@@ -22,7 +22,6 @@ import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
import org.apache.dolphinscheduler.dao.repository.ProcessInstanceDao;
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.task.ILogicTaskPluginFactory;
import org.apache.dolphinscheduler.service.process.ProcessService;
import org.apache.dolphinscheduler.service.subworkflow.SubWorkflowService;
@@ -54,14 +53,11 @@ public class DynamicLogicTaskPluginFactory implements ILogicTaskPluginFactory() {
}));
this.processInstanceExecCacheManager = processInstanceExecCacheManager;
this.processInstanceDao = processInstanceDao;
- this.masterRpcClient = masterRpcClient;
}
@Override
@@ -95,7 +91,7 @@ public class SubWorkflowLogicTask extends BaseAsyncLogicTask processInstanceCacheMap = new HashMap<>();
for (TaskInstance taskInstance : needFailoverTaskInstanceList) {
- try (
- final LogUtils.MDCAutoClosableContext mdcAutoClosableContext =
- LogUtils.setWorkflowAndTaskInstanceIDMDC(taskInstance.getProcessInstanceId(),
- taskInstance.getId())) {
- try {
- ProcessInstance processInstance = processInstanceCacheMap.computeIfAbsent(
- taskInstance.getProcessInstanceId(), k -> {
- WorkflowExecuteRunnable workflowExecuteRunnable = cacheManager.getByProcessInstanceId(
- taskInstance.getProcessInstanceId());
- if (workflowExecuteRunnable == null) {
- return null;
- }
- return workflowExecuteRunnable.getWorkflowExecuteContext()
- .getWorkflowInstance();
- });
- if (!checkTaskInstanceNeedFailover(needFailoverWorkerStartTime, processInstance, taskInstance)) {
- log.info("Worker[{}] the current taskInstance doesn't need to failover", workerHost);
- continue;
- }
- log.info(
- "Worker[{}] failover: begin to failover taskInstance, will set the status to NEED_FAULT_TOLERANCE",
- workerHost);
- failoverTaskInstance(processInstance, taskInstance);
- log.info("Worker[{}] failover: Finish failover taskInstance", workerHost);
- } catch (Exception ex) {
- log.info("Worker[{}] failover taskInstance occur exception", workerHost, ex);
+ try {
+ LogUtils.setWorkflowAndTaskInstanceIDMDC(taskInstance.getProcessInstanceId(), taskInstance.getId());
+ ProcessInstance processInstance = processInstanceCacheMap.computeIfAbsent(
+ taskInstance.getProcessInstanceId(), k -> {
+ WorkflowExecuteRunnable workflowExecuteRunnable = cacheManager.getByProcessInstanceId(
+ taskInstance.getProcessInstanceId());
+ if (workflowExecuteRunnable == null) {
+ return null;
+ }
+ return workflowExecuteRunnable.getWorkflowExecuteContext()
+ .getWorkflowInstance();
+ });
+ if (!checkTaskInstanceNeedFailover(needFailoverWorkerStartTime, processInstance, taskInstance)) {
+ log.info("Worker[{}] the current taskInstance doesn't need to failover", workerHost);
+ continue;
}
+ log.info(
+ "Worker[{}] failover: begin to failover taskInstance, will set the status to NEED_FAULT_TOLERANCE",
+ workerHost);
+ failoverTaskInstance(processInstance, taskInstance);
+ log.info("Worker[{}] failover: Finish failover taskInstance", workerHost);
+ } catch (Exception ex) {
+ log.info("Worker[{}] failover taskInstance occur exception", workerHost, ex);
+ } finally {
+ LogUtils.removeWorkflowAndTaskInstanceIdMDC();
}
}
failoverTimeCost.stop();
@@ -170,19 +168,7 @@ public class WorkerFailoverService {
taskInstance.setProcessInstance(processInstance);
if (!TaskUtils.isMasterTask(taskInstance.getTaskType())) {
- log.info("The failover taskInstance is not master task");
- TaskExecutionContext taskExecutionContext = TaskExecutionContextBuilder.get()
- .buildWorkflowInstanceHost(masterConfig.getMasterAddress())
- .buildTaskInstanceRelatedInfo(taskInstance)
- .buildProcessInstanceRelatedInfo(processInstance)
- .buildProcessDefinitionRelatedInfo(processInstance.getProcessDefinition())
- .create();
-
- if (masterConfig.isKillApplicationWhenTaskFailover()) {
- // only kill yarn/k8s job if exists , the local thread has exited
- log.info("TaskInstance failover begin kill the task related yarn or k8s job");
- ProcessUtils.killApplication(logClient, taskExecutionContext);
- }
+ killYarnTask(taskInstance, processInstance);
} else {
log.info("The failover taskInstance is a master task, no need to failover in worker failover");
}
@@ -271,4 +257,30 @@ public class WorkerFailoverService {
}
return Optional.ofNullable(serverStartupTime);
}
+
+ private void killYarnTask(TaskInstance taskInstance, ProcessInstance processInstance) {
+ try {
+ if (!masterConfig.isKillApplicationWhenTaskFailover()) {
+ return;
+ }
+ if (StringUtils.isEmpty(taskInstance.getHost()) || StringUtils.isEmpty(taskInstance.getLogPath())) {
+ return;
+ }
+ TaskExecutionContext taskExecutionContext = TaskExecutionContextBuilder.get()
+ .buildWorkflowInstanceHost(masterConfig.getMasterAddress())
+ .buildTaskInstanceRelatedInfo(taskInstance)
+ .buildProcessInstanceRelatedInfo(processInstance)
+ .buildProcessDefinitionRelatedInfo(processInstance.getProcessDefinition())
+ .create();
+ // only kill yarn/k8s job if exists , the local thread has exited
+ log.info("TaskInstance failover begin kill the task related yarn or k8s job");
+ IWorkerLogService iWorkerLogService = SingletonJdkDynamicRpcClientProxyFactory.getInstance()
+ .getProxyClient(taskInstance.getHost(), IWorkerLogService.class);
+ GetAppIdResponse getAppIdResponse =
+ iWorkerLogService.getAppId(new GetAppIdRequest(taskInstance.getId(), taskInstance.getLogPath()));
+ ProcessUtils.killApplication(getAppIdResponse.getAppIds(), taskExecutionContext);
+ } catch (Exception ex) {
+ log.error("Kill yarn task error", ex);
+ }
+ }
}
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
deleted file mode 100644
index 9588c7f914..0000000000
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutionContextTestUtils.java
+++ /dev/null
@@ -1,63 +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.server.master.dispatch;
-
-import org.apache.dolphinscheduler.common.enums.CommandType;
-import org.apache.dolphinscheduler.common.utils.NetUtils;
-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.Message;
-import org.apache.dolphinscheduler.remote.command.task.TaskDispatchRequest;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.server.master.builder.TaskExecutionContextBuilder;
-import org.apache.dolphinscheduler.server.master.dispatch.context.ExecutionContext;
-import org.apache.dolphinscheduler.server.master.dispatch.enums.ExecutorType;
-
-import org.mockito.Mockito;
-
-/**
- * for test use only
- */
-public class ExecutionContextTestUtils {
-
- public static ExecutionContext getExecutionContext(int port) {
- TaskInstance taskInstance = Mockito.mock(TaskInstance.class);
- ProcessDefinition processDefinition = Mockito.mock(ProcessDefinition.class);
- processDefinition.setId(0);
- ProcessInstance processInstance = new ProcessInstance();
- processInstance.setId(0);
- processInstance.setCommandType(CommandType.COMPLEMENT_DATA);
- taskInstance.setProcessInstance(processInstance);
- TaskExecutionContext context = TaskExecutionContextBuilder.get()
- .buildWorkflowInstanceHost("127.0.0.1:5678")
- .buildTaskInstanceRelatedInfo(taskInstance)
- .buildProcessInstanceRelatedInfo(processInstance)
- .buildProcessDefinitionRelatedInfo(processDefinition)
- .create();
-
- TaskDispatchRequest requestCommand = new TaskDispatchRequest(context);
- Message message = requestCommand.convert2Command();
-
- 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/executor/NettyExecutorManagerTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManagerTest.java
deleted file mode 100644
index de971d487e..0000000000
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/executor/NettyExecutorManagerTest.java
+++ /dev/null
@@ -1,100 +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.server.master.dispatch.executor;
-
-import org.apache.dolphinscheduler.common.enums.CommandType;
-import org.apache.dolphinscheduler.common.utils.NetUtils;
-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.NettyRemotingServer;
-import org.apache.dolphinscheduler.remote.command.Message;
-import org.apache.dolphinscheduler.remote.command.task.TaskDispatchRequest;
-import org.apache.dolphinscheduler.remote.config.NettyServerConfig;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.server.master.builder.TaskExecutionContextBuilder;
-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.worker.processor.WorkerTaskDispatchProcessor;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mockito;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
-
-/**
- * netty executor manager test
- */
-@ExtendWith(SpringExtension.class)
-@Disabled
-public class NettyExecutorManagerTest {
-
- @Autowired
- private NettyExecutorManager nettyExecutorManager;
- @Test
- public void testExecute() throws ExecuteException {
- final NettyServerConfig serverConfig = new NettyServerConfig();
- serverConfig.setListenPort(30000);
- NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(serverConfig);
- nettyRemotingServer.registerProcessor(new WorkerTaskDispatchProcessor());
- nettyRemotingServer.start();
- TaskInstance taskInstance = Mockito.mock(TaskInstance.class);
- ProcessDefinition processDefinition = Mockito.mock(ProcessDefinition.class);
- ProcessInstance processInstance = new ProcessInstance();
- processInstance.setCommandType(CommandType.COMPLEMENT_DATA);
- taskInstance.setProcessInstance(processInstance);
- TaskExecutionContext context = TaskExecutionContextBuilder.get()
- .buildTaskInstanceRelatedInfo(taskInstance)
- .buildProcessInstanceRelatedInfo(processInstance)
- .buildProcessDefinitionRelatedInfo(processDefinition)
- .create();
- ExecutionContext executionContext = new ExecutionContext(toCommand(context), ExecutorType.WORKER, taskInstance);
- executionContext.setHost(Host.of(NetUtils.getAddr(serverConfig.getListenPort())));
- Assertions.assertDoesNotThrow(() -> nettyExecutorManager.execute(executionContext));
- nettyRemotingServer.close();
- }
-
- @Test
- public void testExecuteWithException() {
- TaskInstance taskInstance = Mockito.mock(TaskInstance.class);
- ProcessDefinition processDefinition = Mockito.mock(ProcessDefinition.class);
- ProcessInstance processInstance = new ProcessInstance();
- processInstance.setCommandType(CommandType.COMPLEMENT_DATA);
- taskInstance.setProcessInstance(processInstance);
- TaskExecutionContext context = TaskExecutionContextBuilder.get()
- .buildTaskInstanceRelatedInfo(taskInstance)
- .buildProcessInstanceRelatedInfo(processInstance)
- .buildProcessDefinitionRelatedInfo(processDefinition)
- .create();
- ExecutionContext executionContext = new ExecutionContext(toCommand(context), ExecutorType.WORKER, taskInstance);
- executionContext.setHost(Host.of(NetUtils.getAddr(4444)));
- Assertions.assertThrows(ExecuteException.class, () -> {
- nettyExecutorManager.execute(executionContext);
- });
-
- }
- private Message toCommand(TaskExecutionContext taskExecutionContext) {
- TaskDispatchRequest requestCommand = new TaskDispatchRequest(taskExecutionContext);
- return requestCommand.convert2Command();
- }
-}
diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/host/RoundRobinHostManagerTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/host/RoundRobinHostManagerTest.java
deleted file mode 100644
index 042fda90f4..0000000000
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/dispatch/host/RoundRobinHostManagerTest.java
+++ /dev/null
@@ -1,69 +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.server.master.dispatch.host;
-
-import org.apache.dolphinscheduler.common.model.WorkerHeartBeat;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.server.master.dispatch.ExecutionContextTestUtils;
-import org.apache.dolphinscheduler.server.master.dispatch.context.ExecutionContext;
-import org.apache.dolphinscheduler.server.master.dispatch.exceptions.WorkerGroupNotFoundException;
-import org.apache.dolphinscheduler.server.master.registry.ServerNodeManager;
-
-import java.util.Optional;
-
-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 com.google.common.collect.Sets;
-
-/**
- * round robin host manager test
- */
-@ExtendWith(MockitoExtension.class)
-public class RoundRobinHostManagerTest {
-
- @Mock
- private ServerNodeManager serverNodeManager;
-
- @InjectMocks
- RoundRobinHostManager roundRobinHostManager;
-
- @Test
- public void testSelectWithEmptyResult() throws WorkerGroupNotFoundException {
- Mockito.when(serverNodeManager.getWorkerGroupNodes("default")).thenReturn(null);
- ExecutionContext context = ExecutionContextTestUtils.getExecutionContext(10000);
- Optional emptyHost = roundRobinHostManager.select(context.getWorkerGroup());
- Assertions.assertFalse(emptyHost.isPresent());
- }
-
- @Test
- public void testSelectWithResult() throws WorkerGroupNotFoundException {
- Mockito.when(serverNodeManager.getWorkerGroupNodes("default")).thenReturn(Sets.newHashSet("192.168.1.1:22"));
- Mockito.when(serverNodeManager.getWorkerNodeInfo("192.168.1.1:22"))
- .thenReturn(Optional.of(new WorkerHeartBeat()));
- ExecutionContext context = ExecutionContextTestUtils.getExecutionContext(10000);
- Optional host = roundRobinHostManager.select(context.getWorkerGroup());
- Assertions.assertTrue(host.isPresent());
- Assertions.assertTrue(host.get().getAddress().equalsIgnoreCase("192.168.1.1:22"));
- }
-}
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
deleted file mode 100644
index cf44b66ed7..0000000000
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/CacheProcessorTest.java
+++ /dev/null
@@ -1,69 +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.server.master.processor;
-
-import org.apache.dolphinscheduler.common.enums.CacheType;
-import org.apache.dolphinscheduler.dao.entity.Tenant;
-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;
-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 org.springframework.cache.Cache;
-import org.springframework.cache.CacheManager;
-
-import io.netty.channel.Channel;
-
-/**
- * task ack processor test
- */
-@ExtendWith(MockitoExtension.class)
-public class CacheProcessorTest {
-
- @InjectMocks
- private CacheProcessor cacheProcessor = new CacheProcessor();
-
- @Mock
- private Channel channel;
-
- @Mock
- private CacheManager cacheManager;
-
- @Mock
- private Cache cache;
-
- @BeforeEach
- public void before() {
- Mockito.when(cacheManager.getCache(CacheType.TENANT.getCacheName())).thenReturn(cache);
- }
-
- @Test
- public void testProcess() {
- Tenant tenant = new Tenant();
- tenant.setId(1);
- CacheExpireRequest cacheExpireRequest = new CacheExpireRequest(CacheType.TENANT, "1");
- Message message = cacheExpireRequest.convert2Command();
-
- 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
deleted file mode 100644
index f5eaa4424d..0000000000
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/TaskAckProcessorTest.java
+++ /dev/null
@@ -1,89 +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.server.master.processor;
-
-import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
-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;
-import org.apache.dolphinscheduler.service.process.ProcessService;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.MockedStatic;
-import org.mockito.Mockito;
-import org.mockito.junit.jupiter.MockitoExtension;
-
-import io.netty.channel.Channel;
-
-/**
- * task ack processor test
- */
-@ExtendWith(MockitoExtension.class)
-public class TaskAckProcessorTest {
-
- private TaskExecuteRunningProcessor taskExecuteRunningProcessor;
- private TaskEventService taskEventService;
- private ProcessService processService;
- private TaskExecuteRunningMessage taskExecuteRunningMessage;
- private TaskEvent taskResponseEvent;
- private Channel channel;
-
- private MockedStatic mockedStaticSpringApplicationContext;
-
- @BeforeEach
- public void before() {
- mockedStaticSpringApplicationContext = Mockito.mockStatic(SpringApplicationContext.class);
-
- taskEventService = Mockito.mock(TaskEventService.class);
- mockedStaticSpringApplicationContext.when(() -> SpringApplicationContext.getBean(TaskEventService.class))
- .thenReturn(taskEventService);
-
- processService = Mockito.mock(ProcessService.class);
- mockedStaticSpringApplicationContext.when(() -> SpringApplicationContext.getBean(ProcessService.class))
- .thenReturn(processService);
-
- taskExecuteRunningProcessor = new TaskExecuteRunningProcessor();
-
- channel = Mockito.mock(Channel.class);
- taskResponseEvent = Mockito.mock(TaskEvent.class);
-
- taskExecuteRunningMessage = new TaskExecuteRunningMessage("127.0.0.1:5678",
- " 127.0.0.1:1234",
- System.currentTimeMillis());
- taskExecuteRunningMessage.setStatus(TaskExecutionStatus.RUNNING_EXECUTION);
- taskExecuteRunningMessage.setExecutePath("/dolphinscheduler/worker");
- taskExecuteRunningMessage.setHost("localhost");
- taskExecuteRunningMessage.setLogPath("/temp/worker.log");
- taskExecuteRunningMessage.setStartTime(System.currentTimeMillis());
- taskExecuteRunningMessage.setTaskInstanceId(1);
- taskExecuteRunningMessage.setProcessInstanceId(1);
- }
-
- @AfterEach
- public void after() {
- mockedStaticSpringApplicationContext.close();
- }
-
- @Test
- public void testProcess() {
- }
-}
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
deleted file mode 100644
index b3280885a1..0000000000
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/TaskKillResponseProcessorTest.java
+++ /dev/null
@@ -1,70 +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.server.master.processor;
-
-import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
-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;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
-
-import io.netty.channel.Channel;
-
-/**
- * task response processor test
- */
-public class TaskKillResponseProcessorTest {
-
- private TaskKillResponseProcessor taskKillResponseProcessor;
-
- private TaskKillResponse taskKillResponse;
-
- private Channel channel;
-
- @BeforeEach
- public void before() {
- taskKillResponseProcessor = new TaskKillResponseProcessor();
- channel = Mockito.mock(Channel.class);
- taskKillResponse = new TaskKillResponse();
- taskKillResponse.setAppIds(
- new ArrayList() {
-
- {
- add("task_1");
- }
- });
- taskKillResponse.setHost("localhost");
- taskKillResponse.setProcessId(1);
- taskKillResponse.setStatus(TaskExecutionStatus.RUNNING_EXECUTION);
- taskKillResponse.setTaskInstanceId(1);
-
- }
-
- @Test
- public void testProcess() {
- Message message = taskKillResponse.convert2Command(1);
- Assertions.assertEquals(MessageType.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
deleted file mode 100644
index 92031ee824..0000000000
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseServiceTest.java
+++ /dev/null
@@ -1,120 +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.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.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;
-import org.apache.dolphinscheduler.service.process.ProcessService;
-
-import org.junit.jupiter.api.AfterEach;
-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.junit.jupiter.MockitoExtension;
-
-import io.netty.channel.Channel;
-
-@ExtendWith(MockitoExtension.class)
-public class TaskResponseServiceTest {
-
- @Mock(name = "processService")
- private ProcessService processService;
-
- @InjectMocks
- TaskEventService taskEventService;
-
- @Mock
- private Channel channel;
-
- private TaskEvent ackEvent;
-
- private TaskEvent resultEvent;
-
- private TaskInstance taskInstance;
-
- @Mock
- private ProcessInstanceExecCacheManagerImpl processInstanceExecCacheManager;
-
- @Mock
- private DataQualityResultOperator dataQualityResultOperator;
-
- @Mock
- private WorkflowExecuteThreadPool workflowExecuteThreadPool;
-
- @Mock
- private TaskExecuteThreadPool taskExecuteThreadPool;
-
- @BeforeEach
- public void before() {
- taskEventService.start();
-
- TaskExecuteRunningMessage taskExecuteRunningMessage = new TaskExecuteRunningMessage("127.0.0.1:5678",
- "127.0.0.1:1234",
- System.currentTimeMillis());
- taskExecuteRunningMessage.setProcessId(1);
- taskExecuteRunningMessage.setTaskInstanceId(22);
- taskExecuteRunningMessage.setStatus(TaskExecutionStatus.RUNNING_EXECUTION);
- taskExecuteRunningMessage.setExecutePath("path");
- taskExecuteRunningMessage.setLogPath("logPath");
- taskExecuteRunningMessage.setHost("127.*.*.*");
- taskExecuteRunningMessage.setStartTime(System.currentTimeMillis());
-
- ackEvent = TaskEvent.newRunningEvent(taskExecuteRunningMessage,
- channel,
- taskExecuteRunningMessage.getMessageSenderAddress());
-
- TaskExecuteResultMessage taskExecuteResultMessage = new TaskExecuteResultMessage(NetUtils.getAddr(1234),
- NetUtils.getAddr(5678),
- System.currentTimeMillis());
- taskExecuteResultMessage.setProcessInstanceId(1);
- taskExecuteResultMessage.setTaskInstanceId(22);
- taskExecuteResultMessage.setStatus(TaskExecutionStatus.SUCCESS.getCode());
- taskExecuteResultMessage.setEndTime(System.currentTimeMillis());
- taskExecuteResultMessage.setVarPool("varPol");
- taskExecuteResultMessage.setAppIds("ids");
- taskExecuteResultMessage.setProcessId(1);
- resultEvent = TaskEvent.newResultEvent(taskExecuteResultMessage,
- channel,
- taskExecuteResultMessage.getMessageSenderAddress());
-
- taskInstance = new TaskInstance();
- taskInstance.setId(22);
- taskInstance.setState(TaskExecutionStatus.RUNNING_EXECUTION);
- }
-
- @Test
- public void testAddResponse() {
- taskEventService.addEvent(ackEvent);
- taskEventService.addEvent(resultEvent);
- }
-
- @AfterEach
- public void after() {
- if (taskEventService != null) {
- taskEventService.stop();
- }
- }
-}
diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnableTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnableTest.java
index 3aff6d65e8..da96be2066 100644
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnableTest.java
+++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnableTest.java
@@ -37,7 +37,6 @@ import org.apache.dolphinscheduler.dao.repository.TaskDefinitionLogDao;
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.graph.IWorkflowGraph;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnableFactory;
import org.apache.dolphinscheduler.service.alert.ProcessAlertManager;
import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
@@ -127,7 +126,6 @@ public class WorkflowExecuteRunnableTest {
stateWheelExecuteThread = Mockito.mock(StateWheelExecuteThread.class);
curingGlobalParamsService = Mockito.mock(CuringParamsService.class);
- MasterRpcClient masterRpcClient = Mockito.mock(MasterRpcClient.class);
ProcessAlertManager processAlertManager = Mockito.mock(ProcessAlertManager.class);
WorkflowExecuteContext workflowExecuteContext = Mockito.mock(WorkflowExecuteContext.class);
Mockito.when(workflowExecuteContext.getWorkflowInstance()).thenReturn(processInstance);
@@ -141,7 +139,6 @@ public class WorkflowExecuteRunnableTest {
commandService,
processService,
processInstanceDao,
- masterRpcClient,
processAlertManager,
config,
stateWheelExecuteThread,
diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/MasterTaskDispatcherTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/MasterTaskDispatcherTest.java
index a4f169c63b..c9710209e5 100644
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/MasterTaskDispatcherTest.java
+++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/MasterTaskDispatcherTest.java
@@ -17,10 +17,9 @@
package org.apache.dolphinscheduler.server.master.runner.dispatcher;
-import org.apache.dolphinscheduler.remote.utils.Host;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.execute.TaskExecuteRunnable;
import org.junit.jupiter.api.Assertions;
@@ -37,11 +36,10 @@ public class MasterTaskDispatcherTest {
TaskEventService taskEventService = Mockito.mock(TaskEventService.class);
MasterConfig masterConfig = Mockito.mock(MasterConfig.class);
Mockito.when(masterConfig.getMasterAddress()).thenReturn("localhost:5678");
- MasterRpcClient masterRpcClient = Mockito.mock(MasterRpcClient.class);
TaskExecuteRunnable taskExecuteRunnable = Mockito.mock(TaskExecuteRunnable.class);
MasterTaskDispatcher masterTaskDispatcher =
- new MasterTaskDispatcher(taskEventService, masterConfig, masterRpcClient);
+ new MasterTaskDispatcher(taskEventService, masterConfig);
Host taskInstanceDispatchHost = masterTaskDispatcher.getTaskInstanceDispatchHost(taskExecuteRunnable)
.orElseThrow(() -> new IllegalArgumentException("Cannot get the "));
Assertions.assertEquals(masterConfig.getMasterAddress(), taskInstanceDispatchHost.getAddress());
diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/WorkerTaskDispatcherTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/WorkerTaskDispatcherTest.java
index b1b5e308ab..9b447aada3 100644
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/WorkerTaskDispatcherTest.java
+++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/dispatcher/WorkerTaskDispatcherTest.java
@@ -17,13 +17,12 @@
package org.apache.dolphinscheduler.server.master.runner.dispatcher;
+import org.apache.dolphinscheduler.extract.base.utils.Host;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
-import org.apache.dolphinscheduler.remote.utils.Host;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.dispatch.exceptions.WorkerGroupNotFoundException;
import org.apache.dolphinscheduler.server.master.dispatch.host.HostManager;
import org.apache.dolphinscheduler.server.master.processor.queue.TaskEventService;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.server.master.runner.execute.TaskExecuteRunnable;
import java.util.Optional;
@@ -41,11 +40,10 @@ public class WorkerTaskDispatcherTest {
public void getTaskInstanceDispatchHost() throws WorkerGroupNotFoundException {
TaskEventService taskEventService = Mockito.mock(TaskEventService.class);
MasterConfig masterConfig = Mockito.mock(MasterConfig.class);
- MasterRpcClient masterRpcClient = Mockito.mock(MasterRpcClient.class);
HostManager hostManager = Mockito.mock(HostManager.class);
Mockito.when(hostManager.select(Mockito.any())).thenReturn(Optional.of(Host.of("localhost:1234")));
WorkerTaskDispatcher workerTaskDispatcher =
- new WorkerTaskDispatcher(taskEventService, masterConfig, masterRpcClient, hostManager);
+ new WorkerTaskDispatcher(taskEventService, masterConfig, hostManager);
TaskExecuteRunnable taskExecuteRunnable = Mockito.mock(TaskExecuteRunnable.class);
Mockito.when(taskExecuteRunnable.getTaskExecutionContext()).thenReturn(new TaskExecutionContext());
diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/execute/PriorityTaskExecuteRunnableTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/execute/PriorityTaskExecuteRunnableTest.java
index 979a467148..3a3a80b3ca 100644
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/execute/PriorityTaskExecuteRunnableTest.java
+++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/execute/PriorityTaskExecuteRunnableTest.java
@@ -21,7 +21,7 @@ import org.apache.dolphinscheduler.common.enums.Priority;
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.server.master.runner.operator.TaskOperatorManager;
+import org.apache.dolphinscheduler.server.master.runner.operator.TaskExecuteRunnableOperatorManager;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -30,7 +30,7 @@ public class PriorityTaskExecuteRunnableTest {
@Test
public void testCompareTo() {
- TaskOperatorManager taskOperatorManager = new TaskOperatorManager();
+ TaskExecuteRunnableOperatorManager taskOperatorManager = new TaskExecuteRunnableOperatorManager();
ProcessInstance workflowInstance = new ProcessInstance();
workflowInstance.setId(1);
diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTaskTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTaskTest.java
index 15fccaf9a1..a5b9f5a371 100644
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTaskTest.java
+++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/runner/task/dynamic/DynamicLogicTaskTest.java
@@ -27,7 +27,6 @@ import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
import org.apache.dolphinscheduler.plugin.task.api.model.DynamicInputParameter;
import org.apache.dolphinscheduler.plugin.task.api.parameters.DynamicParameters;
-import org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient;
import org.apache.dolphinscheduler.service.process.ProcessService;
import org.apache.dolphinscheduler.service.subworkflow.SubWorkflowService;
@@ -61,9 +60,6 @@ class DynamicLogicTaskTest {
@Mock
private ProcessService processService;
- @Mock
- private MasterRpcClient masterRpcClient;
-
@Mock
private ProcessDefinitionMapper processDefineMapper;
@@ -94,7 +90,6 @@ class DynamicLogicTaskTest {
taskInstanceDao,
subWorkflowService,
processService,
- masterRpcClient,
processDefineMapper,
commandMapper);
}
@@ -126,7 +121,6 @@ class DynamicLogicTaskTest {
taskInstanceDao,
subWorkflowService,
processService,
- masterRpcClient,
processDefineMapper,
commandMapper);
diff --git a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/service/FailoverServiceTest.java b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/service/FailoverServiceTest.java
index b84b227712..2081d2dd7a 100644
--- a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/service/FailoverServiceTest.java
+++ b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/service/FailoverServiceTest.java
@@ -40,7 +40,6 @@ import org.apache.dolphinscheduler.server.master.runner.IWorkflowExecuteContext;
import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable;
import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThreadPool;
import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
-import org.apache.dolphinscheduler.service.log.LogClient;
import org.apache.dolphinscheduler.service.process.ProcessService;
import java.util.ArrayList;
@@ -87,9 +86,6 @@ public class FailoverServiceTest {
@Mock
private ProcessInstanceExecCacheManager processInstanceExecCacheManager;
- @Mock
- private LogClient logClient;
-
private static int masterPort = 5678;
private static int workerPort = 1234;
@@ -116,7 +112,6 @@ public class FailoverServiceTest {
processService,
workflowExecuteThreadPool,
cacheManager,
- logClient,
taskInstanceDao);
failoverService = new FailoverService(masterFailoverService, workerFailoverService);
diff --git a/dolphinscheduler-microbench/pom.xml b/dolphinscheduler-microbench/pom.xml
index 59f71c50d5..aaf7065323 100644
--- a/dolphinscheduler-microbench/pom.xml
+++ b/dolphinscheduler-microbench/pom.xml
@@ -70,10 +70,6 @@
org.slf4jslf4j-api
-
- org.apache.dolphinscheduler
- dolphinscheduler-remote
-
diff --git a/dolphinscheduler-microbench/src/main/java/org/apache/dolphinscheduler/microbench/common/RpcTest.java b/dolphinscheduler-microbench/src/main/java/org/apache/dolphinscheduler/microbench/common/RpcTest.java
deleted file mode 100644
index 1f3f3213d1..0000000000
--- a/dolphinscheduler-microbench/src/main/java/org/apache/dolphinscheduler/microbench/common/RpcTest.java
+++ /dev/null
@@ -1,78 +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.microbench.common;
-
-import org.apache.dolphinscheduler.microbench.base.AbstractBaseBenchmark;
-import org.apache.dolphinscheduler.remote.config.NettyServerConfig;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.rpc.client.IRpcClient;
-import org.apache.dolphinscheduler.rpc.client.RpcClient;
-import org.apache.dolphinscheduler.rpc.remote.NettyClient;
-import org.apache.dolphinscheduler.rpc.remote.NettyServer;
-
-import java.util.concurrent.TimeUnit;
-
-import org.openjdk.jmh.annotations.Benchmark;
-import org.openjdk.jmh.annotations.BenchmarkMode;
-import org.openjdk.jmh.annotations.Measurement;
-import org.openjdk.jmh.annotations.Mode;
-import org.openjdk.jmh.annotations.OutputTimeUnit;
-import org.openjdk.jmh.annotations.Scope;
-import org.openjdk.jmh.annotations.Setup;
-import org.openjdk.jmh.annotations.State;
-import org.openjdk.jmh.annotations.TearDown;
-import org.openjdk.jmh.annotations.Warmup;
-
-@Warmup(iterations = 5, time = 1)
-@Measurement(iterations = 10, time = 1)
-@State(Scope.Benchmark)
-@BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
-public class RpcTest extends AbstractBaseBenchmark {
-
- private NettyServer nettyServer;
-
- private IUserService userService;
-
- private Host host;
- private IRpcClient rpcClient = new RpcClient();
-
- @Setup
- public void before() throws Exception {
- nettyServer = new NettyServer(new NettyServerConfig());
- IRpcClient rpcClient = new RpcClient();
- host = new Host("127.0.0.1", 12346);
- userService = rpcClient.create(IUserService.class, host);
-
- }
-
- @Benchmark
- @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
- @OutputTimeUnit(TimeUnit.MILLISECONDS)
- public void sendTest() throws Exception {
-
- userService = rpcClient.create(IUserService.class, host);
- Integer result = userService.hi(1);
- }
-
- @TearDown
- public void after() {
- NettyClient.getInstance().close();
- nettyServer.close();
- }
-
-}
diff --git a/dolphinscheduler-remote/pom.xml b/dolphinscheduler-remote/pom.xml
deleted file mode 100644
index edc8dd50be..0000000000
--- a/dolphinscheduler-remote/pom.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
- 4.0.0
-
- org.apache.dolphinscheduler
- dolphinscheduler
- dev-SNAPSHOT
-
-
- dolphinscheduler-remote
-
- dolphinscheduler-remote
-
-
-
-
- org.apache.dolphinscheduler
- dolphinscheduler-bom
- ${project.version}
- pom
- import
-
-
-
-
-
-
-
- org.apache.dolphinscheduler
- dolphinscheduler-common
-
-
- org.apache.dolphinscheduler
- dolphinscheduler-task-api
-
-
- io.netty
- netty-all
-
-
- org.slf4j
- slf4j-api
-
-
- net.bytebuddy
- byte-buddy
-
-
-
-
- io.protostuff
- protostuff-core
-
-
-
- io.protostuff
- protostuff-runtime
-
-
-
- org.reflections
- reflections
-
-
-
- com.google.guava
- guava
-
-
- org.springframework
- spring-context
-
-
-
-
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
deleted file mode 100644
index f7bb944b5e..0000000000
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/codec/NettyDecoder.java
+++ /dev/null
@@ -1,146 +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.codec;
-
-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;
-
-import lombok.extern.slf4j.Slf4j;
-import io.netty.buffer.ByteBuf;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ReplayingDecoder;
-
-/**
- * netty decoder
- */
-@Slf4j
-public class NettyDecoder extends ReplayingDecoder {
-
- public NettyDecoder() {
- super(State.MAGIC);
- }
-
- private final MessageHeader messageHeader = new MessageHeader();
-
- /**
- * decode
- *
- * @param ctx channel handler context
- * @param in byte buffer
- * @param out out content
- */
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf in, List