提交 0a0515ec 编写于 作者: L lenboo

Merge remote-tracking branch 'upstream/1.3.2-release' into 132-checkadmin

......@@ -21,7 +21,7 @@
<parent>
<groupId>org.apache.dolphinscheduler</groupId>
<artifactId>dolphinscheduler</artifactId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
</parent>
<artifactId>dolphinscheduler-alert</artifactId>
<name>${project.artifactId}</name>
......
......@@ -21,7 +21,7 @@
<parent>
<groupId>org.apache.dolphinscheduler</groupId>
<artifactId>dolphinscheduler</artifactId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
</parent>
<artifactId>dolphinscheduler-api</artifactId>
<name>${project.artifactId}</name>
......
......@@ -27,6 +27,7 @@ import org.apache.dolphinscheduler.api.service.ResourcesService;
import org.apache.dolphinscheduler.api.service.UdfFuncService;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.ProgramType;
import org.apache.dolphinscheduler.common.enums.ResourceType;
import org.apache.dolphinscheduler.common.enums.UdfType;
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
......@@ -275,7 +276,7 @@ public class ResourcesController extends BaseController {
* @param type resource type
* @return resource list
*/
@ApiOperation(value = "queryResourceJarList", notes = "QUERY_RESOURCE_LIST_NOTES")
@ApiOperation(value = "queryResourceByProgramType", notes = "QUERY_RESOURCE_LIST_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "type", value = "RESOURCE_TYPE", required = true, dataType = "ResourceType")
})
......@@ -283,10 +284,14 @@ public class ResourcesController extends BaseController {
@ResponseStatus(HttpStatus.OK)
@ApiException(QUERY_RESOURCES_LIST_ERROR)
public Result queryResourceJarList(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value = "type") ResourceType type
@RequestParam(value = "type") ResourceType type,
@RequestParam(value = "programType",required = false) ProgramType programType
) {
logger.info("query resource list, login user:{}, resource type:{}", loginUser.getUserName(), type.toString());
Map<String, Object> result = resourceService.queryResourceJarList(loginUser, type);
String programTypeName = programType == null ? "" : programType.name();
String userName = loginUser.getUserName();
userName = userName.replaceAll("[\n|\r|\t]", "_");
logger.info("query resource list, login user:{}, resource type:{}, program type:{}", userName,programTypeName);
Map<String, Object> result = resourceService.queryResourceByProgramType(loginUser, type,programType);
return returnDataList(result);
}
......
......@@ -31,24 +31,29 @@ public class ResourceFilter implements IFilter {
/**
* resource suffix
*/
private String suffix;
private Set<String> suffixs = new HashSet<>();
/**
* resource list
*/
private List<Resource> resourceList;
/**
* parent list
* constructor
* @param suffix resource suffix
* @param resourceList resource list
*/
//Set<Resource> parentList = new HashSet<>();
public ResourceFilter(String suffix, List<Resource> resourceList) {
this.suffixs.add(suffix);
this.resourceList = resourceList;
}
/**
* constructor
* @param suffix resource suffix
* @param suffixs resource suffixs
* @param resourceList resource list
*/
public ResourceFilter(String suffix, List<Resource> resourceList) {
this.suffix = suffix;
public ResourceFilter(Set<String> suffixs, List<Resource> resourceList) {
this.suffixs = suffixs;
this.resourceList = resourceList;
}
......@@ -59,7 +64,13 @@ public class ResourceFilter implements IFilter {
public Set<Resource> fileFilter(){
Set<Resource> resources = resourceList.stream().filter(t -> {
String alias = t.getAlias();
return alias.endsWith(suffix);
boolean result = false;
for (String suffix : suffixs) {
if (alias.endsWith(suffix)) {
result = true;
}
}
return result;
}).collect(Collectors.toSet());
return resources;
}
......
......@@ -30,6 +30,7 @@ import org.apache.dolphinscheduler.api.exceptions.ServiceException;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.ProgramType;
import org.apache.dolphinscheduler.common.enums.ResourceType;
import org.apache.dolphinscheduler.common.utils.*;
import org.apache.dolphinscheduler.dao.entity.*;
......@@ -654,21 +655,33 @@ public class ResourcesService extends BaseService {
}
/**
* query resource list
* query resource list by program type
*
* @param loginUser login user
* @param type resource type
* @return resource list
*/
public Map<String, Object> queryResourceJarList(User loginUser, ResourceType type) {
public Map<String, Object> queryResourceByProgramType(User loginUser, ResourceType type, ProgramType programType) {
Map<String, Object> result = new HashMap<>(5);
String suffix = ".jar";
int userId = loginUser.getId();
if(isAdmin(loginUser)){
userId = 0;
}
if (programType != null) {
switch (programType) {
case JAVA:
break;
case SCALA:
break;
case PYTHON:
suffix = ".py";
break;
}
}
List<Resource> allResourceList = resourcesMapper.queryResourceListAuthored(userId, type.ordinal(),0);
List<Resource> resources = new ResourceFilter(".jar",new ArrayList<>(allResourceList)).filter();
List<Resource> resources = new ResourceFilter(suffix,new ArrayList<>(allResourceList)).filter();
Visitor resourceTreeVisitor = new ResourceTreeVisitor(resources);
result.put(Constants.DATA_LIST, resourceTreeVisitor.visit().getChildren());
putMsg(result,Status.SUCCESS);
......
......@@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.api.controller;
import com.alibaba.fastjson.JSON;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.enums.ProgramType;
import org.apache.dolphinscheduler.common.enums.ResourceType;
import org.apache.dolphinscheduler.common.enums.UdfType;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
......@@ -452,4 +453,28 @@ public class ResourcesControllerTest extends AbstractControllerTest{
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
logger.info(mvcResult.getResponse().getContentAsString());
}
@Test
public void testqueryResourceJarList() throws Exception {
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
paramsMap.add("type", ResourceType.FILE.name());
//paramsMap.add("programType", ProgramType.PYTHON.name());
paramsMap.add("programType", "JAVA");
MvcResult mvcResult = mockMvc.perform(get("/resources/list/jar")
.header(SESSION_ID, sessionId)
.params(paramsMap))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andReturn();
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
result.getCode().equals(Status.SUCCESS.getCode());
JSONObject object = (JSONObject) JSON.parse(mvcResult.getResponse().getContentAsString());
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
logger.info(mvcResult.getResponse().getContentAsString());
}
}
......@@ -23,7 +23,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* resource filter test
......@@ -48,9 +50,11 @@ public class ResourceFilterTest {
allList.add(resource5);
allList.add(resource6);
allList.add(resource7);
Set<String> suffixSet = new HashSet<>();
suffixSet.add(".jar");
suffixSet.add(".txt");
ResourceFilter resourceFilter = new ResourceFilter(".jar",allList);
ResourceFilter resourceFilter = new ResourceFilter(suffixSet,allList);
List<Resource> resourceList = resourceFilter.filter();
Assert.assertNotNull(resourceList);
resourceList.stream().forEach(t-> logger.info(t.toString()));
......
......@@ -21,7 +21,7 @@
<parent>
<groupId>org.apache.dolphinscheduler</groupId>
<artifactId>dolphinscheduler</artifactId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
</parent>
<artifactId>dolphinscheduler-common</artifactId>
<name>dolphinscheduler-common</name>
......
......@@ -21,7 +21,7 @@
<parent>
<groupId>org.apache.dolphinscheduler</groupId>
<artifactId>dolphinscheduler</artifactId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
</parent>
<artifactId>dolphinscheduler-dao</artifactId>
<name>${project.artifactId}</name>
......
......@@ -343,6 +343,14 @@ public abstract class UpgradeDao extends AbstractBaseDao {
if (param != null) {
List<ResourceInfo> resourceList = JSONUtils.toList(param.getString("resourceList"), ResourceInfo.class);
ResourceInfo mainJar = JSONUtils.parseObject(param.getString("mainJar"), ResourceInfo.class);
if (mainJar != null && mainJar.getId() == 0) {
String fullName = mainJar.getRes().startsWith("/") ? mainJar.getRes() : String.format("/%s",mainJar.getRes());
if (resourcesMap.containsKey(fullName)) {
mainJar.setId(resourcesMap.get(fullName));
param.put("mainJar",JSONUtils.parseObject(JSONObject.toJSONString(mainJar)));
}
}
if (CollectionUtils.isNotEmpty(resourceList)) {
List<ResourceInfo> newResourceList = resourceList.stream().map(resInfo -> {
......
......@@ -20,7 +20,7 @@
<parent>
<artifactId>dolphinscheduler</artifactId>
<groupId>org.apache.dolphinscheduler</groupId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -21,7 +21,7 @@
<parent>
<groupId>org.apache.dolphinscheduler</groupId>
<artifactId>dolphinscheduler</artifactId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
</parent>
<artifactId>dolphinscheduler-plugin-api</artifactId>
<name>${project.artifactId}</name>
......
......@@ -19,7 +19,7 @@
<parent>
<artifactId>dolphinscheduler</artifactId>
<groupId>org.apache.dolphinscheduler</groupId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -21,7 +21,7 @@
<parent>
<groupId>org.apache.dolphinscheduler</groupId>
<artifactId>dolphinscheduler</artifactId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
</parent>
<artifactId>dolphinscheduler-server</artifactId>
<name>dolphinscheduler-server</name>
......
......@@ -19,7 +19,7 @@
<parent>
<artifactId>dolphinscheduler</artifactId>
<groupId>org.apache.dolphinscheduler</groupId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -20,7 +20,7 @@
<parent>
<artifactId>dolphinscheduler</artifactId>
<groupId>org.apache.dolphinscheduler</groupId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -434,7 +434,6 @@
this.$message.warning(`${i18n.$t('Failed to create node to save')}`)
return
}
// Global parameters (optional)
this._udpTopFloorPop().then(() => {
return this._save()
......
......@@ -22,6 +22,7 @@
<x-select
style="width: 130px;"
v-model="programType"
@on-change="_onChange"
:disabled="isDetails">
<x-option
v-for="city in programTypeList"
......@@ -181,6 +182,8 @@
// Master jar package(List)
mainJarLists: [],
mainJarList: [],
jarList: [],
pyList: [],
// Deployment method
deployMode: 'cluster',
// Resource(list)
......@@ -221,6 +224,16 @@
},
mixins: [disabledState],
methods: {
/**
* programType change
*/
_onChange(o) {
if(o.value === 'PYTHON') {
this.mainJarLists = this.pyList
} else {
this.mainJarLists = this.jarList
}
},
/**
* getResourceId
*/
......@@ -304,7 +317,7 @@
// noRes
if (this.noRes.length>0) {
this.$message.warning(`${i18n.$t('Please delete all non-existent resources')}`)
this.$message.warning(`${i18n.$t('Please delete all non-existing resources')}`)
return false
}
......@@ -389,19 +402,20 @@
}
let noResources = [{
id: -1,
name: $t('Unauthorized or deleted resources'),
fullName: '/'+$t('Unauthorized or deleted resources'),
name: $t('No resources exist'),
fullName: '/'+$t('No resources exist'),
children: []
}]
if(optionsCmp.length>0) {
this.allNoResources = optionsCmp
optionsCmp = optionsCmp.map(item=>{
return {id: item.id,name: item.name,fullName: item.res}
return {id: item.id,name: item.name || item.res,fullName: item.res}
})
optionsCmp.forEach(item=>{
item.isNew = true
})
noResources[0].children = optionsCmp
this.mainJarList = _.filter(this.mainJarList, o=> { return o.id!==-1 })
this.mainJarList = this.mainJarList.concat(noResources)
}
}
......@@ -465,13 +479,24 @@
}
},
created () {
let o = this.backfillItem
let item = this.store.state.dag.resourcesListS
let items = this.store.state.dag.resourcesListJar
let pythonList = this.store.state.dag.resourcesListPy
this.diGuiTree(item)
this.diGuiTree(items)
this.diGuiTree(pythonList)
this.mainJarList = item
this.mainJarLists = items
let o = this.backfillItem
this.jarList = items
this.pyList = pythonList
if(!_.isEmpty(o) && o.params.programType === 'PYTHON') {
this.mainJarLists = pythonList
} else {
this.mainJarLists = items
}
// Non-null objects represent backfill
if (!_.isEmpty(o)) {
this.mainClass = o.params.mainClass || ''
......
......@@ -19,7 +19,7 @@
<m-list-box>
<div slot="text">{{$t('Program Type')}}</div>
<div slot="content">
<x-select v-model="programType" :disabled="isDetails" style="width: 110px;">
<x-select v-model="programType" @on-change="_onChange" :disabled="isDetails" style="width: 110px;">
<x-option
v-for="city in programTypeList"
:key="city.code"
......@@ -117,6 +117,8 @@
// Main jar package (List)
mainJarLists: [],
mainJarList: [],
jarList: [],
pyList: [],
// Resource(list)
resourceList: [],
// Cache ResourceList
......@@ -145,6 +147,16 @@
},
mixins: [disabledState],
methods: {
/**
* programType change
*/
_onChange(o) {
if(o.value === 'PYTHON') {
this.mainJarLists = this.pyList
} else {
this.mainJarLists = this.jarList
}
},
/**
* getResourceId
*/
......@@ -230,19 +242,20 @@
}
let noResources = [{
id: -1,
name: $t('Unauthorized or deleted resources'),
fullName: '/'+$t('Unauthorized or deleted resources'),
name: $t('No resources exist'),
fullName: '/'+$t('No resources exist'),
children: []
}]
if(optionsCmp.length>0) {
this.allNoResources = optionsCmp
optionsCmp = optionsCmp.map(item=>{
return {id: item.id,name: item.name,fullName: item.res}
return {id: item.id,name: item.name || item.res,fullName: item.res}
})
optionsCmp.forEach(item=>{
item.isNew = true
})
noResources[0].children = optionsCmp
this.mainJarList = _.filter(this.mainJarList, o=> { return o.id!==-1 })
this.mainJarList = this.mainJarList.concat(noResources)
}
}
......@@ -263,7 +276,7 @@
// noRes
if (this.noRes.length>0) {
this.$message.warning(`${i18n.$t('Please delete all non-existent resources')}`)
this.$message.warning(`${i18n.$t('Please delete all non-existing resources')}`)
return false
}
......@@ -343,13 +356,24 @@
}
},
created () {
let o = this.backfillItem
let item = this.store.state.dag.resourcesListS
let items = this.store.state.dag.resourcesListJar
let pythonList = this.store.state.dag.resourcesListPy
this.diGuiTree(item)
this.diGuiTree(items)
this.diGuiTree(pythonList)
this.mainJarList = item
this.mainJarLists = items
let o = this.backfillItem
this.jarList = items
this.pyList = pythonList
if(!_.isEmpty(o) && o.params.programType === 'PYTHON') {
this.mainJarLists = pythonList
} else {
this.mainJarLists = items
}
// Non-null objects represent backfill
if (!_.isEmpty(o)) {
......
......@@ -129,7 +129,7 @@
// noRes
if (this.noRes.length>0) {
this.$message.warning(`${i18n.$t('Please delete all non-existent resources')}`)
this.$message.warning(`${i18n.$t('Please delete all non-existing resources')}`)
return false
}
......@@ -222,19 +222,20 @@
}
let noResources = [{
id: -1,
name: $t('Unauthorized or deleted resources'),
fullName: '/'+$t('Unauthorized or deleted resources'),
name: $t('No resources exist'),
fullName: '/'+$t('No resources exist'),
children: []
}]
if(optionsCmp.length>0) {
this.allNoResources = optionsCmp
optionsCmp = optionsCmp.map(item=>{
return {id: item.id,name: item.name,fullName: item.res}
return {id: item.id,name: item.name || item.res,fullName: item.res}
})
optionsCmp.forEach(item=>{
item.isNew = true
})
noResources[0].children = optionsCmp
this.resourceOptions = _.filter(this.resourceOptions, o=> { return o.id!==-1 })
this.resourceOptions = this.resourceOptions.concat(noResources)
}
}
......
......@@ -165,7 +165,7 @@
}
// noRes
if (this.noRes.length>0) {
this.$message.warning(`${i18n.$t('Please delete all non-existent resources')}`)
this.$message.warning(`${i18n.$t('Please delete all non-existing resources')}`)
return false
}
// Process resourcelist
......@@ -260,19 +260,20 @@
}
let noResources = [{
id: -1,
name: $t('Unauthorized or deleted resources'),
fullName: '/'+$t('Unauthorized or deleted resources'),
name: $t('No resources exist'),
fullName: '/'+$t('No resources exist'),
children: []
}]
if(optionsCmp.length>0) {
this.allNoResources = optionsCmp
optionsCmp = optionsCmp.map(item=>{
return {id: item.id,name: item.name,fullName: item.res}
return {id: item.id,name: item.name || item.res,fullName: item.res}
})
optionsCmp.forEach(item=>{
item.isNew = true
})
noResources[0].children = optionsCmp
this.options = _.filter(this.options, o=> { return o.id!==-1 })
this.options = this.options.concat(noResources)
}
}
......
......@@ -22,6 +22,7 @@
<x-select
style="width: 130px;"
v-model="programType"
@on-change="_onChange"
:disabled="isDetails">
<x-option
v-for="city in programTypeList"
......@@ -220,6 +221,8 @@
// Master jar package(List)
mainJarLists: [],
mainJarList: [],
jarList: [],
pyList: [],
// Deployment method
deployMode: 'cluster',
// Resource(list)
......@@ -264,6 +267,16 @@
},
mixins: [disabledState],
methods: {
/**
* programType change
*/
_onChange(o) {
if(o.value === 'PYTHON') {
this.mainJarLists = this.pyList
} else {
this.mainJarLists = this.jarList
}
},
/**
* getResourceId
*/
......@@ -349,19 +362,20 @@
}
let noResources = [{
id: -1,
name: $t('Unauthorized or deleted resources'),
fullName: '/'+$t('Unauthorized or deleted resources'),
name: $t('No resources exist'),
fullName: '/'+$t('No resources exist'),
children: []
}]
if(optionsCmp.length>0) {
this.allNoResources = optionsCmp
optionsCmp = optionsCmp.map(item=>{
return {id: item.id,name: item.name,fullName: item.res}
return {id: item.id,name: item.name || item.res,fullName: item.res}
})
optionsCmp.forEach(item=>{
item.isNew = true
})
noResources[0].children = optionsCmp
this.mainJarList = _.filter(this.mainJarList, o=> { return o.id!==-1 })
this.mainJarList = this.mainJarList.concat(noResources)
}
}
......@@ -387,7 +401,7 @@
// noRes
if (this.noRes.length>0) {
this.$message.warning(`${i18n.$t('Please delete all non-existent resources')}`)
this.$message.warning(`${i18n.$t('Please delete all non-existing resources')}`)
return false
}
......@@ -512,13 +526,22 @@
}
},
created () {
let o = this.backfillItem
let item = this.store.state.dag.resourcesListS
let items = this.store.state.dag.resourcesListJar
let pythonList = this.store.state.dag.resourcesListPy
this.diGuiTree(item)
this.diGuiTree(items)
this.diGuiTree(pythonList)
this.mainJarList = item
this.mainJarLists = items
let o = this.backfillItem
this.jarList = items
this.pyList = pythonList
if(!_.isEmpty(o) && o.params.programType === 'PYTHON') {
this.mainJarLists = pythonList
} else {
this.mainJarLists = items
}
// Non-null objects represent backfill
if (!_.isEmpty(o)) {
......
......@@ -666,7 +666,18 @@ JSP.prototype.saveStore = function () {
y: v.y
}
})
let targetArrBool = false
_.forEach(locations, item => {
if(item.targetarr) {
targetArrBool = true
return false
}
})
if(connects.length && !targetArrBool) {
Vue.$message.warning(`${i18n.$t('The workflow canvas is abnormal and cannot be saved, please recreate')}`)
return false
}
// return false
// Storage node
store.commit('dag/setTasks', tasks)
// Store coordinate information
......@@ -697,13 +708,6 @@ JSP.prototype.handleEvent = function () {
console.log(sourceId,targetId)
let rtTargetArrs = rtTargetArr(targetId)
let rtSouceArrs = rtTargetArr(sourceId)
/**
* When connecting, connection is prohibited when the sourceId and target nodes are empty
*/
if(!sourceId && !targetId) {
Vue.$message.warning(`${i18n.$t('This canvas is abnormal and the node connection cannot be made. Please save or exit the current workflow')}`)
return false
}
/**
* Recursive search for nodes
*/
......
......@@ -62,6 +62,7 @@
this.getResourcesList(),
// get jar
this.getResourcesListJar(),
this.getResourcesListJar('PYTHON'),
// get worker group list
this.getWorkerGroupsAll(),
this.getTenantList()
......
......@@ -57,10 +57,9 @@
this.getProjectList(),
// get jar
this.getResourcesListJar(),
this.getResourcesListJar('PYTHON'),
// get resource
this.getResourcesList(),
// get jar
this.getResourcesListJar(),
// get worker group list
this.getWorkerGroupsAll(),
this.getTenantList()
......
......@@ -64,6 +64,7 @@
this.getResourcesList(),
// get jar
this.getResourcesListJar(),
this.getResourcesListJar('PYTHON'),
// get worker group list
this.getWorkerGroupsAll(),
this.getTenantList()
......
......@@ -374,16 +374,21 @@ export default {
/**
* get jar
*/
getResourcesListJar ({ state }) {
getResourcesListJar ({ state }, payload) {
return new Promise((resolve, reject) => {
if (state.resourcesListJar.length) {
resolve()
return
}
io.get('resources/list/jar', {
type: 'FILE'
type: 'FILE',
programType: payload
}, res => {
state.resourcesListJar = res.data
if(payload) {
state.resourcesListPy = res.data
} else {
state.resourcesListJar = res.data
}
resolve(res.data)
}).catch(res => {
reject(res)
......
......@@ -109,6 +109,7 @@ export default {
state.processListS = (payload && payload.processListS) || []
state.resourcesListS = (payload && payload.resourcesListS) || []
state.resourcesListJar = (payload && payload.resourcesListJar) || []
state.resourcesListPy = (payload && payload.resourcesListPy) || []
state.projectListS = (payload && payload.projectListS) || []
state.isDetails = (payload && payload.isDetails) || false
state.runFlag = (payload && payload.runFlag) || ''
......
......@@ -55,6 +55,8 @@ export default {
resourcesListS: [],
// tasks resourcesListJar
resourcesListJar: [],
// tasks resourcesListPy
resourcesListPy: [],
// tasks datasource Type
dsTypeListS: [
{
......
......@@ -591,8 +591,8 @@ export default {
'Branch flow': 'Branch flow',
'Cannot select the same node for successful branch flow and failed branch flow': 'Cannot select the same node for successful branch flow and failed branch flow',
'Successful branch flow and failed branch flow are required': 'conditions node Successful and failed branch flow are required',
'Unauthorized or deleted resources': 'Unauthorized or deleted resources',
'Please delete all non-existent resources': 'Please delete all non-existent resources',
'No resources exist': 'No resources exist',
'Please delete all non-existing resources': 'Please delete all non-existing resources',
'The Worker group no longer exists, please select the correct Worker group!': 'The Worker group no longer exists, please select the correct Worker group!',
'Please confirm whether the workflow has been saved before downloading': 'Please confirm whether the workflow has been saved before downloading',
'User name length is between 3 and 39': 'User name length is between 3 and 39',
......@@ -601,5 +601,5 @@ export default {
'Connection name': 'Connection name',
'Current connection settings': 'Current connection settings',
'Please save the DAG before formatting': 'Please save the DAG before formatting',
'This canvas is abnormal and the node connection cannot be made. Please save or exit the current workflow': 'This canvas is abnormal and the node connection cannot be made. Please save or exit the current workflow'
'The workflow canvas is abnormal and cannot be saved, please recreate': 'The workflow canvas is abnormal and cannot be saved, please recreate'
}
......@@ -591,8 +591,8 @@ export default {
'Branch flow': '分支流转',
'Cannot select the same node for successful branch flow and failed branch flow': '成功分支流转和失败分支流转不能选择同一个节点',
'Successful branch flow and failed branch flow are required': 'conditions节点成功和失败分支流转必填',
'Unauthorized or deleted resources': '未授权或已删除资源',
'Please delete all non-existent resources': '请删除所有未授权或已删除资源',
'No resources exist': '不存在资源',
'Please delete all non-existing resources': '请删除所有不存在资源',
'The Worker group no longer exists, please select the correct Worker group!': '该Worker分组已经不存在,请选择正确的Worker分组!',
'Please confirm whether the workflow has been saved before downloading': '下载前请确定工作流是否已保存',
'User name length is between 3 and 39': '用户名长度在3~39之间',
......@@ -607,5 +607,5 @@ export default {
'Connection name': '连线名',
'Current connection settings': '当前连线设置',
'Please save the DAG before formatting': '格式化前请先保存DAG',
'This canvas is abnormal and the node connection cannot be made. Please save or exit the current workflow': '此画布异常,无法进行节点连线,请保存或退出当前工作流'
'The workflow canvas is abnormal and cannot be saved, please recreate': '该工作流画布异常,无法保存,请重新创建'
}
......@@ -19,7 +19,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.dolphinscheduler</groupId>
<artifactId>dolphinscheduler</artifactId>
<version>1.3.2-SNAPSHOT</version>
<version>1.3.3-SNAPSHOT</version>
<packaging>pom</packaging>
<name>${project.artifactId}</name>
<url>http://dolphinscheduler.apache.org</url>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册