diff --git a/.github/workflows/ci_e2e.yml b/.github/workflows/ci_e2e.yml index eaffc04e62..82c81ef4e1 100644 --- a/.github/workflows/ci_e2e.yml +++ b/.github/workflows/ci_e2e.yml @@ -66,9 +66,9 @@ jobs: run: cd ./e2e && mvn -B clean test - name: Collect logs if: failure() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v1 with: name: dslogs - path: ${{ github.workspace }}/docker/docker-swarm/dolphinscheduler-logs + path: /var/lib/docker/volumes/docker-swarm_dolphinscheduler-logs/_data diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue index 98aaaa5ff4..c43a5eaa2a 100755 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue @@ -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() diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/flink.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/flink.vue index 0fe5d0cbdb..dca5adec8b 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/flink.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/flink.vue @@ -22,6 +22,7 @@ 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 || '' diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/mr.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/mr.vue index 26d74bd990..451283557c 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/mr.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/mr.vue @@ -19,7 +19,7 @@
{{$t('Program Type')}}
- + 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)) { diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/python.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/python.vue index 40b8c6a0b7..117c050590 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/python.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/python.vue @@ -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) } } diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/shell.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/shell.vue index 48c5322b16..0c07a9afc1 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/shell.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/shell.vue @@ -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) } } diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/spark.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/spark.vue index 2c59707c69..b678a72321 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/spark.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/spark.vue @@ -22,6 +22,7 @@ 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)) { diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js index 34f78b03b8..07871b2c93 100755 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js @@ -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 */ diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue index b1d7a7b1e2..42c6b12234 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue @@ -62,6 +62,7 @@ this.getResourcesList(), // get jar this.getResourcesListJar(), + this.getResourcesListJar('PYTHON'), // get worker group list this.getWorkerGroupsAll(), this.getTenantList() diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/index.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/index.vue index eedf741b6e..078c5e695c 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/index.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/index.vue @@ -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() diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/instanceDetails.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/instanceDetails.vue index daa30d7c44..f82cea414a 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/instanceDetails.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/instanceDetails.vue @@ -64,6 +64,7 @@ this.getResourcesList(), // get jar this.getResourcesListJar(), + this.getResourcesListJar('PYTHON'), // get worker group list this.getWorkerGroupsAll(), this.getTenantList() diff --git a/dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js b/dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js index a549aafaa2..a2f1516bf0 100644 --- a/dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js +++ b/dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js @@ -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) diff --git a/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js b/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js index cbd828fe01..02d466870a 100755 --- a/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js +++ b/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js @@ -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) || '' diff --git a/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js b/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js index 05dfa77161..b2aad5ec3a 100644 --- a/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js +++ b/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js @@ -55,6 +55,8 @@ export default { resourcesListS: [], // tasks resourcesListJar resourcesListJar: [], + // tasks resourcesListPy + resourcesListPy: [], // tasks datasource Type dsTypeListS: [ { diff --git a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js index 5f7a707f87..b5616a7869 100755 --- a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js +++ b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js @@ -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' } diff --git a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js index 5dec5096b3..5a32d15e8c 100755 --- a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js +++ b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js @@ -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': '该工作流画布异常,无法保存,请重新创建' }