[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>
This commit is contained in:
caishunfeng 2022-03-22 14:02:07 +08:00 committed by GitHub
parent f5ef410d06
commit 852597c9bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 74 additions and 5 deletions

View File

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

View File

@ -17,6 +17,15 @@
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 {
}

View File

@ -25,23 +25,27 @@ import java.util.Objects;
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) {
put(resourceType, id, null);
}
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)) {
resourceParametersMap = new HashMap<>();
map.put(resourceType, resourceParametersMap);
resourceMap.put(resourceType, resourceParametersMap);
}
resourceParametersMap.put(id, parameters);
}
public void setResourceMap(Map<ResourceType, Map<Integer, AbstractResourceParameters>> resourceMap) {
this.resourceMap = resourceMap;
}
public Map<ResourceType, Map<Integer, AbstractResourceParameters>> getResourceMap() {
return map;
return resourceMap;
}
public Map<Integer, AbstractResourceParameters> getResourceMap(ResourceType resourceType) {

View File

@ -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);
}
}