Browse Source

[Bug-9070][Server]fix taskExecutionContext json convert error (#9072)

* [Bug-9070][Server]fix taskExecutionContext json convert error

* test

* add license header

Co-authored-by: caishunfeng <534328519@qq.com>
3.0.0/version-upgrade
caishunfeng 3 years ago committed by GitHub
parent
commit
852597c9bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java
  2. 9
      dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/resource/AbstractResourceParameters.java
  3. 12
      dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/resource/ResourceParametersHelper.java
  4. 56
      dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/java/org/apache/dolphinscheduler/plugin/task/api/parameters/resource/AbstractResourceParametersTest.java

2
dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java

@ -168,7 +168,7 @@ public class TaskPriorityQueueConsumer extends Thread {
} }
result = dispatcher.dispatch(executionContext); result = dispatcher.dispatch(executionContext);
} catch (ExecuteException e) { } catch (RuntimeException | ExecuteException e) {
logger.error("dispatch error: {}", e.getMessage(), e); logger.error("dispatch error: {}", e.getMessage(), e);
} }
return result; return result;

9
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/resource/AbstractResourceParameters.java

@ -17,6 +17,15 @@
package org.apache.dolphinscheduler.plugin.task.api.parameters.resource; package org.apache.dolphinscheduler.plugin.task.api.parameters.resource;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
@Type(value = DataSourceParameters.class, name = "DATASOURCE"),
@Type(value = UdfFuncParameters.class, name = "UDF")
})
public abstract class AbstractResourceParameters { public abstract class AbstractResourceParameters {
} }

12
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/resource/ResourceParametersHelper.java

@ -25,23 +25,27 @@ import java.util.Objects;
public class ResourceParametersHelper { public class ResourceParametersHelper {
private Map<ResourceType, Map<Integer, AbstractResourceParameters>> map = new HashMap<>(); private Map<ResourceType, Map<Integer, AbstractResourceParameters>> resourceMap = new HashMap<>();
public void put(ResourceType resourceType, Integer id) { public void put(ResourceType resourceType, Integer id) {
put(resourceType, id, null); put(resourceType, id, null);
} }
public void put(ResourceType resourceType, Integer id, AbstractResourceParameters parameters) { public void put(ResourceType resourceType, Integer id, AbstractResourceParameters parameters) {
Map<Integer, AbstractResourceParameters> resourceParametersMap = map.get(resourceType); Map<Integer, AbstractResourceParameters> resourceParametersMap = resourceMap.get(resourceType);
if (Objects.isNull(resourceParametersMap)) { if (Objects.isNull(resourceParametersMap)) {
resourceParametersMap = new HashMap<>(); resourceParametersMap = new HashMap<>();
map.put(resourceType, resourceParametersMap); resourceMap.put(resourceType, resourceParametersMap);
} }
resourceParametersMap.put(id, parameters); resourceParametersMap.put(id, parameters);
} }
public void setResourceMap(Map<ResourceType, Map<Integer, AbstractResourceParameters>> resourceMap) {
this.resourceMap = resourceMap;
}
public Map<ResourceType, Map<Integer, AbstractResourceParameters>> getResourceMap() { public Map<ResourceType, Map<Integer, AbstractResourceParameters>> getResourceMap() {
return map; return resourceMap;
} }
public Map<Integer, AbstractResourceParameters> getResourceMap(ResourceType resourceType) { public Map<Integer, AbstractResourceParameters> getResourceMap(ResourceType resourceType) {

56
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/java/org/apache/dolphinscheduler/plugin/task/api/parameters/resource/AbstractResourceParametersTest.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.plugin.task.api.parameters.resource;
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
import org.apache.dolphinscheduler.plugin.task.api.parameters.SqlParameters;
import org.apache.dolphinscheduler.spi.enums.DbType;
import org.apache.dolphinscheduler.spi.utils.JSONUtils;
import org.junit.Assert;
import org.junit.Test;
public class AbstractResourceParametersTest {
@Test
public void testDataSource() {
TaskExecutionContext taskExecutionContext = new TaskExecutionContext();
String taskParam = "{\"localParams\":[],\"resourceList\":[],\"type\":\"MYSQL\",\"datasource\":\"1\",\"sql\":\"select now();\",\"sqlType\":\"0\",\"preStatements\":[],\"postStatements\":[],\"conditionResult\":\"null\",\"dependence\":\"null\",\"switchResult\":\"null\",\"waitStartTimeout\":null}";
ResourceParametersHelper resourceParametersHelper = JSONUtils.parseObject(taskParam, SqlParameters.class).getResources();
resourceParametersHelper.getResourceMap().forEach((type, map) -> {
map.forEach((code, parameters) -> {
DataSourceParameters dataSourceParameters = new DataSourceParameters();
dataSourceParameters.setType(DbType.MYSQL);
dataSourceParameters.setConnectionParams("127.0.0.1:3306");
map.put(code, dataSourceParameters);
});
});
taskExecutionContext.setResourceParametersHelper(resourceParametersHelper);
String json = JSONUtils.toJsonString(taskExecutionContext);
taskExecutionContext = JSONUtils.parseObject(json, TaskExecutionContext.class);
Assert.assertNotNull(taskExecutionContext);
}
}
Loading…
Cancel
Save