From 4d530f961219fb32aa010affd36b67789b7a90ba Mon Sep 17 00:00:00 2001 From: break60 <790061044@qq.com> Date: Mon, 3 Aug 2020 11:10:08 +0800 Subject: [PATCH 1/9] Before creating a workflow, clear the canvas --- .../src/js/conf/home/pages/dag/_source/dag.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js index ff8a4528d5..5a41091029 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js @@ -52,7 +52,9 @@ Dag.prototype.setConfig = function (o) { */ Dag.prototype.create = function () { const self = this - jsPlumb.ready(() => { + let plumbIns = jsPlumb.getInstance() + plumbIns.reset() + plumbIns.ready(() => { JSP.init({ dag: this.dag, instance: this.instance, @@ -304,7 +306,9 @@ Dag.prototype.backfill = function (arg) { locationsValue = dataObject const self = this - jsPlumb.ready(() => { + let plumbIns = jsPlumb.getInstance() + plumbIns.reset() + plumbIns.ready(() => { JSP.init({ dag: this.dag, instance: this.instance, @@ -326,7 +330,9 @@ Dag.prototype.backfill = function (arg) { }) } else { const self = this - jsPlumb.ready(() => { + let plumbIns = jsPlumb.getInstance() + plumbIns.reset() + plumbIns.ready(() => { JSP.init({ dag: this.dag, instance: this.instance, From 00fc39823f7e5c8839a11b338a3787913ff89762 Mon Sep 17 00:00:00 2001 From: wuchunfu <319355703@qq.com> Date: Mon, 3 Aug 2020 13:50:30 +0800 Subject: [PATCH 2/9] [Fix-3256][ui] herry pick commit from dev for Fix admin user info update error (#3306) --- sql/create/release-1.0.0_schema/mysql/dolphinscheduler_dml.sql | 2 +- .../release-1.2.0_schema/postgresql/dolphinscheduler_dml.sql | 2 +- sql/dolphinscheduler-postgre.sql | 2 +- sql/dolphinscheduler_mysql.sql | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sql/create/release-1.0.0_schema/mysql/dolphinscheduler_dml.sql b/sql/create/release-1.0.0_schema/mysql/dolphinscheduler_dml.sql index e8c797b1a9..fd65d3091e 100644 --- a/sql/create/release-1.0.0_schema/mysql/dolphinscheduler_dml.sql +++ b/sql/create/release-1.0.0_schema/mysql/dolphinscheduler_dml.sql @@ -16,7 +16,7 @@ */ -- Records of t_escheduler_user,user : admin , password : dolphinscheduler123 -INSERT INTO `t_escheduler_user` VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', 'xx', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22'); +INSERT INTO `t_escheduler_user` VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', '', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22'); INSERT INTO `t_escheduler_alertgroup` VALUES (1, 'default admin warning group', '0', 'default admin warning group','2018-11-29 10:20:39', '2018-11-29 10:20:39'); INSERT INTO `t_escheduler_relation_user_alertgroup` VALUES ('1', '1', '1', '2018-11-29 10:22:33', '2018-11-29 10:22:33'); diff --git a/sql/create/release-1.2.0_schema/postgresql/dolphinscheduler_dml.sql b/sql/create/release-1.2.0_schema/postgresql/dolphinscheduler_dml.sql index 4b83d78fea..d075cab9bf 100644 --- a/sql/create/release-1.2.0_schema/postgresql/dolphinscheduler_dml.sql +++ b/sql/create/release-1.2.0_schema/postgresql/dolphinscheduler_dml.sql @@ -16,7 +16,7 @@ */ -- Records of t_ds_user,user : admin , password : dolphinscheduler123 -INSERT INTO t_ds_user(user_name,user_password,user_type,email,phone,tenant_id,create_time,update_time) VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', 'xx', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22'); +INSERT INTO t_ds_user(user_name,user_password,user_type,email,phone,tenant_id,create_time,update_time) VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', '', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22'); -- Records of t_ds_alertgroup,dolphinscheduler warning group INSERT INTO t_ds_alertgroup(group_name,group_type,description,create_time,update_time) VALUES ('dolphinscheduler warning group', '0', 'dolphinscheduler warning group','2018-11-29 10:20:39', '2018-11-29 10:20:39'); diff --git a/sql/dolphinscheduler-postgre.sql b/sql/dolphinscheduler-postgre.sql index b16965a437..df93c1b9c7 100644 --- a/sql/dolphinscheduler-postgre.sql +++ b/sql/dolphinscheduler-postgre.sql @@ -750,7 +750,7 @@ ALTER TABLE t_ds_worker_server ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_worker_ -- Records of t_ds_user?user : admin , password : dolphinscheduler123 -INSERT INTO t_ds_user(user_name,user_password,user_type,email,phone,tenant_id,create_time,update_time) VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', 'xx', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22'); +INSERT INTO t_ds_user(user_name,user_password,user_type,email,phone,tenant_id,state,create_time,update_time) VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', '', '0', 1, '2018-03-27 15:48:50', '2018-10-24 17:40:22'); -- Records of t_ds_alertgroup,dolphinscheduler warning group INSERT INTO t_ds_alertgroup(group_name,group_type,description,create_time,update_time) VALUES ('dolphinscheduler warning group', '0', 'dolphinscheduler warning group','2018-11-29 10:20:39', '2018-11-29 10:20:39'); diff --git a/sql/dolphinscheduler_mysql.sql b/sql/dolphinscheduler_mysql.sql index a6e75f50d2..657014b422 100644 --- a/sql/dolphinscheduler_mysql.sql +++ b/sql/dolphinscheduler_mysql.sql @@ -814,4 +814,4 @@ INSERT INTO `t_ds_relation_user_alertgroup` VALUES ('1', '1', '1', '2018-11-29 1 -- ---------------------------- -- Records of t_ds_user -- ---------------------------- -INSERT INTO `t_ds_user` VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', 'xx', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22', null); +INSERT INTO `t_ds_user` VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', '', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22', null, 1); From 811fd48f0a27b3112092b4f8b4fbeb5d55cf2da0 Mon Sep 17 00:00:00 2001 From: break60 <790061044@qq.com> Date: Tue, 4 Aug 2020 10:22:00 +0800 Subject: [PATCH 3/9] Before creating a workflow, clear the canvas (#3388) * Before creating a workflow, clear the canvas * [Fix-3256][ui] herry pick commit from dev for Fix admin user info update error (#3306) Co-authored-by: wuchunfu <319355703@qq.com> --- .../src/js/conf/home/pages/dag/_source/dag.js | 12 +++++++++--- .../mysql/dolphinscheduler_dml.sql | 2 +- .../postgresql/dolphinscheduler_dml.sql | 2 +- sql/dolphinscheduler-postgre.sql | 2 +- sql/dolphinscheduler_mysql.sql | 2 +- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js index ff8a4528d5..5a41091029 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js @@ -52,7 +52,9 @@ Dag.prototype.setConfig = function (o) { */ Dag.prototype.create = function () { const self = this - jsPlumb.ready(() => { + let plumbIns = jsPlumb.getInstance() + plumbIns.reset() + plumbIns.ready(() => { JSP.init({ dag: this.dag, instance: this.instance, @@ -304,7 +306,9 @@ Dag.prototype.backfill = function (arg) { locationsValue = dataObject const self = this - jsPlumb.ready(() => { + let plumbIns = jsPlumb.getInstance() + plumbIns.reset() + plumbIns.ready(() => { JSP.init({ dag: this.dag, instance: this.instance, @@ -326,7 +330,9 @@ Dag.prototype.backfill = function (arg) { }) } else { const self = this - jsPlumb.ready(() => { + let plumbIns = jsPlumb.getInstance() + plumbIns.reset() + plumbIns.ready(() => { JSP.init({ dag: this.dag, instance: this.instance, diff --git a/sql/create/release-1.0.0_schema/mysql/dolphinscheduler_dml.sql b/sql/create/release-1.0.0_schema/mysql/dolphinscheduler_dml.sql index e8c797b1a9..fd65d3091e 100644 --- a/sql/create/release-1.0.0_schema/mysql/dolphinscheduler_dml.sql +++ b/sql/create/release-1.0.0_schema/mysql/dolphinscheduler_dml.sql @@ -16,7 +16,7 @@ */ -- Records of t_escheduler_user,user : admin , password : dolphinscheduler123 -INSERT INTO `t_escheduler_user` VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', 'xx', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22'); +INSERT INTO `t_escheduler_user` VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', '', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22'); INSERT INTO `t_escheduler_alertgroup` VALUES (1, 'default admin warning group', '0', 'default admin warning group','2018-11-29 10:20:39', '2018-11-29 10:20:39'); INSERT INTO `t_escheduler_relation_user_alertgroup` VALUES ('1', '1', '1', '2018-11-29 10:22:33', '2018-11-29 10:22:33'); diff --git a/sql/create/release-1.2.0_schema/postgresql/dolphinscheduler_dml.sql b/sql/create/release-1.2.0_schema/postgresql/dolphinscheduler_dml.sql index 4b83d78fea..d075cab9bf 100644 --- a/sql/create/release-1.2.0_schema/postgresql/dolphinscheduler_dml.sql +++ b/sql/create/release-1.2.0_schema/postgresql/dolphinscheduler_dml.sql @@ -16,7 +16,7 @@ */ -- Records of t_ds_user,user : admin , password : dolphinscheduler123 -INSERT INTO t_ds_user(user_name,user_password,user_type,email,phone,tenant_id,create_time,update_time) VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', 'xx', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22'); +INSERT INTO t_ds_user(user_name,user_password,user_type,email,phone,tenant_id,create_time,update_time) VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', '', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22'); -- Records of t_ds_alertgroup,dolphinscheduler warning group INSERT INTO t_ds_alertgroup(group_name,group_type,description,create_time,update_time) VALUES ('dolphinscheduler warning group', '0', 'dolphinscheduler warning group','2018-11-29 10:20:39', '2018-11-29 10:20:39'); diff --git a/sql/dolphinscheduler-postgre.sql b/sql/dolphinscheduler-postgre.sql index b16965a437..df93c1b9c7 100644 --- a/sql/dolphinscheduler-postgre.sql +++ b/sql/dolphinscheduler-postgre.sql @@ -750,7 +750,7 @@ ALTER TABLE t_ds_worker_server ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_worker_ -- Records of t_ds_user?user : admin , password : dolphinscheduler123 -INSERT INTO t_ds_user(user_name,user_password,user_type,email,phone,tenant_id,create_time,update_time) VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', 'xx', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22'); +INSERT INTO t_ds_user(user_name,user_password,user_type,email,phone,tenant_id,state,create_time,update_time) VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', '', '0', 1, '2018-03-27 15:48:50', '2018-10-24 17:40:22'); -- Records of t_ds_alertgroup,dolphinscheduler warning group INSERT INTO t_ds_alertgroup(group_name,group_type,description,create_time,update_time) VALUES ('dolphinscheduler warning group', '0', 'dolphinscheduler warning group','2018-11-29 10:20:39', '2018-11-29 10:20:39'); diff --git a/sql/dolphinscheduler_mysql.sql b/sql/dolphinscheduler_mysql.sql index a6e75f50d2..657014b422 100644 --- a/sql/dolphinscheduler_mysql.sql +++ b/sql/dolphinscheduler_mysql.sql @@ -814,4 +814,4 @@ INSERT INTO `t_ds_relation_user_alertgroup` VALUES ('1', '1', '1', '2018-11-29 1 -- ---------------------------- -- Records of t_ds_user -- ---------------------------- -INSERT INTO `t_ds_user` VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', 'xx', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22', null); +INSERT INTO `t_ds_user` VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', '', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22', null, 1); From 55f2a5f89c96fd7d9098cb712dfd4c29b9cfbe0d Mon Sep 17 00:00:00 2001 From: break60 <790061044@qq.com> Date: Tue, 4 Aug 2020 11:07:30 +0800 Subject: [PATCH 4/9] [Feture-3327][ui]Add the function of re-uploading files in the resource center --- .../pages/taskInstance/_source/list.vue | 1 + .../pages/file/pages/list/_source/list.vue | 18 +- .../file/pages/subdirectory/_source/list.vue | 18 +- .../pages/udf/pages/resource/_source/list.vue | 19 +- .../fileUpdate/fileChildReUpdate.vue | 336 ++++++++++++++++++ .../components/fileUpdate/fileReUpload.vue | 335 +++++++++++++++++ .../src/js/module/components/nav/nav.vue | 89 ++++- .../src/js/module/i18n/locale/en_US.js | 1 + .../src/js/module/i18n/locale/zh_CN.js | 1 + 9 files changed, 814 insertions(+), 4 deletions(-) create mode 100644 dolphinscheduler-ui/src/js/module/components/fileUpdate/fileChildReUpdate.vue create mode 100644 dolphinscheduler-ui/src/js/module/components/fileUpdate/fileReUpload.vue diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue index cdcf0b0785..5fd0392ce0 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue @@ -98,6 +98,7 @@ data-toggle="tooltip" :title="$t('View log')" icon="ans-icon-log" + :disabled="item.taskType==='SUB_PROCESS'? true: false" @click="_refreshLog(item)"> diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/list/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/list/_source/list.vue index 4ccfa2eff3..4f256f8563 100755 --- a/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/list/_source/list.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/list/_source/list.vue @@ -40,7 +40,7 @@ {{$t('Update Time')}} - + {{$t('Operation')}} @@ -79,6 +79,18 @@ @click="_edit(item,$index)" icon="ans-icon-edit"> + + + + {{$t('Update Time')}} - + {{$t('Operation')}} @@ -79,6 +79,18 @@ @click="_edit(item,$index)" icon="ans-icon-edit"> + + + + {{$t('Update Time')}} - + {{$t('Operation')}} @@ -76,6 +76,16 @@ - + + + + + + + + + diff --git a/dolphinscheduler-ui/src/js/module/components/fileUpdate/fileReUpload.vue b/dolphinscheduler-ui/src/js/module/components/fileUpdate/fileReUpload.vue new file mode 100644 index 0000000000..c0ea678470 --- /dev/null +++ b/dolphinscheduler-ui/src/js/module/components/fileUpdate/fileReUpload.vue @@ -0,0 +1,335 @@ +/* + * 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. + */ + + + + diff --git a/dolphinscheduler-ui/src/js/module/components/nav/nav.vue b/dolphinscheduler-ui/src/js/module/components/nav/nav.vue index 7c82dc660e..697c3c5889 100644 --- a/dolphinscheduler-ui/src/js/module/components/nav/nav.vue +++ b/dolphinscheduler-ui/src/js/module/components/nav/nav.vue @@ -155,7 +155,9 @@ import { mapState, mapActions } from 'vuex' import { findComponentDownward } from '@/module/util/' import mFileUpdate from '@/module/components/fileUpdate/fileUpdate' + import mFileReUpload from '@/module/components/fileUpdate/fileReUpload' import mFileChildUpdate from '@/module/components/fileUpdate/fileChildUpdate' + import mFileChildReUpdate from '@/module/components/fileUpdate/fileChildReUpdate' import mResourceChildUpdate from '@/module/components/fileUpdate/resourceChildUpdate' import mDefinitionUpdate from '@/module/components/fileUpdate/definitionUpdate' import mProgressBar from '@/module/components/progressBar/progressBar' @@ -262,6 +264,91 @@ } }) }, + /* fileReUpload */ + _fileReUpload (type,item) { + if (this.progress) { + this._toggleArchive() + return + } + let self = this + let modal = this.$modal.dialog({ + closable: false, + showMask: true, + escClose: true, + className: 'update-file-modal', + transitionName: 'opacityp', + render (h) { + return h(mFileReUpload, { + on: { + onProgress (val) { + self.progress = val + }, + onUpdate () { + findComponentDownward(self.$root, `resource-list-index-${type}`)._updateList() + self.isUpdate = false + self.progress = 0 + modal.remove() + }, + onArchive () { + self.isUpdate = true + }, + close () { + self.progress = 0 + modal.remove() + } + }, + props: { + type: type, + fileName: item.fileName, + desc: item.description, + id: item.id + } + }) + } + }) + }, + _fileChildReUpload (type,item,data) { + if (this.progress) { + this._toggleArchive() + return + } + let self = this + let modal = this.$modal.dialog({ + closable: false, + showMask: true, + escClose: true, + className: 'update-file-modal', + transitionName: 'opacityp', + render (h) { + return h(mFileChildReUpdate, { + on: { + onProgress (val) { + self.progress = val + }, + onUpdate () { + findComponentDownward(self.$root, `resource-list-index-${type}`)._updateList(data) + self.isUpdate = false + self.progress = 0 + modal.remove() + }, + onArchive () { + self.isUpdate = true + }, + close () { + self.progress = 0 + modal.remove() + } + }, + props: { + type: type, + fileName: item.fileName, + desc: item.description, + id: item.id + } + }) + } + }) + }, _fileChildUpdate (type,data) { if (this.progress) { this._toggleArchive() @@ -372,7 +459,7 @@ computed: { ...mapState('user', ['userInfo']) }, - components: { mFileUpdate, mProgressBar, mDefinitionUpdate } + components: { mFileUpdate, mProgressBar, mDefinitionUpdate, mFileReUpload, mFileChildReUpdate } } 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 009f2bdac2..170ebbc38d 100755 --- a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js +++ b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js @@ -335,6 +335,7 @@ export default { Delete: 'Delete', 'Please enter keyword': 'Please enter keyword', 'File Upload': 'File Upload', + 'File ReUpload': 'File ReUpload', 'Drag the file into the current upload window': 'Drag the file into the current upload window', 'Drag area upload': 'Drag area upload', Upload: 'Upload', 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 c38eac25e5..704b447b12 100755 --- a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js +++ b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js @@ -333,6 +333,7 @@ export default { 'Drag the file into the current upload window': '请将文件拖拽到当前上传窗口内!', 'Drag area upload': '拖动区域上传', Upload: '上传', + 'ReUpload File': '重新上传文件', 'Please enter file name': '请输入文件名', 'Please select the file to upload': '请选择要上传的文件', 'Resources manage': '资源中心', From 78672b035900d5d06f1f66af73f2ee41f87086ca Mon Sep 17 00:00:00 2001 From: break60 <790061044@qq.com> Date: Tue, 4 Aug 2020 11:40:49 +0800 Subject: [PATCH 5/9] [Feture-3327][ui]Add the function of re-uploading files in the resource center (#3394) * Before creating a workflow, clear the canvas * [Fix-3256][ui] herry pick commit from dev for Fix admin user info update error (#3306) * [Feture-3327][ui]Add the function of re-uploading files in the resource center Co-authored-by: wuchunfu <319355703@qq.com> --- .../pages/taskInstance/_source/list.vue | 1 + .../pages/file/pages/list/_source/list.vue | 18 +- .../file/pages/subdirectory/_source/list.vue | 18 +- .../pages/udf/pages/resource/_source/list.vue | 19 +- .../fileUpdate/fileChildReUpdate.vue | 336 ++++++++++++++++++ .../components/fileUpdate/fileReUpload.vue | 335 +++++++++++++++++ .../src/js/module/components/nav/nav.vue | 89 ++++- .../src/js/module/i18n/locale/en_US.js | 1 + .../src/js/module/i18n/locale/zh_CN.js | 1 + 9 files changed, 814 insertions(+), 4 deletions(-) create mode 100644 dolphinscheduler-ui/src/js/module/components/fileUpdate/fileChildReUpdate.vue create mode 100644 dolphinscheduler-ui/src/js/module/components/fileUpdate/fileReUpload.vue diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue index cdcf0b0785..5fd0392ce0 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue @@ -98,6 +98,7 @@ data-toggle="tooltip" :title="$t('View log')" icon="ans-icon-log" + :disabled="item.taskType==='SUB_PROCESS'? true: false" @click="_refreshLog(item)"> diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/list/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/list/_source/list.vue index 4ccfa2eff3..4f256f8563 100755 --- a/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/list/_source/list.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/list/_source/list.vue @@ -40,7 +40,7 @@ {{$t('Update Time')}} - + {{$t('Operation')}} @@ -79,6 +79,18 @@ @click="_edit(item,$index)" icon="ans-icon-edit"> + + + + {{$t('Update Time')}} - + {{$t('Operation')}} @@ -79,6 +79,18 @@ @click="_edit(item,$index)" icon="ans-icon-edit"> + + + + {{$t('Update Time')}} - + {{$t('Operation')}} @@ -76,6 +76,16 @@ - + + + + + + + + + diff --git a/dolphinscheduler-ui/src/js/module/components/fileUpdate/fileReUpload.vue b/dolphinscheduler-ui/src/js/module/components/fileUpdate/fileReUpload.vue new file mode 100644 index 0000000000..c0ea678470 --- /dev/null +++ b/dolphinscheduler-ui/src/js/module/components/fileUpdate/fileReUpload.vue @@ -0,0 +1,335 @@ +/* + * 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. + */ + + + + diff --git a/dolphinscheduler-ui/src/js/module/components/nav/nav.vue b/dolphinscheduler-ui/src/js/module/components/nav/nav.vue index 7c82dc660e..697c3c5889 100644 --- a/dolphinscheduler-ui/src/js/module/components/nav/nav.vue +++ b/dolphinscheduler-ui/src/js/module/components/nav/nav.vue @@ -155,7 +155,9 @@ import { mapState, mapActions } from 'vuex' import { findComponentDownward } from '@/module/util/' import mFileUpdate from '@/module/components/fileUpdate/fileUpdate' + import mFileReUpload from '@/module/components/fileUpdate/fileReUpload' import mFileChildUpdate from '@/module/components/fileUpdate/fileChildUpdate' + import mFileChildReUpdate from '@/module/components/fileUpdate/fileChildReUpdate' import mResourceChildUpdate from '@/module/components/fileUpdate/resourceChildUpdate' import mDefinitionUpdate from '@/module/components/fileUpdate/definitionUpdate' import mProgressBar from '@/module/components/progressBar/progressBar' @@ -262,6 +264,91 @@ } }) }, + /* fileReUpload */ + _fileReUpload (type,item) { + if (this.progress) { + this._toggleArchive() + return + } + let self = this + let modal = this.$modal.dialog({ + closable: false, + showMask: true, + escClose: true, + className: 'update-file-modal', + transitionName: 'opacityp', + render (h) { + return h(mFileReUpload, { + on: { + onProgress (val) { + self.progress = val + }, + onUpdate () { + findComponentDownward(self.$root, `resource-list-index-${type}`)._updateList() + self.isUpdate = false + self.progress = 0 + modal.remove() + }, + onArchive () { + self.isUpdate = true + }, + close () { + self.progress = 0 + modal.remove() + } + }, + props: { + type: type, + fileName: item.fileName, + desc: item.description, + id: item.id + } + }) + } + }) + }, + _fileChildReUpload (type,item,data) { + if (this.progress) { + this._toggleArchive() + return + } + let self = this + let modal = this.$modal.dialog({ + closable: false, + showMask: true, + escClose: true, + className: 'update-file-modal', + transitionName: 'opacityp', + render (h) { + return h(mFileChildReUpdate, { + on: { + onProgress (val) { + self.progress = val + }, + onUpdate () { + findComponentDownward(self.$root, `resource-list-index-${type}`)._updateList(data) + self.isUpdate = false + self.progress = 0 + modal.remove() + }, + onArchive () { + self.isUpdate = true + }, + close () { + self.progress = 0 + modal.remove() + } + }, + props: { + type: type, + fileName: item.fileName, + desc: item.description, + id: item.id + } + }) + } + }) + }, _fileChildUpdate (type,data) { if (this.progress) { this._toggleArchive() @@ -372,7 +459,7 @@ computed: { ...mapState('user', ['userInfo']) }, - components: { mFileUpdate, mProgressBar, mDefinitionUpdate } + components: { mFileUpdate, mProgressBar, mDefinitionUpdate, mFileReUpload, mFileChildReUpdate } } 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 009f2bdac2..170ebbc38d 100755 --- a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js +++ b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js @@ -335,6 +335,7 @@ export default { Delete: 'Delete', 'Please enter keyword': 'Please enter keyword', 'File Upload': 'File Upload', + 'File ReUpload': 'File ReUpload', 'Drag the file into the current upload window': 'Drag the file into the current upload window', 'Drag area upload': 'Drag area upload', Upload: 'Upload', 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 c38eac25e5..704b447b12 100755 --- a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js +++ b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js @@ -333,6 +333,7 @@ export default { 'Drag the file into the current upload window': '请将文件拖拽到当前上传窗口内!', 'Drag area upload': '拖动区域上传', Upload: '上传', + 'ReUpload File': '重新上传文件', 'Please enter file name': '请输入文件名', 'Please select the file to upload': '请选择要上传的文件', 'Resources manage': '资源中心', From 88bc30b32b9af8dc1e8b306fb7808175e50f8fab Mon Sep 17 00:00:00 2001 From: lgcareer <18610854716@163.com> Date: Tue, 4 Aug 2020 14:55:49 +0800 Subject: [PATCH 6/9] [Improvement-3327][api]support re-upload the resource file (#3395) --- .../api/controller/ResourcesController.java | 35 +++---- .../api/service/ResourcesService.java | 91 ++++++++++++++++--- .../api/service/ResourcesServiceTest.java | 19 ++-- 3 files changed, 102 insertions(+), 43 deletions(-) diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ResourcesController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ResourcesController.java index cc09b2d650..2af8ccd767 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ResourcesController.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ResourcesController.java @@ -16,6 +16,11 @@ */ package org.apache.dolphinscheduler.api.controller; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang.StringUtils; import org.apache.dolphinscheduler.api.enums.Status; import org.apache.dolphinscheduler.api.exceptions.ApiException; import org.apache.dolphinscheduler.api.service.ResourcesService; @@ -26,11 +31,6 @@ import org.apache.dolphinscheduler.common.enums.ResourceType; import org.apache.dolphinscheduler.common.enums.UdfType; import org.apache.dolphinscheduler.common.utils.ParameterUtils; import org.apache.dolphinscheduler.dao.entity.User; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; -import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -63,23 +63,15 @@ public class ResourcesController extends BaseController { private UdfFuncService udfFuncService; /** - * create resource + * create directory * - * @param loginUser login user - * @param alias alias - * @param description description - * @param type type - * @return create result code - */ - - /** * @param loginUser login user * @param type type * @param alias alias * @param description description * @param pid parent id * @param currentDir current directory - * @return + * @return create result code */ @ApiOperation(value = "createDirctory", notes = "CREATE_RESOURCE_NOTES") @ApiImplicitParams({ @@ -140,6 +132,7 @@ public class ResourcesController extends BaseController { * @param resourceId resource id * @param type resource type * @param description description + * @param file resource file * @return update result code */ @ApiOperation(value = "updateResource", notes = "UPDATE_RESOURCE_NOTES") @@ -147,7 +140,8 @@ public class ResourcesController extends BaseController { @ApiImplicitParam(name = "id", value = "RESOURCE_ID", required = true, dataType = "Int", example = "100"), @ApiImplicitParam(name = "type", value = "RESOURCE_TYPE", required = true, dataType = "ResourceType"), @ApiImplicitParam(name = "name", value = "RESOURCE_NAME", required = true, dataType = "String"), - @ApiImplicitParam(name = "description", value = "RESOURCE_DESC", dataType = "String") + @ApiImplicitParam(name = "description", value = "RESOURCE_DESC", dataType = "String"), + @ApiImplicitParam(name = "file", value = "RESOURCE_FILE", required = true, dataType = "MultipartFile") }) @PostMapping(value = "/update") @ApiException(UPDATE_RESOURCE_ERROR) @@ -155,10 +149,11 @@ public class ResourcesController extends BaseController { @RequestParam(value = "id") int resourceId, @RequestParam(value = "type") ResourceType type, @RequestParam(value = "name") String alias, - @RequestParam(value = "description", required = false) String description) { - logger.info("login user {}, update resource, type: {}, resource alias: {}, desc: {}", - loginUser.getUserName(), type, alias, description); - return resourceService.updateResource(loginUser, resourceId, alias, description, type); + @RequestParam(value = "description", required = false) String description, + @RequestParam(value = "file" ,required = false) MultipartFile file) { + logger.info("login user {}, update resource, type: {}, resource alias: {}, desc: {}, file: {}", + loginUser.getUserName(), type, alias, description, file); + return resourceService.updateResource(loginUser, resourceId, alias, description, type, file); } /** diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java index 15b106f63e..e0ee7117c4 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java @@ -287,6 +287,7 @@ public class ResourcesService extends BaseService { * @param name name * @param desc description * @param type resource type + * @param file resource file * @return update result code */ @Transactional(rollbackFor = Exception.class) @@ -294,7 +295,8 @@ public class ResourcesService extends BaseService { int resourceId, String name, String desc, - ResourceType type) { + ResourceType type, + MultipartFile file) { Result result = new Result(); // if resource upload startup @@ -330,6 +332,42 @@ public class ResourcesService extends BaseService { return result; } + if (file != null) { + + // file is empty + if (file.isEmpty()) { + logger.error("file is empty: {}", file.getOriginalFilename()); + putMsg(result, Status.RESOURCE_FILE_IS_EMPTY); + return result; + } + + // file suffix + String fileSuffix = FileUtils.suffix(file.getOriginalFilename()); + String nameSuffix = FileUtils.suffix(name); + + // determine file suffix + if (!(StringUtils.isNotEmpty(fileSuffix) && fileSuffix.equalsIgnoreCase(nameSuffix))) { + /** + * rename file suffix and original suffix must be consistent + */ + logger.error("rename file suffix and original suffix must be consistent: {}", file.getOriginalFilename()); + putMsg(result, Status.RESOURCE_SUFFIX_FORBID_CHANGE); + return result; + } + + //If resource type is UDF, only jar packages are allowed to be uploaded, and the suffix must be .jar + if (Constants.UDF.equals(type.name()) && !JAR.equalsIgnoreCase(FileUtils.suffix(originFullName))) { + logger.error(Status.UDF_RESOURCE_SUFFIX_NOT_JAR.getMsg()); + putMsg(result, Status.UDF_RESOURCE_SUFFIX_NOT_JAR); + return result; + } + if (file.getSize() > Constants.MAX_FILE_SIZE) { + logger.error("file size is too large: {}", file.getOriginalFilename()); + putMsg(result, Status.RESOURCE_SIZE_EXCEED_LIMIT); + return result; + } + } + // query tenant by user id String tenantCode = getTenantCode(resource.getUserId(),result); if (StringUtils.isEmpty(tenantCode)){ @@ -379,26 +417,33 @@ public class ResourcesService extends BaseService { } // updateResource data - List childrenResource = listAllChildren(resource,false); + Date now = new Date(); resource.setAlias(name); resource.setFullName(fullName); resource.setDescription(desc); resource.setUpdateTime(now); + if (file != null) { + resource.setFileName(file.getOriginalFilename()); + resource.setSize(file.getSize()); + } try { resourcesMapper.updateById(resource); - if (resource.isDirectory() && CollectionUtils.isNotEmpty(childrenResource)) { - String matcherFullName = Matcher.quoteReplacement(fullName); - List childResourceList = new ArrayList<>(); - List resourceList = resourcesMapper.listResourceByIds(childrenResource.toArray(new Integer[childrenResource.size()])); - childResourceList = resourceList.stream().map(t -> { - t.setFullName(t.getFullName().replaceFirst(originFullName, matcherFullName)); - t.setUpdateTime(now); - return t; - }).collect(Collectors.toList()); - resourcesMapper.batchUpdateResource(childResourceList); + if (resource.isDirectory()) { + List childrenResource = listAllChildren(resource,false); + if (CollectionUtils.isNotEmpty(childrenResource)) { + String matcherFullName = Matcher.quoteReplacement(fullName); + List childResourceList = new ArrayList<>(); + List resourceList = resourcesMapper.listResourceByIds(childrenResource.toArray(new Integer[childrenResource.size()])); + childResourceList = resourceList.stream().map(t -> { + t.setFullName(t.getFullName().replaceFirst(originFullName, matcherFullName)); + t.setUpdateTime(now); + return t; + }).collect(Collectors.toList()); + resourcesMapper.batchUpdateResource(childResourceList); + } } putMsg(result, Status.SUCCESS); @@ -414,11 +459,31 @@ public class ResourcesService extends BaseService { logger.error(Status.UPDATE_RESOURCE_ERROR.getMsg(), e); throw new ServiceException(Status.UPDATE_RESOURCE_ERROR); } + // if name unchanged, return directly without moving on HDFS - if (originResourceName.equals(name)) { + if (originResourceName.equals(name) && file == null) { return result; } + if (file != null) { + // fail upload + if (!upload(loginUser, fullName, file, type)) { + logger.error("upload resource: {} file: {} failed.", name, file.getOriginalFilename()); + putMsg(result, Status.HDFS_OPERATION_ERROR); + throw new RuntimeException(String.format("upload resource: %s file: %s failed.", name, file.getOriginalFilename())); + } + if (!fullName.equals(originFullName)) { + try { + HadoopUtils.getInstance().delete(originHdfsFileName,false); + } catch (IOException e) { + logger.error(e.getMessage(),e); + throw new RuntimeException(String.format("delete resource: %s failed.", originFullName)); + } + } + return result; + } + + // get the path of dest file in hdfs String destHdfsFileName = HadoopUtils.getHdfsFileName(resource.getType(),tenantCode,fullName); diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java index 407f6b587f..1e3c95d775 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java @@ -19,7 +19,6 @@ package org.apache.dolphinscheduler.api.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.dolphinscheduler.api.enums.Status; -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; @@ -159,19 +158,19 @@ public class ResourcesServiceTest { PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(false); User user = new User(); //HDFS_NOT_STARTUP - Result result = resourcesService.updateResource(user,1,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE); + Result result = resourcesService.updateResource(user,1,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE,null); logger.info(result.toString()); Assert.assertEquals(Status.HDFS_NOT_STARTUP.getMsg(),result.getMsg()); //RESOURCE_NOT_EXIST Mockito.when(resourcesMapper.selectById(1)).thenReturn(getResource()); PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true); - result = resourcesService.updateResource(user,0,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE); + result = resourcesService.updateResource(user,0,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE,null); logger.info(result.toString()); Assert.assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(),result.getMsg()); //USER_NO_OPERATION_PERM - result = resourcesService.updateResource(user,1,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE); + result = resourcesService.updateResource(user,1,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE,null); logger.info(result.toString()); Assert.assertEquals(Status.USER_NO_OPERATION_PERM.getMsg(),result.getMsg()); @@ -186,7 +185,7 @@ public class ResourcesServiceTest { } catch (IOException e) { logger.error(e.getMessage(),e); } - result = resourcesService.updateResource(user, 1, "ResourcesServiceTest1.jar", "ResourcesServiceTest", ResourceType.UDF); + result = resourcesService.updateResource(user, 1, "ResourcesServiceTest1.jar", "ResourcesServiceTest", ResourceType.UDF,null); Assert.assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(),result.getMsg()); //SUCCESS @@ -199,25 +198,25 @@ public class ResourcesServiceTest { logger.error(e.getMessage(),e); } - result = resourcesService.updateResource(user,1,"ResourcesServiceTest.jar","ResourcesServiceTest",ResourceType.FILE); + result = resourcesService.updateResource(user,1,"ResourcesServiceTest.jar","ResourcesServiceTest",ResourceType.FILE,null); logger.info(result.toString()); Assert.assertEquals(Status.SUCCESS.getMsg(),result.getMsg()); //RESOURCE_EXIST Mockito.when(resourcesMapper.queryResourceList("/ResourcesServiceTest1.jar", 0, 0)).thenReturn(getResourceList()); - result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest",ResourceType.FILE); + result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest",ResourceType.FILE,null); logger.info(result.toString()); Assert.assertEquals(Status.RESOURCE_EXIST.getMsg(),result.getMsg()); //USER_NOT_EXIST Mockito.when(userMapper.selectById(Mockito.anyInt())).thenReturn(null); - result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest",ResourceType.UDF); + result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest",ResourceType.UDF,null); logger.info(result.toString()); Assert.assertTrue(Status.USER_NOT_EXIST.getCode() == result.getCode()); //TENANT_NOT_EXIST Mockito.when(userMapper.selectById(1)).thenReturn(getUser()); Mockito.when(tenantMapper.queryById(Mockito.anyInt())).thenReturn(null); - result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest",ResourceType.UDF); + result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest",ResourceType.UDF,null); logger.info(result.toString()); Assert.assertEquals(Status.TENANT_NOT_EXIST.getMsg(),result.getMsg()); @@ -231,7 +230,7 @@ public class ResourcesServiceTest { logger.error(e.getMessage(),e); } - result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest1.jar",ResourceType.UDF); + result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest1.jar",ResourceType.UDF,null); logger.info(result.toString()); Assert.assertEquals(Status.SUCCESS.getMsg(),result.getMsg()); From a3793be7dabb7aa84eb518b592d82860a1cc3003 Mon Sep 17 00:00:00 2001 From: lgcareer <18610854716@163.com> Date: Tue, 4 Aug 2020 15:04:56 +0800 Subject: [PATCH 7/9] [Fix-3390][server]Running hive sql task need find the hdfs path correctly (#3396) * [Fix-3390][api]Running hive sql task need find the hdfs path correctly * [Fix-3390][api]Running hive sql task need find the hdfs path correctly * update soft version --- .../common/process/ResourceInfo.java | 18 ------------------ .../server/utils/UDFUtils.java | 6 ++++-- sql/soft_version | 2 +- 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/process/ResourceInfo.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/process/ResourceInfo.java index c460354fe5..287f7267bc 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/process/ResourceInfo.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/process/ResourceInfo.java @@ -42,22 +42,4 @@ public class ResourceInfo { public void setRes(String res) { this.res = res; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - ResourceInfo that = (ResourceInfo) o; - - if (id != that.id) return false; - return res.equals(that.res); - } - - @Override - public int hashCode() { - int result = id; - result = 31 * result + res.hashCode(); - return result; - } } diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/UDFUtils.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/UDFUtils.java index 3a8c8fe7d6..1bc79ab94e 100644 --- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/UDFUtils.java +++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/UDFUtils.java @@ -70,14 +70,16 @@ public class UDFUtils { */ private static void buildJarSql(List sqls, Map udfFuncTenantCodeMap) { String defaultFS = HadoopUtils.getInstance().getConfiguration().get(Constants.FS_DEFAULTFS); - + String resourceFullName; Set> entries = udfFuncTenantCodeMap.entrySet(); for (Map.Entry entry:entries){ String uploadPath = HadoopUtils.getHdfsUdfDir(entry.getValue()); if (!uploadPath.startsWith("hdfs:")) { uploadPath = defaultFS + uploadPath; } - sqls.add(String.format("add jar %s%s", uploadPath, entry.getKey().getResourceName())); + resourceFullName = entry.getKey().getResourceName(); + resourceFullName = resourceFullName.startsWith("/") ? resourceFullName : String.format("/%s",resourceFullName); + sqls.add(String.format("add jar %s%s", uploadPath, resourceFullName)); } } diff --git a/sql/soft_version b/sql/soft_version index 6261a05bb0..d5e98f723f 100644 --- a/sql/soft_version +++ b/sql/soft_version @@ -1 +1 @@ -1.3.1 \ No newline at end of file +1.3.2 \ No newline at end of file From ce769d7965729e55d6d2036c99b307d337336b74 Mon Sep 17 00:00:00 2001 From: break60 <790061044@qq.com> Date: Tue, 4 Aug 2020 16:02:04 +0800 Subject: [PATCH 8/9] hive UDF function to modify the background color --- .../home/pages/dag/_source/formModel/tasks/sql.vue | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue index 9e7f3305e5..27b7633eda 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue @@ -495,5 +495,15 @@ color: #ff0000; padding-right: 4px; } + .udfs-model { + .ans-select { + .tag-container-disabled { + .tag-wrapper { + background-color: #fff; + color: #6d859e; + } + } + } + } From 5558c996c8b46bd5c60476257694ed1615eb46c1 Mon Sep 17 00:00:00 2001 From: break60 <790061044@qq.com> Date: Tue, 4 Aug 2020 16:11:27 +0800 Subject: [PATCH 9/9] fix --- .../js/conf/home/pages/dag/_source/formModel/tasks/sql.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue index 27b7633eda..9217f7145c 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue @@ -499,8 +499,13 @@ .ans-select { .tag-container-disabled { .tag-wrapper { + &:hover { + background-color: #fff; + } background-color: #fff; - color: #6d859e; + .tag-text { + color: #6d859e; + } } } }