You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by li...@apache.org on 2020/06/30 08:37:09 UTC

[incubator-dolphinscheduler] branch dev updated: Revert "branch dev merge from dev-1.3.0 (#3087)" (#3094)

This is an automated email from the ASF dual-hosted git repository.

lidongdai pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 5bac559  Revert "branch dev merge from dev-1.3.0 (#3087)" (#3094)
5bac559 is described below

commit 5bac559d22ee940e51477f73b62eb563b021631a
Author: bao liang <29...@users.noreply.github.com>
AuthorDate: Tue Jun 30 16:36:56 2020 +0800

    Revert "branch dev merge from dev-1.3.0 (#3087)" (#3094)
    
    This reverts commit ab6e4310b42ba6772b71334bc5360e470e933d7c.
    
    Co-authored-by: dailidong <da...@gmail.com>
---
 .github/workflows/ci_e2e.yml                       |    2 +-
 .github/workflows/ci_ut.yml                        |    2 +-
 LICENSE                                            |   16 -
 NOTICE                                             |   72 +-
 README.md                                          |   17 +-
 README_zh_CN.md                                    |   17 +-
 ambari_plugin/README.md                            |  106 +-
 .../common-services/DOLPHIN/1.3.0/alerts.json      |   62 +-
 .../DOLPHIN/1.3.0/configuration/dolphin-alert.xml  |    6 +
 .../1.3.0/configuration/dolphin-datasource.xml     |  261 ++
 .../DOLPHIN/1.3.0/configuration/dolphin-worker.xml |    9 +
 .../1.3.0/configuration/dolphin-zookeeper.xml      |    8 +
 .../common-services/DOLPHIN/1.3.0/metainfo.xml     |    4 +-
 .../1.3.0/package/scripts/dolphin_alert_service.py |    3 +-
 .../1.3.0/package/scripts/dolphin_api_service.py   |    3 +-
 .../package/scripts/dolphin_logger_service.py      |    4 +-
 .../package/scripts/dolphin_master_service.py      |    3 +-
 .../package/scripts/dolphin_worker_service.py      |    3 +-
 .../DOLPHIN/1.3.0/package/scripts/params.py        |    4 +
 dolphinscheduler-alert/pom.xml                     |    2 +-
 .../alert/template/impl/DefaultHTMLTemplate.java   |   19 +-
 .../dolphinscheduler/alert/utils/Constants.java    |    4 -
 .../src/main/resources/logback-alert.xml           |    2 +-
 .../template/impl/DefaultHTMLTemplateTest.java     |   43 +-
 dolphinscheduler-api/pom.xml                       |    2 +-
 .../api/controller/DataSourceController.java       |    2 +-
 .../apache/dolphinscheduler/api/enums/Status.java  |    2 +-
 .../api/service/DataSourceService.java             |   41 +-
 .../api/service/ProcessInstanceService.java        |    5 +-
 .../api/service/ResourcesService.java              |   66 +-
 .../dolphinscheduler/api/service/UsersService.java |   65 +-
 .../api/service/DataSourceServiceTest.java         |   65 +-
 .../api/service/ResourcesServiceTest.java          |   14 +-
 dolphinscheduler-common/pom.xml                    |    2 +-
 .../apache/dolphinscheduler/common/Constants.java  |   13 +-
 .../common/enums/ExecutionStatus.java              |   11 +-
 .../dolphinscheduler/common/model/TaskNode.java    |   13 -
 .../common/task/datax/DataxParameters.java         |   13 +-
 .../dolphinscheduler/common/utils/DateUtils.java   |    2 +-
 .../common/utils/DependentUtils.java               |    6 -
 .../dolphinscheduler/common/utils/HadoopUtils.java |   20 +-
 .../common/utils/ParameterUtils.java               |   22 +-
 .../dolphinscheduler/common/utils/ResInfo.java     |    8 +-
 .../common/utils/ScriptRunner.java                 |   34 +-
 .../common/utils/dependent/DependentDateUtils.java |   27 -
 .../src/main/resources/common.properties           |   32 +-
 .../common/shell/ShellExecutorTest.java            |   49 +-
 .../common/utils/DependentUtilsTest.java           |   40 -
 .../common/utils/HadoopUtilsTest.java              |    4 +-
 dolphinscheduler-dao/pom.xml                       |    2 +-
 .../dao/datasource/BaseDataSource.java             |   13 +-
 .../dao/datasource/MySQLDataSource.java            |   47 -
 .../dao/datasource/OracleDataSource.java           |   12 +-
 .../dolphinscheduler/dao/entity/ProcessData.java   |   10 -
 .../dao/mapper/ProcessDefinitionMapper.java        |    7 -
 .../dao/upgrade/DolphinSchedulerManager.java       |    7 +-
 .../dao/upgrade/ProcessDefinitionDao.java          |   92 -
 .../dolphinscheduler/dao/upgrade/UpgradeDao.java   |   64 +-
 .../dao/upgrade/WorkerGroupDao.java                |   65 -
 .../src/main/resources/datasource.properties       |    3 +-
 .../dao/mapper/ProcessDefinitionMapper.xml         |    6 -
 .../dolphinscheduler/dao/mapper/UserMapper.xml     |    6 +-
 .../dao/mapper/WorkerGroupMapper.xml               |   40 +
 .../dao/datasource/MySQLDataSourceTest.java        |   64 -
 .../dao/datasource/OracleDataSourceTest.java       |    8 +-
 .../dao/mapper/ProcessDefinitionMapperTest.java    |   27 +-
 .../dao/upgrade/ProcessDefinitionDaoTest.java      |   65 -
 .../dao/upgrade/WokrerGrouopDaoTest.java           |   51 -
 dolphinscheduler-dist/pom.xml                      |    4 +-
 dolphinscheduler-dist/release-docs/LICENSE         |   50 +-
 dolphinscheduler-dist/release-docs/NOTICE          |   92 +-
 .../release-docs/licenses/LICENSE-ant-1.6.5.txt    |  203 --
 .../release-docs/licenses/LICENSE-commons-el.txt   |   60 +
 ...rator-framwork.txt => LICENSE-commons-lang.txt} |    0
 ...mons-lang-2.6.txt => LICENSE-commons-lang3.txt} |    0
 .../release-docs/licenses/LICENSE-core-3.1.1.txt   |   70 -
 ...-framwork.txt => LICENSE-curator-framework.txt} |    0
 .../release-docs/licenses/LICENSE-freemarker.txt   |   49 +
 .../release-docs/licenses/LICENSE-grpc-context.txt |   36 +
 .../release-docs/licenses/LICENSE-grpc-core.txt    |   36 +
 .../release-docs/licenses/LICENSE-grpc-netty.txt   |   36 +
 .../licenses/LICENSE-grpc-protobuf-little.txt      |   36 +
 .../licenses/LICENSE-grpc-protobuf.txt             |   36 +
 .../release-docs/licenses/LICENSE-grpc-stub.txt    |   36 +
 .../release-docs/licenses/LICENSE-h2-1.4.200.txt   |  552 ---
 ...ramwork.txt => LICENSE-instrumentation-api.txt} |    5 +-
 .../licenses/LICENSE-jackson-annotations.txt       |    0
 .../release-docs/licenses/LICENSE-jackson-core.txt |    0
 .../licenses/LICENSE-jackson-databind.txt          |    0
 ...core-2.11.2.txt => LICENSE-jasper-compiler.txt} |    4 +-
 .../licenses/LICENSE-jasper-runtime.txt            |   14 +
 .../licenses/LICENSE-jsp-api-2.1-6.1.14.txt        |   53 -
 .../licenses/LICENSE-log4j-api-2.11.2.txt          |   53 -
 ...rator-framwork.txt => LICENSE-netty-buffer.txt} |    5 +-
 ...or-framwork.txt => LICENSE-netty-code-http.txt} |    5 +-
 ...-framwork.txt => LICENSE-netty-codec-http2.txt} |    5 +-
 ...-framwork.txt => LICENSE-netty-codec-socks.txt} |    5 +-
 ...urator-framwork.txt => LICENSE-netty-codec.txt} |    5 +-
 ...rator-framwork.txt => LICENSE-netty-common.txt} |    5 +-
 ...ramwork.txt => LICENSE-netty-handler-proxy.txt} |    5 +-
 ...ator-framwork.txt => LICENSE-netty-handler.txt} |    5 +-
 ...tor-framwork.txt => LICENSE-netty-resolver.txt} |    5 +-
 ...or-framwork.txt => LICENSE-netty-transport.txt} |    5 +-
 ...tor-framwork.txt => LICENSE-opencensus-api.txt} |    2 +-
 ...=> LICENSE-opencensus-contrib-grpc-metrics.txt} |    2 +-
 ....txt => LICENSE-proto-google-common-protos.txt} |    2 +-
 .../licenses/LICENSE-protobuf-java-util.txt        |   42 +
 .../licenses/ui-licenses/LICENSE-normalize         |    8 +
 dolphinscheduler-microbench/pom.xml                |    2 +-
 dolphinscheduler-plugin-api/pom.xml                |    2 +-
 dolphinscheduler-remote/pom.xml                    |    2 +-
 .../remote/NettyRemotingClient.java                |    2 +-
 .../remote/command/CommandType.java                |    2 +-
 .../command/log/RemoveTaskLogRequestCommand.java   |   63 -
 .../command/log/RemoveTaskLogResponseCommand.java  |   63 -
 .../remote/RemoveTaskLogRequestCommandTest.java    |   35 -
 dolphinscheduler-server/pom.xml                    |    2 +-
 .../server/log/LoggerRequestProcessor.java         |   35 +-
 .../dolphinscheduler/server/log/LoggerServer.java  |    1 -
 .../server/master/config/MasterConfig.java         |   11 -
 .../master/consumer/TaskPriorityQueueConsumer.java |   60 +-
 .../server/master/dispatch/ExecutorDispatcher.java |    5 +-
 .../dispatch/host/LowerWeightHostManager.java      |   49 +-
 .../server/master/processor/TaskAckProcessor.java  |    2 +-
 .../server/master/registry/MasterRegistry.java     |   33 +-
 .../master/runner/DependentTaskExecThread.java     |    2 +-
 .../server/master/runner/MasterExecThread.java     |   15 +-
 .../server/master/runner/MasterTaskExecThread.java |   29 +-
 .../dolphinscheduler/server/monitor/RunConfig.java |   15 +-
 .../server/registry/HeartBeatTask.java             |   84 -
 .../server/utils/DependentExecute.java             |   32 +-
 .../server/worker/config/WorkerConfig.java         |    2 +-
 .../worker/processor/TaskCallbackService.java      |   42 +-
 .../server/worker/processor/TaskKillProcessor.java |    1 -
 .../server/worker/registry/WorkerRegistry.java     |   33 +-
 .../server/worker/runner/TaskExecuteThread.java    |   10 -
 .../worker/task/AbstractCommandExecutor.java       |   83 +-
 .../server/worker/task/ShellCommandExecutor.java   |    7 +-
 .../server/worker/task/datax/DataxTask.java        |   59 +-
 .../server/worker/task/shell/ShellTask.java        |    2 +-
 .../server/worker/task/sql/SqlTask.java            |    2 +-
 .../generator/sources/MysqlSourceGenerator.java    |    4 +-
 .../dolphinscheduler/server/zk/ZKMasterClient.java |    5 +-
 .../src/main/resources/config/install_config.conf  |   32 +-
 .../src/main/resources/master.properties           |    8 +-
 .../src/main/resources/worker.properties           |    9 +-
 .../server/log/LoggerServerTest.java               |   62 -
 .../server/master/DependentTaskTest.java           |   64 +-
 .../consumer/TaskPriorityQueueConsumerTest.java    |    3 +-
 .../server/master/registry/MasterRegistryTest.java |    4 +-
 .../master/runner/MasterTaskExecThreadTest.java    |   41 +-
 .../server/registry/DependencyConfig.java          |    5 -
 .../worker/processor/TaskCallbackServiceTest.java  |   34 +-
 .../server/worker/registry/WorkerRegistryTest.java |    4 +-
 .../server/worker/task/datax/DataxTaskTest.java    |    1 -
 dolphinscheduler-service/pom.xml                   |   24 +-
 .../service/log/LogClientService.java              |   30 -
 .../service/permission/PermissionCheck.java        |    4 -
 .../service/process/ProcessService.java            |   65 +-
 .../service/quartz/ProcessScheduleJob.java         |    4 +-
 .../service/zk/AbstractZKClient.java               |   17 +-
 .../dolphinscheduler/service/zk/ZKServer.java      |    5 +-
 .../dolphinscheduler/service/zk/ZKServerTest.java  |   12 +-
 dolphinscheduler-ui/build/config.js                |    6 +-
 dolphinscheduler-ui/favicon.ico                    |  Bin 4286 -> 0 bytes
 dolphinscheduler-ui/pom.xml                        |    2 +-
 dolphinscheduler-ui/src/js/conf/home/index.js      |    2 +
 .../src/js/conf/home/pages/dag/_source/dag.js      |   22 +-
 .../src/js/conf/home/pages/dag/_source/dag.vue     |   24 +-
 .../home/pages/dag/_source/formModel/formModel.vue |   28 +-
 .../dag/_source/formModel/tasks/_source/commcon.js |    8 -
 .../pages/dag/_source/formModel/tasks/datax.vue    |   81 -
 .../home/pages/dag/_source/formModel/tasks/mr.vue  |    2 +-
 .../pages/dag/_source/formModel/tasks/python.vue   |   37 -
 .../home/pages/dag/_source/formModel/tasks/sql.vue |   37 -
 .../pages/dag/_source/formModel/tasks/sqoop.vue    |   74 +-
 .../dag/_source/formModel/tasks/sub_process.vue    |    7 +-
 .../home/pages/dag/_source/plugIn/jsPlumbHandle.js |   40 +-
 .../js/conf/home/pages/dag/_source/plugIn/util.js  |    4 +-
 .../home/pages/dag/_source/startingParam/index.vue |    4 +-
 .../src/js/conf/home/pages/dag/_source/udp/udp.vue |    9 +-
 .../pages/list/_source/createDataSource.vue        |    6 +-
 .../home/pages/monitor/pages/servers/master.vue    |    2 +-
 .../home/pages/monitor/pages/servers/worker.vue    |    2 +-
 .../pages/definition/pages/list/_source/list.vue   |    9 +-
 .../pages/definition/pages/list/_source/timing.vue |   18 +-
 .../projects/pages/definition/pages/list/index.vue |    3 -
 .../pages/instance/pages/list/_source/list.vue     |   24 +-
 .../projects/pages/instance/pages/list/index.vue   |    3 -
 .../projects/pages/taskInstance/_source/list.vue   |    2 +-
 .../pages/projects/pages/taskInstance/index.vue    |    7 +-
 .../pages/file/pages/list/_source/rename.vue       |    2 +-
 .../pages/udf/pages/function/_source/createUdf.vue |    5 -
 .../pages/udf/pages/resource/_source/rename.vue    |    2 +-
 .../security/pages/users/_source/createUser.vue    |    7 +-
 .../src/js/conf/home/store/security/actions.js     |    2 +-
 .../js/module/components/fileUpdate/udfUpdate.vue  |    6 +-
 .../src/js/module/i18n/locale/en_US.js             |   11 +-
 .../src/js/module/i18n/locale/zh_CN.js             |    9 +-
 dolphinscheduler-ui/src/lib/external/email.js      |    2 +-
 .../src/sass/common/_animation.scss                | 3658 ++++++++++++++++++++
 dolphinscheduler-ui/src/sass/common/index.scss     |    1 +
 dolphinscheduler-ui/src/view/home/index.html       |    2 +-
 dolphinscheduler-ui/src/view/login/index.html      |    2 +-
 licenses/LICENSE-mybatis.txt                       |   13 -
 pom.xml                                            |   44 +-
 script/scp-hosts.sh                                |   20 +-
 script/start-all.sh                                |   16 +-
 script/stop-all.sh                                 |   16 +-
 sql/dolphinscheduler-postgre.sql                   |    7 +-
 sql/dolphinscheduler_mysql.sql                     |    2 +-
 sql/h2.mv.db                                       |  Bin 0 -> 110592 bytes
 .../mysql/dolphinscheduler_ddl.sql                 |  166 +-
 .../1.2.2_schema/mysql/dolphinscheduler_dml.sql    |   26 +-
 .../postgresql/dolphinscheduler_ddl.sql            |  173 +-
 .../postgresql/dolphinscheduler_dml.sql            |   22 +-
 .../1.3.0_schema/mysql/dolphinscheduler_dml.sql    |   26 -
 .../postgresql/dolphinscheduler_dml.sql            |   24 -
 tools/dependencies/known-dependencies.txt          |    2 +-
 219 files changed, 5581 insertions(+), 3722 deletions(-)

diff --git a/.github/workflows/ci_e2e.yml b/.github/workflows/ci_e2e.yml
index 82c81ef..68230e5 100644
--- a/.github/workflows/ci_e2e.yml
+++ b/.github/workflows/ci_e2e.yml
@@ -69,6 +69,6 @@ jobs:
         uses: actions/upload-artifact@v1
         with:
           name: dslogs
-          path: /var/lib/docker/volumes/docker-swarm_dolphinscheduler-logs/_data
+          path: /var/lib/docker/volumes/dolphinscheduler-logs/_data
 
 
diff --git a/.github/workflows/ci_ut.yml b/.github/workflows/ci_ut.yml
index 70790a7..230e85d 100644
--- a/.github/workflows/ci_ut.yml
+++ b/.github/workflows/ci_ut.yml
@@ -62,7 +62,7 @@ jobs:
           git fetch origin
       - name: Compile
         run: |
-          export MAVEN_OPTS='-Dmaven.repo.local=.m2/repository -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -Xmx5g'
+          export MAVEN_OPTS='-Dmaven.repo.local=.m2/repository -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -Xmx3g'
           mvn test -B -Dmaven.test.skip=false
       - name: Upload coverage report to codecov
         run: |
diff --git a/LICENSE b/LICENSE
index dba3bc5..261eeb9 100644
--- a/LICENSE
+++ b/LICENSE
@@ -199,19 +199,3 @@
    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.
-=======================================================================
-Apache DolphinScheduler (incubating) Subcomponents:
-
-The Apache DolphinScheduler (incubating) project contains subcomponents with separate copyright
-notices and license terms. Your use of the source code for the these
-subcomponents is subject to the terms and conditions of the following
-licenses.
-
-========================================================================
-Apache 2.0 licenses
-========================================================================
-
-The following components are provided under the Apache License. See project link for details.
-The text of each license is the standard Apache 2.0 license.
-    ScriptRunner from https://github.com/mybatis/mybatis-3 Apache 2.0
-    mvnw files from https://github.com/takari/maven-wrapper Apache 2.0
diff --git a/NOTICE b/NOTICE
index 63b57af..72b5f06 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,75 +1,5 @@
 Apache DolphinScheduler (incubating)
-Copyright 2019-2020 The Apache Software Foundation
+Copyright 2019 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
-
-mybatis-3
-iBATIS
-   This product includes software developed by
-   The Apache Software Foundation (http://www.apache.org/).
-
-   Copyright 2010 The Apache Software Foundation
-
-   Licensed 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.
-
-OGNL
-//--------------------------------------------------------------------------
-//  Copyright (c) 2004, Drew Davidson and Luke Blanshard
-//  All rights reserved.
-//
-//  Redistribution and use in source and binary forms, with or without
-//  modification, are permitted provided that the following conditions are
-//  met:
-//
-//  Redistributions of source code must retain the above copyright notice,
-//  this list of conditions and the following disclaimer.
-//  Redistributions in binary form must reproduce the above copyright
-//  notice, this list of conditions and the following disclaimer in the
-//  documentation and/or other materials provided with the distribution.
-//  Neither the name of the Drew Davidson nor the names of its contributors
-//  may be used to endorse or promote products derived from this software
-//  without specific prior written permission.
-//
-//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-//  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-//  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-//  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-//  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-//  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-//  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-//  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-//  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-//  DAMAGE.
-//--------------------------------------------------------------------------
-
-Refactored SqlBuilder class (SQL, AbstractSQL)
-
-   This product includes software developed by
-   Adam Gent (https://gist.github.com/3650165)
-
-   Copyright 2010 Adam Gent
-
-   Licensed 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.
\ No newline at end of file
diff --git a/README.md b/README.md
index 97e1a95..b88fdbe 100644
--- a/README.md
+++ b/README.md
@@ -55,10 +55,20 @@ Overload processing: Task queue mechanism, the number of schedulable tasks on a
 ![monitor](https://user-images.githubusercontent.com/59273635/75625839-c698a480-5bfc-11ea-8bbe-895b561b337f.png)
 ![security](https://user-images.githubusercontent.com/15833811/75236441-bfd2f180-57f8-11ea-88bd-f24311e01b7e.png)
 ![treeview](https://user-images.githubusercontent.com/15833811/75217191-3fe56100-57d1-11ea-8856-f19180d9a879.png)
-### Online Demo
+### Document
+
+- <a href="https://dolphinscheduler.apache.org/en-us/docs/1.2.0/user_doc/backend-deployment.html" target="_blank">Backend deployment documentation</a>
+
+- <a href="https://dolphinscheduler.apache.org/en-us/docs/1.2.0/user_doc/frontend-deployment.html" target="_blank">Front-end deployment documentation</a>
+
+- [**User manual**](https://dolphinscheduler.apache.org/en-us/docs/1.2.0/user_doc/system-manual.html?_blank "System manual")
+
+- [**Upgrade document**](https://dolphinscheduler.apache.org/en-us/docs/1.2.0/user_doc/upgrade.html?_blank "Upgrade document")
 
 - <a href="http://106.75.43.194:8888" target="_blank">Online Demo</a>
 
+More documentation please refer to <a href="https://dolphinscheduler.apache.org/en-us/docs/1.2.0/user_doc/quick-start.html" target="_blank">[DolphinScheduler online documentation]</a>
+
 ### Recent R&D plan
 Work plan of Dolphin Scheduler: [R&D plan](https://github.com/apache/incubator-dolphinscheduler/projects/1), Under the `In Develop` card is what is currently being developed, TODO card is to be done (including feature ideas)
 
@@ -76,8 +86,9 @@ Welcome to participate in contributing, please refer to the process of submittin
 Artifact:
 
 ```
-dolphinscheduler-dist/target/apache-dolphinscheduler-incubating-${latest.release.version}-dolphinscheduler-bin.tar.gz: Binary package of DolphinScheduler
-dolphinscheduler-dist/target/apache-dolphinscheduler-incubating-${latest.release.version}-src.zip: Source code package of DolphinScheduler
+dolphinscheduler-dist/dolphinscheduler-backend/target/apache-dolphinscheduler-incubating-${latest.release.version}-dolphinscheduler-backend-bin.tar.gz: Binary package of DolphinScheduler-Backend
+dolphinscheduler-dist/dolphinscheduler-front/target/apache-dolphinscheduler-incubating-${latest.release.version}-dolphinscheduler-front-bin.tar.gz: Binary package of DolphinScheduler-UI
+dolphinscheduler-dist/dolphinscheduler-src/target/apache-dolphinscheduler-incubating-${latest.release.version}-src.zip: Source code package of DolphinScheduler
 ```
 
 ### Thanks
diff --git a/README_zh_CN.md b/README_zh_CN.md
index a02a2c3..2c8aa11 100644
--- a/README_zh_CN.md
+++ b/README_zh_CN.md
@@ -50,10 +50,20 @@ Dolphin Scheduler Official Website
 
 ![security](https://user-images.githubusercontent.com/15833811/75209633-baa28200-57b9-11ea-9def-94bef2e212a7.jpg)
 
-### 我要体验
+### 文档
+
+- <a href="https://dolphinscheduler.apache.org/zh-cn/docs/1.2.0/user_doc/backend-deployment.html" target="_blank">后端部署文档</a>
+
+- <a href="https://dolphinscheduler.apache.org/zh-cn/docs/1.2.0/user_doc/frontend-deployment.html" target="_blank">前端部署文档</a>
+
+- [**使用手册**](https://dolphinscheduler.apache.org/zh-cn/docs/1.2.0/user_doc/system-manual.html?_blank "系统使用手册")
+
+- [**升级文档**](https://dolphinscheduler.apache.org/zh-cn/docs/1.2.0/user_doc/upgrade.html?_blank "升级文档")
 
 - <a href="http://106.75.43.194:8888" target="_blank">我要体验</a>
 
+更多文档请参考 <a href="https://dolphinscheduler.apache.org/zh-cn/docs/1.2.0/user_doc/quick-start.html" target="_blank">DolphinScheduler中文在线文档</a>
+
 
 ### 近期研发计划
 
@@ -73,8 +83,9 @@ DolphinScheduler的工作计划:<a href="https://github.com/apache/incubator-d
 Artifact:
 
 ```
-dolphinscheduler-dist/target/apache-dolphinscheduler-incubating-${latest.release.version}-dolphinscheduler-bin.tar.gz: Binary package of DolphinScheduler
-dolphinscheduler-dist/target/apache-dolphinscheduler-incubating-${latest.release.version}-src.zip: Source code package of DolphinScheduler
+dolphinscheduler-dist/dolphinscheduler-backend/target/apache-dolphinscheduler-incubating-${latest.release.version}-dolphinscheduler-backend-bin.tar.gz: Binary package of DolphinScheduler-Backend
+dolphinscheduler-dist/dolphinscheduler-front/target/apache-dolphinscheduler-incubating-${latest.release.version}-dolphinscheduler-front-bin.tar.gz: Binary package of DolphinScheduler-UI
+dolphinscheduler-dist/dolphinscheduler-src/target/apache-dolphinscheduler-incubating-${latest.release.version}-src.zip: Source code package of DolphinScheduler
 ```
 
 ### 感谢
diff --git a/ambari_plugin/README.md b/ambari_plugin/README.md
index 1778266..bd634d4 100644
--- a/ambari_plugin/README.md
+++ b/ambari_plugin/README.md
@@ -1,46 +1,27 @@
-### Instructions for using the Dolphin Scheduler's Ambari plug-in
+### Dolphin Scheduler的Ambari插件使用说明
 
-#### Note
+##### 备注
 
-1. This document is intended for users with a basic understanding of Ambari
-2. This document is a description of adding the Dolphin Scheduler service to the installed Ambari service
-3. This document is based on version 2.5.2 of Ambari 
+1. 本文档适用于对Ambari中基本了解的用户
+2. 本文档是对已安装Ambari服务添加Dolphin Scheduler(1.3.0版本)服务的说明
 
-####   Installation preparation
+##### 一  安装准备
 
-1. Prepare the RPM packages
+1. 准备RPM包
 
-   - It is generated by executing the command ```mvn -U clean install  -Prpmbuild  -Dmaven.test.skip=true -X``` in the project root directory (In the directory: dolphinscheduler-dist/target/rpm/apache-dolphinscheduler-incubating/RPMS/noarch )
+   - 在源码dolphinscheduler-dist目录下执行命令```mvn -U clean install rpm:attached-rpm  -Prpmbuild  -Dmaven.test.skip=true -X```即可生成(在目录 dolphinscheduler-dist/target/rpm/apache-dolphinscheduler-incubating/RPMS/noarch 下)
 
-2. Create an installation for DS,who have read and write access to the installation directory (/opt/soft)
+2. 创建DS的安装用户--权限
 
-3. Install with rpm package
-
-   - Manual installation (recommended):
-      - Copy the prepared RPM packages to each node of the cluster.
-      - Execute with DS installation user: ```rpm -ivh apache-dolphinscheduler-incubating-xxx.noarch.rpm```
-      - Mysql-connector-java packaged using the default POM file will not be included.
-      - The RPM package was packaged in the project with the installation path of /opt/soft. 
-        If you use mysql as the database, you need add it manually.
-      
-   - Automatic installation with ambari
-      - Each node of the cluster needs to configure the local yum source
-      - Copy the prepared RPM packages to each node local yum source
-
-4. Copy plug-in directory
-
-   - copy directory ambari_plugin/common-services/DOLPHIN to ambari-server/resources/common-services/
-   - copy directory ambari_plugin/statcks/DOLPHIN to ambari-server/resources/stacks/HDP/2.6/services/--stack version is selected based on the actual situation
-
-5. Initializes the database information
+3. 初始化数据库信息
 
    ```
-   -- Create the database for the Dolphin Scheduler:dolphinscheduler
+   -- 创建Dolphin Scheduler的数据库:dolphinscheduler
    CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE
    utf8_general_ci;
    
-   -- Initialize the user and password for the dolphinscheduler database and assign permissions
-   -- Replace the {user} in the SQL statement below with the user of the dolphinscheduler database
+   -- 初始化dolphinscheduler数据库的用户和密码,并分配权限
+   -- 替换下面sql语句中的{user}为dolphinscheduler数据库的用户
    GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%' IDENTIFIED BY '{password}';
    GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost' IDENTIFIED BY
    '{password}';
@@ -49,84 +30,39 @@
 
  
 
-#### Ambari Install Dolphin Scheduler
-- **NOTE: You have to install zookeeper first**
+##### 二  Ambari安装Dolphin Scheduler
 
-1. Install  Dolphin Scheduler on ambari web interface
+1. Ambari界面安装Dolphin Scheduler
 
    ![](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_001.png)
 
-2. Select the nodes for the Dolphin Scheduler's Master installation
+2. 选择Dolphin Scheduler的Master安装的节点
 
    ![](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_002.png)
 
-3. Configure the Dolphin Scheduler's nodes for Worker, Api, Logger, Alert installation
+3. 配置Dolphin Scheduler的Worker、Api、Logger、Alert安装的节点
 
    ![](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_003.png)
 
-4. Set the installation users of the Dolphin Scheduler service (created in step 1) and the user groups they belong to
+4. 设置Dolphin Scheduler服务的安装用户(**步骤一中创建的**)及所属的用户组
 
    ![](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_004.png)
 
-5. System Env Optimization will export some system environment config. Modify according to actual situation
-
-   ![](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_020.png)
-   
-6. Configure the database information (same as in the initialization database in step 1)
+5. 配置数据库的信息(和步骤一中初始化数据库中一致)
 
    ![](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_005.png)
 
-7. Configure additional information if needed
+6. 配置其它的信息--如果需要的话
 
    ![](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_006.png)
 
    ![](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_007.png)
 
-8. Perform the next steps as normal
+7. 正常执行接下来的步骤
 
    ![](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_008.png)
 
-9. The interface after successful installation
+8. 安装成功后的界面
 
    ![](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_009.png)
-   
-   
-
-------
-
-
-
-#### Add components to the node through Ambari -- for example, add a DS Worker
-
-***NOTE***: DS Logger is the installation dependent component of DS Worker in Dolphin's Ambari installation (need to add installation first; Prevent the Job log on the corresponding Worker from being checked)
-
-1. Locate the component node to add -- for example, node ark3
-
-   ![DS2_AMBARI_011](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_011.png)
-
-2. Add components -- the drop-down list is all addable
-
-   ![DS2_AMBARI_012](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_012.png)
-
-3. Confirm component addition
-
-   ![DS2_AMBARI_013](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_013.png)
-
-4. After adding DS Worker and DS Logger components
-
-   ![DS2_AMBARI_015](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_015.png)
-
-5. Start the component
-
-   ![DS2_AMBARI_016](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_016.png)
-
-
-#### Remove the component from the node with Ambari
-
-1. Stop the component in the corresponding node
-
-   ![DS2_AMBARI_018](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_018.png)
-
-2. Remove components
 
-   ![DS2_AMBARI_019](https://github.com/apache/incubator-dolphinscheduler-website/blob/master/img/ambari-plugin/DS2_AMBARI_019.png)
\ No newline at end of file
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/alerts.json b/ambari_plugin/common-services/DOLPHIN/1.3.0/alerts.json
index 130335d..d239c03 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/alerts.json
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/alerts.json
@@ -28,33 +28,6 @@
         }
       }
     ],
-    "DOLPHIN_LOGGER": [
-      {
-        "name": "dolphin_logger_port_check",
-        "label": "dolphin_logger_port_check",
-        "description": "dolphin_logger_port_check.",
-        "interval": 10,
-        "scope": "ANY",
-        "source": {
-          "type": "PORT",
-          "uri": "{{dolphin-common/loggerserver.rpc.port}}",
-          "default_port": 50051,
-          "reporting": {
-            "ok": {
-              "text": "TCP OK - {0:.3f}s response on port {1}"
-            },
-            "warning": {
-              "text": "TCP OK - {0:.3f}s response on port {1}",
-              "value": 1.5
-            },
-            "critical": {
-              "text": "Connection failed: {0} to {1}:{2}",
-              "value": 5.0
-            }
-          }
-        }
-      }
-    ],
     "DOLPHIN_MASTER": [
       {
         "name": "DOLPHIN_MASTER_CHECK",
@@ -123,7 +96,7 @@
     ],
     "DOLPHIN_ALERT": [
       {
-        "name": "DOLPHIN_DOLPHIN_ALERT_CHECK",
+        "name": "DOLPHIN_ALERT_CHECK",
         "label": "check dolphin scheduler alert status",
         "description": "",
         "interval":10,
@@ -153,6 +126,39 @@
           ]
         }
       }
+    ],
+    "DOLPHIN_LOGGER": [
+      {
+        "name": "DOLPHIN_LOGGER_CHECK",
+        "label": "check dolphin scheduler logger status",
+        "description": "",
+        "interval":10,
+        "scope": "HOST",
+        "enabled": true,
+        "source": {
+          "type": "SCRIPT",
+          "path": "DOLPHIN/1.3.0/package/alerts/alert_dolphin_scheduler_status.py",
+          "parameters": [
+
+            {
+              "name": "connection.timeout",
+              "display_name": "Connection Timeout",
+              "value": 5.0,
+              "type": "NUMERIC",
+              "description": "The maximum time before this alert is considered to be CRITICAL",
+              "units": "seconds",
+              "threshold": "CRITICAL"
+            },
+            {
+              "name": "alertName",
+              "display_name": "alertName",
+              "value": "DOLPHIN_LOGGER",
+              "type": "STRING",
+              "description": "alert name"
+            }
+          ]
+        }
+      }
     ]
   }
 }
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-alert.xml b/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-alert.xml
index 32abcc7..5f44a1a 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-alert.xml
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-alert.xml
@@ -22,6 +22,12 @@
 		<on-ambari-upgrade add="true"/>
 	</property>
 	<property>
+		<name>alert.template</name>
+		<value>html</value>
+		<description>alter msg template, default is html template</description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
 		<name>mail.protocol</name>
 		<value>SMTP</value>
 		<description></description>
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-datasource.xml b/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-datasource.xml
index 02d8de0..6e50a1b 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-datasource.xml
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-datasource.xml
@@ -203,4 +203,265 @@
 		<description></description>
 		<on-ambari-upgrade add="true"/>
 	</property>
+
+	<property>
+		<name>mybatis-plus.mapper-locations</name>
+		<value>classpath*:/org.apache.dolphinscheduler.dao.mapper/*.xml</value>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.typeEnumsPackage</name>
+		<value>org.apache.dolphinscheduler.*.enums</value>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.typeAliasesPackage</name>
+		<value>org.apache.dolphinscheduler.dao.entity</value>
+		<description>
+			Entity scan, where multiple packages are separated by a comma or semicolon
+		</description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.global-config.db-config.id-type</name>
+		<value>AUTO</value>
+		<value-attributes>
+			<type>value-list</type>
+			<entries>
+				<entry>
+					<value>AUTO</value>
+					<label>AUTO</label>
+				</entry>
+				<entry>
+					<value>INPUT</value>
+					<label>INPUT</label>
+				</entry>
+				<entry>
+					<value>ID_WORKER</value>
+					<label>ID_WORKER</label>
+				</entry>
+				<entry>
+					<value>UUID</value>
+					<label>UUID</label>
+				</entry>
+			</entries>
+			<selection-cardinality>1</selection-cardinality>
+		</value-attributes>
+		<description>
+			Primary key type AUTO:" database ID AUTO ",
+			INPUT:" user INPUT ID",
+			ID_WORKER:" global unique ID (numeric type unique ID)",
+			UUID:" global unique ID UUID";
+		</description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.global-config.db-config.field-strategy</name>
+		<value>NOT_NULL</value>
+		<value-attributes>
+			<type>value-list</type>
+			<entries>
+				<entry>
+					<value>IGNORED</value>
+					<label>IGNORED</label>
+				</entry>
+				<entry>
+					<value>NOT_NULL</value>
+					<label>NOT_NULL</label>
+				</entry>
+				<entry>
+					<value>NOT_EMPTY</value>
+					<label>NOT_EMPTY</label>
+				</entry>
+			</entries>
+			<selection-cardinality>1</selection-cardinality>
+		</value-attributes>
+		<description>
+			Field policy IGNORED:" ignore judgment ",
+			NOT_NULL:" not NULL judgment "),
+			NOT_EMPTY:" not NULL judgment"
+		</description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.global-config.db-config.column-underline</name>
+		<value>true</value>
+		<value-attributes>
+			<type>boolean</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.global-config.db-config.logic-delete-value</name>
+		<value>1</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.global-config.db-config.logic-not-delete-value</name>
+		<value>0</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.global-config.db-config.banner</name>
+		<value>true</value>
+		<value-attributes>
+			<type>boolean</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+
+	<property>
+		<name>mybatis-plus.configuration.map-underscore-to-camel-case</name>
+		<value>true</value>
+		<value-attributes>
+			<type>boolean</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.configuration.cache-enabled</name>
+		<value>false</value>
+		<value-attributes>
+			<type>boolean</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.configuration.call-setters-on-nulls</name>
+		<value>true</value>
+		<value-attributes>
+			<type>boolean</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>mybatis-plus.configuration.jdbc-type-for-null</name>
+		<value>null</value>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>master.exec.threads</name>
+		<value>100</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>master.exec.task.num</name>
+		<value>20</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>master.heartbeat.interval</name>
+		<value>10</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>master.task.commit.retryTimes</name>
+		<value>5</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>master.task.commit.interval</name>
+		<value>1000</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>master.max.cpuload.avg</name>
+		<value>100</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>master.reserved.memory</name>
+		<value>0.1</value>
+		<value-attributes>
+			<type>float</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>worker.exec.threads</name>
+		<value>100</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>worker.heartbeat.interval</name>
+		<value>10</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>worker.fetch.task.num</name>
+		<value>3</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>worker.max.cpuload.avg</name>
+		<value>100</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
+		<name>worker.reserved.memory</name>
+		<value>0.1</value>
+		<value-attributes>
+			<type>float</type>
+		</value-attributes>
+		<description></description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+
 </configuration>
\ No newline at end of file
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-worker.xml b/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-worker.xml
index f162b08..97beade 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-worker.xml
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-worker.xml
@@ -34,6 +34,15 @@
 		<on-ambari-upgrade add="true"/>
 	</property>
 	<property>
+		<name>worker.fetch.task.num</name>
+		<value>3</value>
+		<value-attributes>
+			<type>int</type>
+		</value-attributes>
+		<description>submit the number of tasks at a time</description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
 		<name>worker.max.cpuload.avg</name>
 		<value>100</value>
 		<value-attributes>
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-zookeeper.xml b/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-zookeeper.xml
index e89962d..5882162 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-zookeeper.xml
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/configuration/dolphin-zookeeper.xml
@@ -16,6 +16,14 @@
   -->
 <configuration>
 	<property>
+		<name>dolphinscheduler.queue.impl</name>
+		<value>zookeeper</value>
+		<description>
+			Task queue implementation, default "zookeeper"
+		</description>
+		<on-ambari-upgrade add="true"/>
+	</property>
+	<property>
 		<name>zookeeper.dolphinscheduler.root</name>
 		<value>/dolphinscheduler</value>
 		<description>
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/metainfo.xml b/ambari_plugin/common-services/DOLPHIN/1.3.0/metainfo.xml
index 183221a..a559085 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/metainfo.xml
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/metainfo.xml
@@ -103,7 +103,7 @@
                     <osFamily>any</osFamily>
                     <packages>
                         <package>
-                            <name>apache-dolphinscheduler-incubating*</name>
+                            <name>apache-dolphinscheduler-incubating-1.3.0*</name>
                         </package>
                     </packages>
                 </osSpecific>
@@ -134,4 +134,4 @@
             </quickLinksConfigurations>
         </service>
     </services>
-</metainfo>
\ No newline at end of file
+</metainfo>
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_alert_service.py b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_alert_service.py
index e78c38d..62255a3 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_alert_service.py
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_alert_service.py
@@ -26,8 +26,7 @@ class DolphinAlertService(Script):
         import params
         env.set_params(params)
         self.install_packages(env)
-        Execute(('chmod', '-R', '777', params.dolphin_home))
-        Execute(('chown', '-R', params.dolphin_user + ":" + params.dolphin_group,  params.dolphin_home))
+        Execute(('chmod', '-R', '777', params.dolphin_home), user=params.dolphin_user, sudo=True)
 
     def configure(self, env):
         import params
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_api_service.py b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_api_service.py
index 5a28924..bdc18fb 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_api_service.py
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_api_service.py
@@ -26,8 +26,7 @@ class DolphinApiService(Script):
         import params
         env.set_params(params)
         self.install_packages(env)
-        Execute(('chmod', '-R', '777', params.dolphin_home))
-        Execute(('chown', '-R', params.dolphin_user + ":" + params.dolphin_group,  params.dolphin_home))
+        Execute(('chmod', '-R', '777', params.dolphin_home), user=params.dolphin_user, sudo=True)
 
     def configure(self, env):
         import params
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_logger_service.py b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_logger_service.py
index fb47e13..f1c19bd 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_logger_service.py
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_logger_service.py
@@ -26,8 +26,8 @@ class DolphinLoggerService(Script):
         import params
         env.set_params(params)
         self.install_packages(env)
-        Execute(('chmod', '-R', '777', params.dolphin_home))
-        Execute(('chown', '-R', params.dolphin_user + ":" + params.dolphin_group,  params.dolphin_home))
+        Execute(('chmod', '-R', '777', params.dolphin_home), user=params.dolphin_user, sudo=True)
+
     def configure(self, env):
         import params
         params.pika_slave = True
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_master_service.py b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_master_service.py
index 8d64935..6ee7ecf 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_master_service.py
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_master_service.py
@@ -27,8 +27,7 @@ class DolphinMasterService(Script):
         import params
         env.set_params(params)
         self.install_packages(env)
-        Execute(('chmod', '-R', '777', params.dolphin_home))
-        Execute(('chown', '-R', params.dolphin_user + ":" + params.dolphin_group,  params.dolphin_home))
+        Execute(('chmod', '-R', '777', params.dolphin_home), user=params.dolphin_user, sudo=True)
 
     def configure(self, env):
         import params
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_worker_service.py b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_worker_service.py
index 1f542c0..2d145ee 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_worker_service.py
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/dolphin_worker_service.py
@@ -26,8 +26,7 @@ class DolphinWorkerService(Script):
     import params
     env.set_params(params)
     self.install_packages(env)
-    Execute(('chmod', '-R', '777', params.dolphin_home))
-    Execute(('chown', '-R', params.dolphin_user + ":" + params.dolphin_group,  params.dolphin_home))
+    Execute(('chmod', '-R', '777', params.dolphin_home), user=params.dolphin_user, sudo=True)
 
   def configure(self, env):
     import params
diff --git a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/params.py b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/params.py
index 08942df..b09b258 100644
--- a/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/params.py
+++ b/ambari_plugin/common-services/DOLPHIN/1.3.0/package/scripts/params.py
@@ -114,6 +114,10 @@ else:
 
 dolphin_common_map_tmp = config['configurations']['dolphin-common']
 data_basedir_path = dolphin_common_map_tmp['data.basedir.path']
+process_exec_basepath = data_basedir_path + '/exec'
+data_download_basedir_path = data_basedir_path + '/download'
+dolphin_common_map['process.exec.basepath'] = process_exec_basepath
+dolphin_common_map['data.download.basedir.path'] = data_download_basedir_path
 dolphin_common_map['dolphinscheduler.env.path'] = dolphin_env_path
 dolphin_common_map.update(config['configurations']['dolphin-common'])
 
diff --git a/dolphinscheduler-alert/pom.xml b/dolphinscheduler-alert/pom.xml
index 08ccc3a..d63e380 100644
--- a/dolphinscheduler-alert/pom.xml
+++ b/dolphinscheduler-alert/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.dolphinscheduler</groupId>
         <artifactId>dolphinscheduler</artifactId>
-        <version>1.3.0-SNAPSHOT</version>
+        <version>1.2.1-SNAPSHOT</version>
     </parent>
     <artifactId>dolphinscheduler-alert</artifactId>
     <name>${project.artifactId}</name>
diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplate.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplate.java
index a01f301..7331df3 100644
--- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplate.java
+++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplate.java
@@ -37,7 +37,6 @@ public class DefaultHTMLTemplate implements AlertTemplate {
 
     public static final Logger logger = LoggerFactory.getLogger(DefaultHTMLTemplate.class);
 
-
     @Override
     public String getMessageFromTemplate(String content, ShowType showType,boolean showAll) {
 
@@ -136,7 +135,21 @@ public class DefaultHTMLTemplate implements AlertTemplate {
         checkNotNull(content);
         String htmlTableThead = StringUtils.isEmpty(title) ? "" : String.format("<thead>%s</thead>\n",title);
 
-        return Constants.HTML_HEADER_PREFIX +htmlTableThead + content + Constants.TABLE_BODY_HTML_TAIL;
+        return "<html>\n" +
+                "    <head>\n" +
+                "        <title>dolphinscheduler</title>\n" +
+                "        <meta name='Keywords' content=''>\n" +
+                "        <meta name='Description' content=''>\n" +
+                "        <style type=\"text/css\">\n" +
+                "            table {margin-top:0px;padding-top:0px;border:1px solid;font-size: 14px;color: #333333;border-width: 1px;border-color: #666666;border-collapse: collapse;}\n" +
+                "            table th {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #dedede;text-align: right;}\n" +
+                "            table td {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #ffffff;text-align: right;}\n" +
+                "        </style>\n" +
+                "    </head>\n" +
+                "    <body style=\"margin:0;padding:0\">\n" +
+                "        <table border=\"1px\" cellpadding=\"5px\" cellspacing=\"-10px\">\n" + htmlTableThead + content +
+                "        </table>\n" +
+                "    </body>\n" +
+                "</html>";
     }
-
 }
diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/Constants.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/Constants.java
index 465d9bf..ec47a1e 100644
--- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/Constants.java
+++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/Constants.java
@@ -174,10 +174,6 @@ public class Constants {
 
     public static final String DINGTALK_ENABLE = "dingtalk.isEnable";
 
-    public static final String HTML_HEADER_PREFIX = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'><html><head><title>dolphinscheduler</title><meta name='Keywords' content=''><meta name='Description' content=''><style type=\"text/css\">table {margin-top:0px;padding-top:0px;border:1px solid;font-size: 14px;color: #333333;border-width: 1px;border-color: #666666;border-collapse: collapse;}table th {border-width: 1px;padding: 8px;border [...]
-
-    public static final String TABLE_BODY_HTML_TAIL = "</table></body></html>";
-
     /**
      * plugin config
      */
diff --git a/dolphinscheduler-alert/src/main/resources/logback-alert.xml b/dolphinscheduler-alert/src/main/resources/logback-alert.xml
index 1718947..5d1c078 100644
--- a/dolphinscheduler-alert/src/main/resources/logback-alert.xml
+++ b/dolphinscheduler-alert/src/main/resources/logback-alert.xml
@@ -46,7 +46,7 @@
 
     <root level="INFO">
         <appender-ref ref="STDOUT"/>
-        <appender-ref ref="ALERTLOGFILE"/>
+        <appender-ref ref="APILOGFILE"/>
     </root>
 
 </configuration>
\ No newline at end of file
diff --git a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplateTest.java b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplateTest.java
index c88f692..76d01c1 100644
--- a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplateTest.java
+++ b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplateTest.java
@@ -17,7 +17,6 @@
 package org.apache.dolphinscheduler.alert.template.impl;
 
 import org.apache.dolphinscheduler.common.utils.*;
-import org.apache.dolphinscheduler.alert.utils.Constants;
 import org.apache.dolphinscheduler.common.enums.ShowType;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -61,16 +60,16 @@ public class DefaultHTMLTemplateTest{
         LinkedHashMap<String, Object> map1 = new LinkedHashMap<>();
         map1.put("mysql service name","mysql200");
         map1.put("mysql address","192.168.xx.xx");
-        map1.put("database client connections","190");
         map1.put("port","3306");
         map1.put("no index of number","80");
+        map1.put("database client connections","190");
 
         LinkedHashMap<String, Object> map2 = new LinkedHashMap<>();
         map2.put("mysql service name","mysql210");
         map2.put("mysql address","192.168.xx.xx");
-        map2.put("database client connections","90");
         map2.put("port","3306");
         map2.put("no index of number","10");
+        map2.put("database client connections","90");
 
         List<LinkedHashMap<String, Object>> maps = new ArrayList<>();
         maps.add(0,map1);
@@ -83,14 +82,42 @@ public class DefaultHTMLTemplateTest{
 
     private String generateMockTableTypeResultByHand(){
 
-        return Constants.HTML_HEADER_PREFIX +
-                "<thead><tr><th>mysql service name</th><th>mysql address</th><th>database client connections</th><th>port</th><th>no index of number</th></tr></thead>\n" +
-                "<tr><td>mysql200</td><td>192.168.xx.xx</td><td>190</td><td>3306</td><td>80</td></tr><tr><td>mysql210</td><td>192.168.xx.xx</td><td>90</td><td>3306</td><td>10</td></tr>" + Constants.TABLE_BODY_HTML_TAIL;
-
+        return "<html>\n" +
+                "    <head>\n" +
+                "        <title>dolphinscheduler</title>\n" +
+                "        <meta name='Keywords' content=''>\n" +
+                "        <meta name='Description' content=''>\n" +
+                "        <style type=\"text/css\">\n" +
+                "            table {margin-top:0px;padding-top:0px;border:1px solid;font-size: 14px;color: #333333;border-width: 1px;border-color: #666666;border-collapse: collapse;}\n" +
+                "            table th {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #dedede;text-align: right;}\n" +
+                "            table td {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #ffffff;text-align: right;}\n" +
+                "        </style>\n" +
+                "    </head>\n" +
+                "    <body style=\"margin:0;padding:0\">\n" +
+                "        <table border=\"1px\" cellpadding=\"5px\" cellspacing=\"-10px\">\n" +
+                "<thead><tr><th>mysql service name</th><th>mysql address</th><th>port</th><th>no index of number</th><th>database client connections</th></tr></thead>\n" +
+                "<tr><td>mysql200</td><td>192.168.xx.xx</td><td>3306</td><td>80</td><td>190</td></tr><tr><td>mysql210</td><td>192.168.xx.xx</td><td>3306</td><td>10</td><td>90</td></tr>        </table>\n" +
+                "    </body>\n" +
+                "</html>";
     }
 
     private String generateMockTextTypeResultByHand(){
 
-        return Constants.HTML_HEADER_PREFIX + "<tr><td>{\"mysql service name\":\"mysql200\",\"mysql address\":\"192.168.xx.xx\",\"database client connections\":\"190\",\"port\":\"3306\",\"no index of number\":\"80\"}</td></tr><tr><td>{\"mysql service name\":\"mysql210\",\"mysql address\":\"192.168.xx.xx\",\"database client connections\":\"90\",\"port\":\"3306\",\"no index of number\":\"10\"}</td></tr>" + Constants.TABLE_BODY_HTML_TAIL;
+        return "<html>\n" +
+                "    <head>\n" +
+                "        <title>dolphinscheduler</title>\n" +
+                "        <meta name='Keywords' content=''>\n" +
+                "        <meta name='Description' content=''>\n" +
+                "        <style type=\"text/css\">\n" +
+                "            table {margin-top:0px;padding-top:0px;border:1px solid;font-size: 14px;color: #333333;border-width: 1px;border-color: #666666;border-collapse: collapse;}\n" +
+                "            table th {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #dedede;text-align: right;}\n" +
+                "            table td {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #ffffff;text-align: right;}\n" +
+                "        </style>\n" +
+                "    </head>\n" +
+                "    <body style=\"margin:0;padding:0\">\n" +
+                "        <table border=\"1px\" cellpadding=\"5px\" cellspacing=\"-10px\">\n" +
+                "<tr><td>{\"mysql service name\":\"mysql200\",\"mysql address\":\"192.168.xx.xx\",\"port\":\"3306\",\"no index of number\":\"80\",\"database client connections\":\"190\"}</td></tr><tr><td>{\"mysql service name\":\"mysql210\",\"mysql address\":\"192.168.xx.xx\",\"port\":\"3306\",\"no index of number\":\"10\",\"database client connections\":\"90\"}</td></tr>        </table>\n" +
+                "    </body>\n" +
+                "</html>";
     }
 }
diff --git a/dolphinscheduler-api/pom.xml b/dolphinscheduler-api/pom.xml
index f45f854..16f611f 100644
--- a/dolphinscheduler-api/pom.xml
+++ b/dolphinscheduler-api/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.apache.dolphinscheduler</groupId>
     <artifactId>dolphinscheduler</artifactId>
-    <version>1.3.0-SNAPSHOT</version>
+    <version>1.2.1-SNAPSHOT</version>
   </parent>
   <artifactId>dolphinscheduler-api</artifactId>
   <name>${project.artifactId}</name>
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
index a34d61a..7f35ac0 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
@@ -278,7 +278,7 @@ public class DataSourceController extends BaseController {
                                     @RequestParam(value = "password") String password,
                                     @RequestParam(value = "connectType") DbConnectType connectType,
                                     @RequestParam(value = "other") String other) {
-        logger.info("login user {}, connect datasource: {}, note: {}, type: {}, connectType: {}, other: {}",
+        logger.info("login user {}, connect datasource: {} failure, note: {}, type: {}, connectType: {}, other: {}",
                 loginUser.getUserName(), name, note, type, connectType, other);
         String parameter = dataSourceService.buildParameter(name, note, type, host, port, database, principal, userName, password, connectType, other);
         Boolean isConnection = dataSourceService.checkConnection(type, parameter);
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
index 6288179..7ed6add 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
@@ -192,7 +192,7 @@ public enum Status {
     RESOURCE_IS_USED(20014, "resource file is used by process definition","资源文件被上线的流程定义使用了"),
     PARENT_RESOURCE_NOT_EXIST(20015, "parent resource not exist","父资源文件不存在"),
     RESOURCE_NOT_EXIST_OR_NO_PERMISSION(20016, "resource not exist or no permission,please view the task node and remove error resource","请检查任务节点并移除无权限或者已删除的资源"),
-    RESOURCE_IS_AUTHORIZED(20017, "resource is authorized to user {0},suffix not allowed to be modified", "资源文件已授权其他用户[{0}],后缀不允许修改"),
+
 
     USER_NO_OPERATION_PERM(30001, "user has no operation privilege", "当前用户没有操作权限"),
     USER_NO_OPERATION_PROJECT_PERM(30002, "user {0} is not has project {1} permission", "当前用户[{0}]没有[{1}]项目的操作权限"),
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
index caedf85..c25cba6 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
@@ -220,20 +220,12 @@ public class DataSourceService extends BaseService{
         String parameter = dataSource.getConnectionParams();
 
         BaseDataSource datasourceForm = DataSourceFactory.getDatasource(dataSource.getType(), parameter);
-        DbConnectType  connectType = null;
-        String hostSeperator = Constants.DOUBLE_SLASH;
-        if(DbType.ORACLE.equals(dataSource.getType())){
-            connectType = ((OracleDataSource) datasourceForm).getConnectType();
-            if(DbConnectType.ORACLE_SID.equals(connectType)){
-                hostSeperator = Constants.AT_SIGN;
-            }
-        }
         String database = datasourceForm.getDatabase();
         // jdbc connection params
         String other = datasourceForm.getOther();
         String address = datasourceForm.getAddress();
 
-        String[] hostsPorts = getHostsAndPort(address,hostSeperator);
+        String[] hostsPorts = getHostsAndPort(address);
         // ip host
         String host = hostsPorts[0];
         // prot
@@ -269,10 +261,6 @@ public class DataSourceService extends BaseService{
         map.put(NAME, dataSourceName);
         map.put(NOTE, desc);
         map.put(TYPE, dataSourceType);
-        if (connectType != null) {
-            map.put(Constants.ORACLE_DB_CONNECT_TYPE, connectType);
-        }
-
         map.put(HOST, host);
         map.put(PORT, port);
         map.put(PRINCIPAL, datasourceForm.getPrincipal());
@@ -498,10 +486,13 @@ public class DataSourceService extends BaseService{
                                  String password, DbConnectType connectType, String other) {
 
         String address = buildAddress(type, host, port, connectType);
-        Map<String, Object> parameterMap = new LinkedHashMap<String, Object>(6);
-        String jdbcUrl = address + "/" + database;
-        if (Constants.ORACLE.equals(type.name())) {
-            parameterMap.put(Constants.ORACLE_DB_CONNECT_TYPE, connectType);
+
+        String jdbcUrl;
+        if (Constants.ORACLE.equals(type.name())
+                && connectType == DbConnectType.ORACLE_SID) {
+            jdbcUrl = address + ":" + database;
+        } else {
+            jdbcUrl = address + "/" + database;
         }
 
         if (CommonUtils.getKerberosStartupState() &&
@@ -522,6 +513,7 @@ public class DataSourceService extends BaseService{
             separator = ";";
         }
 
+        Map<String, Object> parameterMap = new LinkedHashMap<String, Object>(6);
         parameterMap.put(TYPE, connectType);
         parameterMap.put(Constants.ADDRESS, address);
         parameterMap.put(Constants.DATABASE, database);
@@ -691,23 +683,12 @@ public class DataSourceService extends BaseService{
     /**
      * get host and port by address
      *
-     * @param address   address
+     * @param address
      * @return sting array: [host,port]
      */
     private String[] getHostsAndPort(String address) {
-        return getHostsAndPort(address,Constants.DOUBLE_SLASH);
-    }
-
-    /**
-     * get host and port by address
-     *
-     * @param address   address
-     * @param separator separator
-     * @return sting array: [host,port]
-     */
-    private String[] getHostsAndPort(String address,String separator) {
         String[] result = new String[2];
-        String[] tmpArray = address.split(separator);
+        String[] tmpArray = address.split(Constants.DOUBLE_SLASH);
         String hostsAndPorts = tmpArray[tmpArray.length - 1];
         StringBuilder hosts = new StringBuilder();
         String[] hostPortArray = hostsAndPorts.split(Constants.COMMA);
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
index e3d6311..8b393a7 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
@@ -478,6 +478,8 @@ public class ProcessInstanceService extends BaseDAGService {
             return checkResult;
         }
         ProcessInstance processInstance = processService.findProcessInstanceDetailById(processInstanceId);
+        List<TaskInstance> taskInstanceList = processService.findValidTaskListByProcessId(processInstanceId);
+
         if (null == processInstance) {
             putMsg(result, Status.PROCESS_INSTANCE_NOT_EXIST, processInstanceId);
             return result;
@@ -485,11 +487,8 @@ public class ProcessInstanceService extends BaseDAGService {
 
 
 
-        processService.removeTaskLogFile(processInstanceId);
         // delete database cascade
         int delete = processService.deleteWorkProcessInstanceById(processInstanceId);
-
-
         processService.deleteAllSubWorkProcessByParentId(processInstanceId);
         processService.deleteWorkProcessMapByParentId(processInstanceId);
 
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 ded6594..7043bc0 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
@@ -31,7 +31,10 @@ import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.ResourceType;
 import org.apache.dolphinscheduler.common.utils.*;
-import org.apache.dolphinscheduler.dao.entity.*;
+import org.apache.dolphinscheduler.dao.entity.Resource;
+import org.apache.dolphinscheduler.dao.entity.Tenant;
+import org.apache.dolphinscheduler.dao.entity.UdfFunc;
+import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.mapper.*;
 import org.apache.dolphinscheduler.dao.utils.ResourceProcessDefinitionUtils;
 import org.slf4j.Logger;
@@ -348,40 +351,24 @@ public class ResourcesService extends BaseService {
             throw new ServiceException(Status.HDFS_OPERATION_ERROR);
         }
 
+        String nameWithSuffix = name;
+
         if (!resource.isDirectory()) {
-            //get the origin file suffix
-            String originSuffix = FileUtils.suffix(originFullName);
-            String suffix = FileUtils.suffix(fullName);
-            boolean suffixIsChanged = false;
-            if (StringUtils.isBlank(suffix) && StringUtils.isNotBlank(originSuffix)) {
-                suffixIsChanged = true;
-            }
-            if (StringUtils.isNotBlank(suffix) && !suffix.equals(originSuffix)) {
-                suffixIsChanged = true;
-            }
-            //verify whether suffix is changed
-            if (suffixIsChanged) {
-                //need verify whether this resource is authorized to other users
-                Map<String, Object> columnMap = new HashMap<>();
-                columnMap.put("resources_id", resourceId);
-
-                List<ResourcesUser> resourcesUsers = resourceUserMapper.selectByMap(columnMap);
-                if (CollectionUtils.isNotEmpty(resourcesUsers)) {
-                    List<Integer> userIds = resourcesUsers.stream().map(ResourcesUser::getUserId).collect(Collectors.toList());
-                    List<User> users = userMapper.selectBatchIds(userIds);
-                    String userNames = users.stream().map(User::getUserName).collect(Collectors.toList()).toString();
-                    logger.error("resource is authorized to user {},suffix not allowed to be modified", userNames);
-                    putMsg(result,Status.RESOURCE_IS_AUTHORIZED,userNames);
-                    return result;
-                }
+            //get the file suffix
+            String suffix = originResourceName.substring(originResourceName.lastIndexOf("."));
+
+            //if the name without suffix then add it ,else use the origin name
+            if(!name.endsWith(suffix)){
+                nameWithSuffix = nameWithSuffix + suffix;
             }
         }
 
         // updateResource data
         List<Integer> childrenResource = listAllChildren(resource,false);
+        String oldFullName = resource.getFullName();
         Date now = new Date();
 
-        resource.setAlias(name);
+        resource.setAlias(nameWithSuffix);
         resource.setFullName(fullName);
         resource.setDescription(desc);
         resource.setUpdateTime(now);
@@ -393,7 +380,7 @@ public class ResourcesService extends BaseService {
                 List<Resource> childResourceList = new ArrayList<>();
                 List<Resource> resourceList = resourcesMapper.listResourceByIds(childrenResource.toArray(new Integer[childrenResource.size()]));
                 childResourceList = resourceList.stream().map(t -> {
-                    t.setFullName(t.getFullName().replaceFirst(originFullName, matcherFullName));
+                    t.setFullName(t.getFullName().replaceFirst(oldFullName, matcherFullName));
                     t.setUpdateTime(now);
                     return t;
                 }).collect(Collectors.toList());
@@ -1003,23 +990,10 @@ public class ResourcesService extends BaseService {
             logger.error("resource id {} is directory,can't download it", resourceId);
             throw new RuntimeException("cant't download directory");
         }
+        User user = userMapper.queryDetailsById(resource.getUserId());
+        String tenantCode = tenantMapper.queryById(user.getTenantId()).getTenantCode();
 
-        int userId = resource.getUserId();
-        User user = userMapper.selectById(userId);
-        if(user == null){
-            logger.error("user id {} not exists", userId);
-            throw new RuntimeException(String.format("resource owner id %d not exist",userId));
-        }
-
-        Tenant tenant = tenantMapper.queryById(user.getTenantId());
-        if(tenant == null){
-            logger.error("tenant id {} not exists", user.getTenantId());
-            throw new RuntimeException(String.format("The tenant id %d of resource owner not exist",user.getTenantId()));
-        }
-
-        String tenantCode = tenant.getTenantCode();
-
-        String hdfsFileName = HadoopUtils.getHdfsFileName(resource.getType(), tenantCode, resource.getFullName());
+        String hdfsFileName = HadoopUtils.getHdfsFileName(resource.getType(), tenantCode, resource.getAlias());
 
         String localFileName = FileUtils.getDownloadFilename(resource.getAlias());
         logger.info("resource hdfs path is {} ", hdfsFileName);
@@ -1184,8 +1158,8 @@ public class ResourcesService extends BaseService {
      */
     private String getTenantCode(int userId,Result result){
 
-        User user = userMapper.selectById(userId);
-        if (user == null) {
+        User user = userMapper.queryDetailsById(userId);
+        if(user == null){
             logger.error("user {} not exists", userId);
             putMsg(result, Status.USER_NOT_EXIST,userId);
             return null;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
index 09d4824..bb31733 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
@@ -18,10 +18,7 @@ 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.dto.resources.ResourceComponent;
-import org.apache.dolphinscheduler.api.dto.resources.visitor.ResourceTreeVisitor;
 import org.apache.dolphinscheduler.api.enums.Status;
-import org.apache.dolphinscheduler.api.exceptions.ServiceException;
 import org.apache.dolphinscheduler.api.utils.CheckUtils;
 import org.apache.dolphinscheduler.api.utils.PageInfo;
 import org.apache.dolphinscheduler.api.utils.Result;
@@ -38,7 +35,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -310,11 +306,14 @@ public class UsersService extends BaseService {
             user.setEmail(email);
         }
 
-        if (StringUtils.isNotEmpty(phone) && !CheckUtils.checkPhone(phone)) {
-            putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,phone);
-            return result;
+        if (StringUtils.isNotEmpty(phone)) {
+            if (!CheckUtils.checkPhone(phone)){
+                putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,phone);
+                return result;
+            }
+            user.setPhone(phone);
         }
-        user.setPhone(phone);
+
         user.setQueue(queue);
         user.setState(state);
         Date now = new Date();
@@ -341,18 +340,18 @@ public class UsersService extends BaseService {
                         List<Resource> fileResourcesList = resourceMapper.queryResourceList(
                                 null, userId, ResourceType.FILE.ordinal());
                         if (CollectionUtils.isNotEmpty(fileResourcesList)) {
-                            ResourceTreeVisitor resourceTreeVisitor = new ResourceTreeVisitor(fileResourcesList);
-                            ResourceComponent resourceComponent = resourceTreeVisitor.visit();
-                            copyResourceFiles(resourceComponent, oldResourcePath, newResourcePath);
+                            for (Resource resource : fileResourcesList) {
+                                HadoopUtils.getInstance().copy(oldResourcePath + "/" + resource.getAlias(), newResourcePath, false, true);
+                            }
                         }
 
                         //udf resources
                         List<Resource> udfResourceList = resourceMapper.queryResourceList(
                                 null, userId, ResourceType.UDF.ordinal());
                         if (CollectionUtils.isNotEmpty(udfResourceList)) {
-                            ResourceTreeVisitor resourceTreeVisitor = new ResourceTreeVisitor(udfResourceList);
-                            ResourceComponent resourceComponent = resourceTreeVisitor.visit();
-                            copyResourceFiles(resourceComponent, oldUdfsPath, newUdfsPath);
+                            for (Resource resource : udfResourceList) {
+                                HadoopUtils.getInstance().copy(oldUdfsPath + "/" + resource.getAlias(), newUdfsPath, false, true);
+                            }
                         }
 
                         //Delete the user from the old tenant directory
@@ -518,7 +517,7 @@ public class UsersService extends BaseService {
         if (CollectionUtils.isNotEmpty(oldAuthorizedResIds)) {
 
             // get all resource id of process definitions those is released
-            List<Map<String, Object>> list = processDefinitionMapper.listResourcesByUser(userId);
+            List<Map<String, Object>> list = processDefinitionMapper.listResources();
             Map<Integer, Set<Integer>> resourceProcessMap = ResourceProcessDefinitionUtils.getResourceProcessDefinitionMap(list);
             Set<Integer> resourceIdSet = resourceProcessMap.keySet();
 
@@ -872,40 +871,4 @@ public class UsersService extends BaseService {
 
         return msg;
     }
-
-    /**
-     * copy resource files
-     * @param resourceComponent resource component
-     * @param srcBasePath       src base path
-     * @param dstBasePath       dst base path
-     * @throws IOException      io exception
-     */
-    private void copyResourceFiles(ResourceComponent resourceComponent, String srcBasePath, String dstBasePath) throws IOException {
-        List<ResourceComponent> components = resourceComponent.getChildren();
-
-        if (CollectionUtils.isNotEmpty(components)) {
-            for (ResourceComponent component:components) {
-                // verify whether exist
-                if (!HadoopUtils.getInstance().exists(String.format("%s/%s",srcBasePath,component.getFullName()))){
-                    logger.error("resource file: {} not exist,copy error",component.getFullName());
-                    throw new ServiceException(Status.RESOURCE_NOT_EXIST);
-                }
-
-                if (!component.isDirctory()) {
-                    // copy it to dst
-                    HadoopUtils.getInstance().copy(String.format("%s/%s",srcBasePath,component.getFullName()),String.format("%s/%s",dstBasePath,component.getFullName()),false,true);
-                    continue;
-                }
-
-                if(CollectionUtils.isEmpty(component.getChildren())) {
-                    // if not exist,need create it
-                    if (!HadoopUtils.getInstance().exists(String.format("%s/%s",dstBasePath,component.getFullName()))) {
-                        HadoopUtils.getInstance().mkdir(String.format("%s/%s",dstBasePath,component.getFullName()));
-                    }
-                }else{
-                    copyResourceFiles(component,srcBasePath,dstBasePath);
-                }
-            }
-        }
-    }
 }
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataSourceServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataSourceServiceTest.java
index 00e5275..d280b20 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataSourceServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataSourceServiceTest.java
@@ -16,90 +16,43 @@
  */
 package org.apache.dolphinscheduler.api.service;
 
+import org.apache.dolphinscheduler.api.ApiApplicationServer;
 import org.apache.dolphinscheduler.api.enums.Status;
-import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.DbConnectType;
 import org.apache.dolphinscheduler.common.enums.DbType;
 import org.apache.dolphinscheduler.common.enums.UserType;
-import org.apache.dolphinscheduler.dao.entity.DataSource;
 import org.apache.dolphinscheduler.dao.entity.User;
-import org.apache.dolphinscheduler.dao.mapper.DataSourceMapper;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.modules.junit4.PowerMockRunner;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({"sun.security.*", "javax.net.*"})
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = ApiApplicationServer.class)
 public class DataSourceServiceTest {
     private static final Logger logger = LoggerFactory.getLogger(DataSourceServiceTest.class);
 
-    @InjectMocks
+    @Autowired
     private DataSourceService dataSourceService;
-    @Mock
-    private DataSourceMapper dataSourceMapper;
 
     @Test
-    public void queryDataSourceListTest(){
+    public void queryDataSourceList(){
 
         User loginUser = new User();
+        loginUser.setId(27);
         loginUser.setUserType(UserType.GENERAL_USER);
         Map<String, Object> map = dataSourceService.queryDataSourceList(loginUser, DbType.MYSQL.ordinal());
         Assert.assertEquals(Status.SUCCESS, map.get(Constants.STATUS));
     }
 
     @Test
-    public void verifyDataSourceNameTest(){
-        User loginUser = new User();
-        loginUser.setUserType(UserType.GENERAL_USER);
-        String dataSourceName = "dataSource1";
-        PowerMockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName)).thenReturn(getDataSourceList());
-        Result result = dataSourceService.verifyDataSourceName(loginUser, dataSourceName);
-        Assert.assertEquals(Status.DATASOURCE_EXIST.getMsg(),result.getMsg());
-    }
-
-    @Test
-    public void queryDataSourceTest(){
-        PowerMockito.when(dataSourceMapper.selectById(Mockito.anyInt())).thenReturn(null);
-        Map<String, Object> result = dataSourceService.queryDataSource(Mockito.anyInt());
-        Assert.assertEquals(((Status)result.get(Constants.STATUS)).getCode(),Status.RESOURCE_NOT_EXIST.getCode());
-
-        PowerMockito.when(dataSourceMapper.selectById(Mockito.anyInt())).thenReturn(getOracleDataSource());
-        result = dataSourceService.queryDataSource(Mockito.anyInt());
-        Assert.assertEquals(((Status)result.get(Constants.STATUS)).getCode(),Status.SUCCESS.getCode());
-    }
-
-
-    private List<DataSource> getDataSourceList(){
-
-        List<DataSource> dataSources =  new ArrayList<>();
-        dataSources.add(getOracleDataSource());
-        return dataSources;
-    }
-
-    private DataSource getOracleDataSource(){
-        DataSource dataSource = new DataSource();
-        dataSource.setName("test");
-        dataSource.setNote("Note");
-        dataSource.setType(DbType.ORACLE);
-        dataSource.setConnectionParams("{\"connectType\":\"ORACLE_SID\",\"address\":\"jdbc:oracle:thin:@192.168.xx.xx:49161\",\"database\":\"XE\",\"jdbcUrl\":\"jdbc:oracle:thin:@192.168.xx.xx:49161/XE\",\"user\":\"system\",\"password\":\"oracle\"}");
-
-        return dataSource;
-    }
-
-    @Test
     public void buildParameter(){
         String param = dataSourceService.buildParameter("","", DbType.ORACLE, "192.168.9.1","1521","im"
                 ,"","test","test", DbConnectType.ORACLE_SERVICE_NAME,"");
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 407f6b5..e52f467 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
@@ -177,7 +177,7 @@ public class ResourcesServiceTest {
 
         //RESOURCE_NOT_EXIST
         user.setId(1);
-        Mockito.when(userMapper.selectById(1)).thenReturn(getUser());
+        Mockito.when(userMapper.queryDetailsById(1)).thenReturn(getUser());
         Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
         PowerMockito.when(HadoopUtils.getHdfsFileName(Mockito.any(), Mockito.any(),Mockito.anyString())).thenReturn("test1");
 
@@ -209,13 +209,13 @@ public class ResourcesServiceTest {
         logger.info(result.toString());
         Assert.assertEquals(Status.RESOURCE_EXIST.getMsg(),result.getMsg());
         //USER_NOT_EXIST
-        Mockito.when(userMapper.selectById(Mockito.anyInt())).thenReturn(null);
+        Mockito.when(userMapper.queryDetailsById(Mockito.anyInt())).thenReturn(null);
         result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest",ResourceType.UDF);
         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(userMapper.queryDetailsById(1)).thenReturn(getUser());
         Mockito.when(tenantMapper.queryById(Mockito.anyInt())).thenReturn(null);
         result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest",ResourceType.UDF);
         logger.info(result.toString());
@@ -296,7 +296,7 @@ public class ResourcesServiceTest {
             //TENANT_NOT_EXIST
             loginUser.setUserType(UserType.ADMIN_USER);
             loginUser.setTenantId(2);
-            Mockito.when(userMapper.selectById(Mockito.anyInt())).thenReturn(loginUser);
+            Mockito.when(userMapper.queryDetailsById(Mockito.anyInt())).thenReturn(loginUser);
             result = resourcesService.delete(loginUser,1);
             logger.info(result.toString());
             Assert.assertEquals(Status.TENANT_NOT_EXIST.getMsg(), result.getMsg());
@@ -390,7 +390,7 @@ public class ResourcesServiceTest {
 
 
         //TENANT_NOT_EXIST
-        Mockito.when(userMapper.selectById(1)).thenReturn(getUser());
+        Mockito.when(userMapper.queryDetailsById(1)).thenReturn(getUser());
         result = resourcesService.readResource(1,1,10);
         logger.info(result.toString());
         Assert.assertEquals(Status.TENANT_NOT_EXIST.getMsg(),result.getMsg());
@@ -495,7 +495,7 @@ public class ResourcesServiceTest {
 
 
         //TENANT_NOT_EXIST
-        Mockito.when(userMapper.selectById(1)).thenReturn(getUser());
+        Mockito.when(userMapper.queryDetailsById(1)).thenReturn(getUser());
         result = resourcesService.updateResourceContent(1,"content");
         logger.info(result.toString());
         Assert.assertTrue(Status.TENANT_NOT_EXIST.getCode() == result.getCode());
@@ -514,7 +514,7 @@ public class ResourcesServiceTest {
 
         PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
         Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
-        Mockito.when(userMapper.selectById(1)).thenReturn(getUser());
+        Mockito.when(userMapper.queryDetailsById(1)).thenReturn(getUser());
         org.springframework.core.io.Resource resourceMock = Mockito.mock(org.springframework.core.io.Resource.class);
         try {
             //resource null
diff --git a/dolphinscheduler-common/pom.xml b/dolphinscheduler-common/pom.xml
index 3b0f82f..28acb21 100644
--- a/dolphinscheduler-common/pom.xml
+++ b/dolphinscheduler-common/pom.xml
@@ -21,7 +21,7 @@
 	<parent>
 		<groupId>org.apache.dolphinscheduler</groupId>
 		<artifactId>dolphinscheduler</artifactId>
-		<version>1.3.0-SNAPSHOT</version>
+		<version>1.2.1-SNAPSHOT</version>
 	</parent>
 	<artifactId>dolphinscheduler-common</artifactId>
 	<name>dolphinscheduler-common</name>
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index a2634bf..fc09960 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -239,10 +239,6 @@ public final class Constants {
      * EQUAL SIGN
      */
     public static final String EQUAL_SIGN = "=";
-    /**
-     * AT SIGN
-     */
-    public static final String AT_SIGN = "@";
 
 
     public static final String WORKER_MAX_CPULOAD_AVG = "worker.max.cpuload.avg";
@@ -304,7 +300,7 @@ public final class Constants {
     /**
      * user name regex
      */
-    public static final Pattern REGEX_USER_NAME = Pattern.compile("^[a-zA-Z0-9._-]{3,39}$");
+    public static final Pattern REGEX_USER_NAME = Pattern.compile("^[a-zA-Z0-9._-]{3,20}$");
 
     /**
      * email regex
@@ -516,7 +512,7 @@ public final class Constants {
     /**
      * heartbeat for zk info length
      */
-    public static final int HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH = 10;
+    public static final int HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH = 5;
 
 
     /**
@@ -925,7 +921,6 @@ public final class Constants {
     public static final String JDBC_URL = "jdbcUrl";
     public static final String PRINCIPAL = "principal";
     public static final String OTHER = "other";
-    public static final String ORACLE_DB_CONNECT_TYPE = "connectType";
 
 
     /**
@@ -971,8 +966,4 @@ public final class Constants {
      */
     public static final String PLUGIN_JAR_SUFFIX = ".jar";
 
-    public static final int NORAML_NODE_STATUS = 0;
-    public static final int ABNORMAL_NODE_STATUS = 1;
-
-
 }
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/ExecutionStatus.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/ExecutionStatus.java
index 7cc073e..0f8c9f5 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/ExecutionStatus.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/ExecutionStatus.java
@@ -95,14 +95,14 @@ public enum ExecutionStatus {
    public boolean typeIsFinished(){
 
        return typeIsSuccess() || typeIsFailure() || typeIsCancel() || typeIsPause()
-               || typeIsStop();
+               || typeIsWaittingThread();
    }
 
     /**
      * status is waiting thread
      * @return status
      */
-   public boolean typeIsWaitingThread(){
+   public boolean typeIsWaittingThread(){
        return this == WAITTING_THREAD;
    }
 
@@ -113,13 +113,6 @@ public enum ExecutionStatus {
    public boolean typeIsPause(){
        return this == PAUSE;
    }
-    /**
-     * status is pause
-     * @return status
-     */
-    public boolean typeIsStop(){
-        return this == STOP;
-    }
 
     /**
      * status is running
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/TaskNode.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/TaskNode.java
index f794396..5ab970e 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/TaskNode.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/TaskNode.java
@@ -123,11 +123,6 @@ public class TaskNode {
    */
   private String workerGroup;
 
-  /**
-   * worker group id
-   */
-  private Integer workerGroupId;
-
 
   /**
    * task time out
@@ -345,12 +340,4 @@ public class TaskNode {
   public void setConditionResult(String conditionResult) {
     this.conditionResult = conditionResult;
   }
-
-  public Integer getWorkerGroupId() {
-    return workerGroupId;
-  }
-
-  public void setWorkerGroupId(Integer workerGroupId) {
-    this.workerGroupId = workerGroupId;
-  }
 }
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/datax/DataxParameters.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/datax/DataxParameters.java
index f54e107..a6f08cd 100755
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/datax/DataxParameters.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/datax/DataxParameters.java
@@ -20,7 +20,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.dolphinscheduler.common.enums.Flag;
 import org.apache.dolphinscheduler.common.process.ResourceInfo;
 import org.apache.dolphinscheduler.common.task.AbstractParameters;
 
@@ -32,7 +31,7 @@ public class DataxParameters extends AbstractParameters {
     /**
      * if custom json config,eg  0, 1
      */
-    private int customConfig;
+    private Integer customConfig;
 
     /**
      * if customConfig eq 1 ,then json is usable
@@ -89,11 +88,11 @@ public class DataxParameters extends AbstractParameters {
      */
     private int jobSpeedRecord;
 
-    public int getCustomConfig() {
+    public Integer getCustomConfig() {
         return customConfig;
     }
 
-    public void setCustomConfig(int customConfig) {
+    public void setCustomConfig(Integer customConfig) {
         this.customConfig = customConfig;
     }
 
@@ -185,9 +184,13 @@ public class DataxParameters extends AbstractParameters {
         this.jobSpeedRecord = jobSpeedRecord;
     }
 
+
     @Override
     public boolean checkParameters() {
-        if (customConfig == Flag.NO.ordinal()) {
+        if (customConfig == null) {
+            return false;
+        }
+        if (customConfig == 0) {
             return dataSource != 0
                     && dataTarget != 0
                     && StringUtils.isNotEmpty(sql)
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
index 1033816..68c1792 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
@@ -1 +1 @@
-/*
 * 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.common.utils;

import org.apache.dolphinscheduler.common.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.Instant;
import j
 ava.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

/**
 * date utils
 */
public class DateUtils {

    private static final Logger logger = LoggerFactory.getLogger(DateUtils.class);

    /**
     * date to local datetime
     *
     * @param date date
     * @return local datetime
     */
    private static LocalDateTime date2LocalDateTime(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }

    /**
     * local datetime to date
     *
     * @param localDateTime local datetime
     * @return date
     */
    private static Date localDateTime2Date(LocalDateTime localDateTime) {
        Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
        return Date.from(instant);
    }

    /**
     * get current date str
     *
     * @return date string
     */
    public static String getCurrentTime() {
        return getCurre
 ntTime(Constants.YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * get the date string in the specified format of the current time
     *
     * @param format date format
     * @return date string
     */
    public static String getCurrentTime(String format) {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(format));
    }

    /**
     * get the formatted date string
     *
     * @param date date
     * @param format e.g. yyyy-MM-dd HH:mm:ss
     * @return date string
     */
    public static String format(Date date, String format) {
        return format(date2LocalDateTime(date), format);
    }

    /**
     * get the formatted date string
     *
     * @param localDateTime local data time
     * @param format        yyyy-MM-dd HH:mm:ss
     * @return date string
     */
    public static String format(LocalDateTime localDateTime, String format) {
        return localDateTime.format(DateTimeFormatter.ofPattern(format));
    }

    /**
     * convert time to yyy
 y-MM-dd HH:mm:ss format
     *
     * @param date date
     * @return date string
     */
    public static String dateToString(Date date) {
        return format(date, Constants.YYYY_MM_DD_HH_MM_SS);
    }


    /**
     * convert string to date and time
     *
     * @param date date
     * @param format  format
     * @return date
     */
    public static Date parse(String date, String format) {
        try {
            LocalDateTime ldt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(format));
            return localDateTime2Date(ldt);
        } catch (Exception e) {
            logger.error("error while parse date:" + date, e);
        }
        return null;
    }


    /**
     * convert date str to yyyy-MM-dd HH:mm:ss format
     *
     * @param str date string
     * @return yyyy-MM-dd HH:mm:ss format
     */
    public static Date stringToDate(String str) {
        return parse(str, Constants.YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * get seconds between two dat
 es
     *
     * @param d1 date1
     * @param d2 date2
     * @return differ seconds
     */
    public static long differSec(Date d1, Date d2) {
        if(d1 == null || d2 == null){
            return 0;
        }
        return (long) Math.ceil(differMs(d1, d2) / 1000.0);
    }

    /**
     * get ms between two dates
     *
     * @param d1 date1
     * @param d2 date2
     * @return differ ms
     */
    public static long differMs(Date d1, Date d2) {
        return Math.abs(d1.getTime() - d2.getTime());
    }


    /**
     * get hours between two dates
     *
     * @param d1 date1
     * @param d2 date2
     * @return differ hours
     */
    public static long diffHours(Date d1, Date d2) {
        return (long) Math.ceil(diffMin(d1, d2) / 60.0);
    }

    /**
     * get minutes between two dates
     *
     * @param d1 date1
     * @param d2 date2
     * @return differ minutes
     */
    public static long diffMin(Date d1, Date d2) {
        return (long) Math.ceil(diffe
 rSec(d1, d2) / 60.0);
    }


    /**
     * get the date of the specified date in the days before and after
     *
     * @param date date
     * @param day day
     * @return the date of the specified date in the days before and after
     */
    public static Date getSomeDay(Date date, int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, day);
        return calendar.getTime();
    }

    /**
     * get the hour of day.
     *
     * @param date date
     * @return hour of day
     */
    public static int getHourIndex(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * compare two dates
     *
     * @param future future date
     * @param old old date
     * @return true if future time greater than old time
     */
    public static boolean compare(Date future, Date old) {
        retu
 rn future.getTime() > old.getTime();
    }

    /**
     * convert schedule string to date
     *
     * @param schedule schedule
     * @return convert schedule string to date
     */
    public static Date getScheduleDate(String schedule) {
        return stringToDate(schedule);
    }

    /**
     * format time to readable
     *
     * @param ms ms
     * @return format time
     */
    public static String format2Readable(long ms) {

        long days = ms / (1000 * 60 * 60 * 24);
        long hours = (ms % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
        long minutes = (ms % (1000 * 60 * 60)) / (1000 * 60);
        long seconds = (ms % (1000 * 60)) / 1000;

        return String.format("%02d %02d:%02d:%02d", days, hours, minutes, seconds);

    }

    /**
     * get monday
     *
     * note: Set the first day of the week to Monday, the default is Sunday
     * @param date date
     * @return get monday
     */
    public static Date getMonday(Date date) {
        Calendar c
 al = Calendar.getInstance();

        cal.setTime(date);

        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

        return cal.getTime();
    }

    /**
     * get sunday
     *
     * note: Set the first day of the week to Monday, the default is Sunday
     * @param date date
     * @return get sunday
     */
    public static Date getSunday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);

        return cal.getTime();
    }

    /**
     * get first day of month
     *
     * @param date date
     * @return first day of month
     * */
    public static Date getFirstDayOfMonth(Date date) {
        Calendar cal = Calendar.getInstance();

        cal.setTime(date);
        cal.set(Calendar.DAY_OF_MONTH, 1);

        return cal.getTime();
    }

    /**
     * get some hour of day
     *
      * @param date date
     * @param offsetHour hours
     * @return some hour of day
     * */
    public static Date getSomeHourOfDay(Date date, int offsetHour) {
        Calendar cal = Calendar.getInstance();

        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) + offsetHour);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);

        return cal.getTime();
    }

    /**
     * get last day of month
     *
     * @param  date date
     * @return  get last day of month
     */
    public static Date getLastDayOfMonth(Date date) {
        Calendar cal = Calendar.getInstance();

        cal.setTime(date);

        cal.add(Calendar.MONTH, 1);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.add(Calendar.DAY_OF_MONTH, -1);

        return cal.getTime();
    }

    /**
     * return YYYY-MM-DD 00:00:00
     *
     * @param inputDay date
     * @return start day
     */
   
  public static Date getStartOfDay(Date inputDay) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(inputDay);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    /**
     * return YYYY-MM-DD 23:59:59
     *
     * @param inputDay day
     * @return end of day
     */
    public static Date getEndOfDay(Date inputDay) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(inputDay);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }

    /**
     * return YYYY-MM-DD 00:00:00
     *
     * @param inputDay day
     * @return start of hour
     */
    public static Date getStartOfHour(Date inputDay) {
        Calendar cal = Calendar.getInstance();
        cal.setTim
 e(inputDay);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    /**
     * return YYYY-MM-DD 23:59:59
     *
     * @param inputDay day
     * @return end of hour
     */
    public static Date getEndOfHour(Date inputDay) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(inputDay);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }

    /**
     * get current date
     * @return current date
     */
    public static Date getCurrentDate() {
        return DateUtils.parse(DateUtils.getCurrentTime(),
                Constants.YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * get date
     * @param date date
     * @param calendarField calendarField
     * @param amount amount
     * @return date
     */
    public static Date add(final Date date, final int calendar
 Field, final int amount) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        final Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(calendarField, amount);
        return c.getTime();
    }
}
\ No newline at end of file
+/*
 * 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.common.utils;

import org.apache.dolphinscheduler.common.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.Instant;
import j
 ava.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

/**
 * date utils
 */
public class DateUtils {

    private static final Logger logger = LoggerFactory.getLogger(DateUtils.class);

    /**
     * date to local datetime
     *
     * @param date date
     * @return local datetime
     */
    private static LocalDateTime date2LocalDateTime(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }

    /**
     * local datetime to date
     *
     * @param localDateTime local datetime
     * @return date
     */
    private static Date localDateTime2Date(LocalDateTime localDateTime) {
        Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
        return Date.from(instant);
    }

    /**
     * get current date str
     *
     * @return date string
     */
    public static String getCurrentTime() {
        return getCurre
 ntTime(Constants.YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * get the date string in the specified format of the current time
     *
     * @param format date format
     * @return date string
     */
    public static String getCurrentTime(String format) {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(format));
    }

    /**
     * get the formatted date string
     *
     * @param date date
     * @param format e.g. yyyy-MM-dd HH:mm:ss
     * @return date string
     */
    public static String format(Date date, String format) {
        return format(date2LocalDateTime(date), format);
    }

    /**
     * get the formatted date string
     *
     * @param localDateTime local data time
     * @param format        yyyy-MM-dd HH:mm:ss
     * @return date string
     */
    public static String format(LocalDateTime localDateTime, String format) {
        return localDateTime.format(DateTimeFormatter.ofPattern(format));
    }

    /**
     * convert time to yyy
 y-MM-dd HH:mm:ss format
     *
     * @param date date
     * @return date string
     */
    public static String dateToString(Date date) {
        return format(date, Constants.YYYY_MM_DD_HH_MM_SS);
    }


    /**
     * convert string to date and time
     *
     * @param date date
     * @param format  format
     * @return date
     */
    public static Date parse(String date, String format) {
        try {
            LocalDateTime ldt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(format));
            return localDateTime2Date(ldt);
        } catch (Exception e) {
            logger.error("error while parse date:" + date, e);
        }
        return null;
    }


    /**
     * convert date str to yyyy-MM-dd HH:mm:ss format
     *
     * @param str date string
     * @return yyyy-MM-dd HH:mm:ss format
     */
    public static Date stringToDate(String str) {
        return parse(str, Constants.YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * get seconds between two dat
 es
     *
     * @param d1 date1
     * @param d2 date2
     * @return differ seconds
     */
    public static long differSec(Date d1, Date d2) {
        if(d1 == null || d2 == null){
            return 0;
        }
        return (long) Math.ceil(differMs(d1, d2) / 1000.0);
    }

    /**
     * get ms between two dates
     *
     * @param d1 date1
     * @param d2 date2
     * @return differ ms
     */
    public static long differMs(Date d1, Date d2) {
        return Math.abs(d1.getTime() - d2.getTime());
    }


    /**
     * get hours between two dates
     *
     * @param d1 date1
     * @param d2 date2
     * @return differ hours
     */
    public static long diffHours(Date d1, Date d2) {
        return (long) Math.ceil(diffMin(d1, d2) / 60.0);
    }

    /**
     * get minutes between two dates
     *
     * @param d1 date1
     * @param d2 date2
     * @return differ minutes
     */
    public static long diffMin(Date d1, Date d2) {
        return (long) Math.ceil(diffe
 rSec(d1, d2) / 60.0);
    }


    /**
     * get the date of the specified date in the days before and after
     *
     * @param date date
     * @param day day
     * @return the date of the specified date in the days before and after
     */
    public static Date getSomeDay(Date date, int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, day);
        return calendar.getTime();
    }

    /**
     * compare two dates
     *
     * @param future future date
     * @param old old date
     * @return true if future time greater than old time
     */
    public static boolean compare(Date future, Date old) {
        return future.getTime() > old.getTime();
    }

    /**
     * convert schedule string to date
     *
     * @param schedule schedule
     * @return convert schedule string to date
     */
    public static Date getScheduleDate(String schedule) {
        return stringToDate(schedule);
    }

   
  /**
     * format time to readable
     *
     * @param ms ms
     * @return format time
     */
    public static String format2Readable(long ms) {

        long days = ms / (1000 * 60 * 60 * 24);
        long hours = (ms % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
        long minutes = (ms % (1000 * 60 * 60)) / (1000 * 60);
        long seconds = (ms % (1000 * 60)) / 1000;

        return String.format("%02d %02d:%02d:%02d", days, hours, minutes, seconds);

    }

    /**
     * get monday
     *
     * note: Set the first day of the week to Monday, the default is Sunday
     * @param date date
     * @return get monday
     */
    public static Date getMonday(Date date) {
        Calendar cal = Calendar.getInstance();

        cal.setTime(date);

        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

        return cal.getTime();
    }

    /**
     * get sunday
     *
     * note: Set the first day of the week to Monday, the d
 efault is Sunday
     * @param date date
     * @return get sunday
     */
    public static Date getSunday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);

        return cal.getTime();
    }

    /**
     * get first day of month
     *
     * @param date date
     * @return first day of month
     * */
    public static Date getFirstDayOfMonth(Date date) {
        Calendar cal = Calendar.getInstance();

        cal.setTime(date);
        cal.set(Calendar.DAY_OF_MONTH, 1);

        return cal.getTime();
    }

    /**
     * get some hour of day
     *
     * @param date date
     * @param offsetHour hours
     * @return some hour of day
     * */
    public static Date getSomeHourOfDay(Date date, int offsetHour) {
        Calendar cal = Calendar.getInstance();

        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, cal.get(Calen
 dar.HOUR_OF_DAY) + offsetHour);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);

        return cal.getTime();
    }

    /**
     * get last day of month
     *
     * @param  date date
     * @return  get last day of month
     */
    public static Date getLastDayOfMonth(Date date) {
        Calendar cal = Calendar.getInstance();

        cal.setTime(date);

        cal.add(Calendar.MONTH, 1);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.add(Calendar.DAY_OF_MONTH, -1);

        return cal.getTime();
    }

    /**
     * return YYYY-MM-DD 00:00:00
     *
     * @param inputDay date
     * @return start day
     */
    public static Date getStartOfDay(Date inputDay) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(inputDay);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
     
    return cal.getTime();
    }

    /**
     * return YYYY-MM-DD 23:59:59
     *
     * @param inputDay day
     * @return end of day
     */
    public static Date getEndOfDay(Date inputDay) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(inputDay);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }

    /**
     * return YYYY-MM-DD 00:00:00
     *
     * @param inputDay day
     * @return start of hour
     */
    public static Date getStartOfHour(Date inputDay) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(inputDay);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    /**
     * return YYYY-MM-DD 23:59:59
     *
     * @param inputDay day
     * @return end of hour
     */
    public stat
 ic Date getEndOfHour(Date inputDay) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(inputDay);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }

    /**
     * get current date
     * @return current date
     */
    public static Date getCurrentDate() {
        return DateUtils.parse(DateUtils.getCurrentTime(),
                Constants.YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * get date
     * @param date date
     * @param calendarField calendarField
     * @param amount amount
     * @return date
     */
    public static Date add(final Date date, final int calendarField, final int amount) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        final Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(calendarField, amount);
        return c.getTime();
    }
}
\ No newline at end of file
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DependentUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DependentUtils.java
index 591c16d..edde12b 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DependentUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DependentUtils.java
@@ -69,9 +69,6 @@ public class DependentUtils {
     public static List<DateInterval> getDateIntervalList(Date businessDate, String dateValue){
         List<DateInterval> result = new ArrayList<>();
         switch (dateValue){
-            case "currentHour":
-                result = DependentDateUtils.getLastHoursInterval(businessDate, 0);
-                break;
             case "last1Hour":
                 result =  DependentDateUtils.getLastHoursInterval(businessDate, 1);
                 break;
@@ -81,9 +78,6 @@ public class DependentUtils {
             case "last3Hours":
                 result =  DependentDateUtils.getLastHoursInterval(businessDate, 3);
                 break;
-            case "last24Hours":
-                result = DependentDateUtils.getSpecialLastDayInterval(businessDate);
-                break;
             case "today":
                 result =  DependentDateUtils.getTodayInterval(businessDate);
                 break;
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java
index 10fa0b6..71bbf1a 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java
@@ -185,7 +185,7 @@ public class HadoopUtils implements Closeable {
      * @param applicationId application id
      * @return url of application
      */
-    public String getApplicationUrl(String applicationId) throws Exception {
+    public String getApplicationUrl(String applicationId) {
         /**
          * if rmHaIds contains xx, it signs not use resourcemanager
          * otherwise:
@@ -193,21 +193,21 @@ public class HadoopUtils implements Closeable {
          *  if rmHaIds not empty: resourcemanager HA enabled
          */
         String appUrl = "";
+        //not use resourcemanager
+        if (rmHaIds.contains(Constants.YARN_RESOURCEMANAGER_HA_XX)) {
 
-        if (StringUtils.isEmpty(rmHaIds)){
-            //single resourcemanager enabled
-            appUrl = appAddress;
-            yarnEnabled = true;
-        } else {
+            yarnEnabled = false;
+            logger.warn("should not step here");
+        } else if (!StringUtils.isEmpty(rmHaIds)) {
             //resourcemanager HA enabled
             appUrl = getAppAddress(appAddress, rmHaIds);
             yarnEnabled = true;
             logger.info("application url : {}", appUrl);
+        } else {
+            //single resourcemanager enabled
+            yarnEnabled = true;
         }
 
-        if(StringUtils.isBlank(appUrl)){
-            throw new Exception("application url is blank");
-        }
         return String.format(appUrl, applicationId);
     }
 
@@ -407,7 +407,7 @@ public class HadoopUtils implements Closeable {
      * @param applicationId application id
      * @return the return may be null or there may be other parse exceptions
      */
-    public ExecutionStatus getApplicationStatus(String applicationId) throws Exception{
+    public ExecutionStatus getApplicationStatus(String applicationId) {
         if (StringUtils.isEmpty(applicationId)) {
             return null;
         }
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
index 2d09f5c..aae14a6 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
@@ -47,7 +47,7 @@ public class ParameterUtils {
    * @return convert parameters place holders
    */
   public static String convertParameterPlaceholders(String parameterString, Map<String, String> parameterMap) {
-    if (StringUtils.isEmpty(parameterString) || parameterMap == null) {
+    if (StringUtils.isEmpty(parameterString)) {
       return parameterString;
     }
 
@@ -212,28 +212,28 @@ public class ParameterUtils {
     return inputString;
   }
 
-
   /**
-   * $[yyyyMMdd] replace schedule time
-   * @param text
-   * @param scheduleTime
-   * @return
+   * new
+   * $[yyyyMMdd] replace scheduler time
+   * @param text text
+   * @param scheduleTime scheduleTime
+   * @param paramsMap paramsMap
+   * @return text
    */
-  public static String replaceScheduleTime(String text, Date scheduleTime) {
-      Map<String, Property> paramsMap = new HashMap<>();
+  public static String replaceScheduleTime(String text, Date scheduleTime, Map<String, Property> paramsMap) {
+    if (paramsMap != null) {
       //if getScheduleTime null ,is current date
       if (null == scheduleTime) {
         scheduleTime = new Date();
       }
-
       String dateTime = org.apache.dolphinscheduler.common.utils.DateUtils.format(scheduleTime, Constants.PARAMETER_FORMAT_TIME);
       Property p = new Property();
       p.setValue(dateTime);
       p.setProp(Constants.PARAMETER_SHECDULE_TIME);
       paramsMap.put(Constants.PARAMETER_SHECDULE_TIME, p);
       text = ParameterUtils.convertParameterPlaceholders2(text, convert(paramsMap));
-
-      return text;
+    }
+    return text;
   }
 
 
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ResInfo.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ResInfo.java
index 8a6ef1e..c4ce006 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ResInfo.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ResInfo.java
@@ -18,6 +18,8 @@ package org.apache.dolphinscheduler.common.utils;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.model.Server;
 
+import java.util.Date;
+
 /**
  *  heartbeat for ZK reigster res info
  */
@@ -105,10 +107,8 @@ public class ResInfo {
         masterServer.setResInfo(getResInfoJson(Double.parseDouble(masterArray[0]),
                 Double.parseDouble(masterArray[1]),
                 Double.parseDouble(masterArray[2])));
-        masterServer.setCreateTime(DateUtils.stringToDate(masterArray[6]));
-        masterServer.setLastHeartbeatTime(DateUtils.stringToDate(masterArray[7]));
-        //set process id
-        masterServer.setId(Integer.parseInt(masterArray[9]));
+        masterServer.setCreateTime(DateUtils.stringToDate(masterArray[3]));
+        masterServer.setLastHeartbeatTime(DateUtils.stringToDate(masterArray[4]));
         return masterServer;
     }
 
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ScriptRunner.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ScriptRunner.java
index 1579761..f92839b 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ScriptRunner.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ScriptRunner.java
@@ -1,9 +1,10 @@
-/**
- * Copyright 2004-2020 the original author or authors.
- *
- * Licensed 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
+/*
+ * 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
  *
@@ -27,6 +28,27 @@ import java.sql.Statement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/*
+ * Slightly modified version of the com.ibatis.common.jdbc.ScriptRunner class
+ * from the iBATIS Apache project. Only removed dependency on Resource class
+ * and a constructor
+ */
+/*
+ *  Copyright 2004 Clinton Begin
+ *
+ *  Licensed 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.
+ */
+
 /**
  * Tool to run database scripts
  */
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/dependent/DependentDateUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/dependent/DependentDateUtils.java
index 15bec19..32d1e41 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/dependent/DependentDateUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/dependent/DependentDateUtils.java
@@ -33,13 +33,6 @@ public class DependentDateUtils {
      */
     public static List<DateInterval> getLastHoursInterval(Date businessDate, int hourNumber){
         List<DateInterval> dateIntervals = new ArrayList<>();
-        if (hourNumber == 0) {
-            Date lastHour = DateUtils.getSomeHourOfDay(businessDate, 0);
-            Date beginTime = DateUtils.getStartOfHour(lastHour);
-            Date endTime = DateUtils.getEndOfHour(lastHour);
-            dateIntervals.add(new DateInterval(beginTime, endTime));
-            return dateIntervals;
-        }
         for(int index = hourNumber; index > 0; index--){
             Date lastHour = DateUtils.getSomeHourOfDay(businessDate, -index);
             Date beginTime = DateUtils.getStartOfHour(lastHour);
@@ -84,26 +77,6 @@ public class DependentDateUtils {
     }
 
     /**
-     * get special last day interval list (yesterday 1:00 - today 1:00)
-     * @param businessDate businessDate
-     * @return DateInterval list
-     */
-    public static List<DateInterval> getSpecialLastDayInterval(Date businessDate){
-
-        List<DateInterval> dateIntervals = new ArrayList<>();
-        int hourIndex = DateUtils.getHourIndex(businessDate);
-        int startIndex = hourIndex + 23;
-        int endIndex = startIndex - 24;
-        for(int index = startIndex; index > endIndex; index--) {
-            Date lastHour = DateUtils.getSomeHourOfDay(businessDate, -index);
-            Date beginTime = DateUtils.getStartOfHour(lastHour);
-            Date endTime = DateUtils.getEndOfHour(lastHour);
-            dateIntervals.add(new DateInterval(beginTime, endTime));
-        }
-        return dateIntervals;
-    }
-
-    /**
      * get interval between this month first day and businessDate
      * @param businessDate businessDate
      * @return DateInterval list
diff --git a/dolphinscheduler-common/src/main/resources/common.properties b/dolphinscheduler-common/src/main/resources/common.properties
index c167781..0cc118f 100644
--- a/dolphinscheduler-common/src/main/resources/common.properties
+++ b/dolphinscheduler-common/src/main/resources/common.properties
@@ -18,23 +18,23 @@
 # resource storage type : HDFS,S3,NONE
 resource.storage.type=NONE
 
-# resource store on HDFS/S3 path, resource file will store to this hadoop hdfs path, self configuration, please make sure the directory exists on hdfs and have read write permissions。"/dolphinscheduler" is recommended
-resource.upload.path=/dolphinscheduler
+# resource store on HDFS/S3 path, resource file will store to this hadoop hdfs path, self configuration, please make sure the directory exists on hdfs and have read write permissions."/dolphinscheduler" is recommended
+#resource.upload.path=/dolphinscheduler
 
 # user data local directory path, please make sure the directory exists and have read write permissions
 #data.basedir.path=/tmp/dolphinscheduler
 
 # whether kerberos starts
-hadoop.security.authentication.startup.state=false
+#hadoop.security.authentication.startup.state=false
 
 # java.security.krb5.conf path
-java.security.krb5.conf.path=/opt/krb5.conf
+#java.security.krb5.conf.path=/opt/krb5.conf
 
 # login user from keytab username
-login.user.keytab.username=hdfs-mycluster@ESZ.COM
+#login.user.keytab.username=hdfs-mycluster@ESZ.COM
 
 # loginUserFromKeytab path
-login.user.keytab.path=/opt/hdfs.headless.keytab
+#login.user.keytab.path=/opt/hdfs.headless.keytab
 
 #resource.view.suffixs
 #resource.view.suffixs=txt,log,sh,conf,cfg,py,java,sql,hql,xml,properties
@@ -45,22 +45,22 @@ hdfs.root.user=hdfs
 # if resource.storage.type=S3,the value like: s3a://dolphinscheduler ; if resource.storage.type=HDFS, When namenode HA is enabled, you need to copy core-site.xml and hdfs-site.xml to conf dir
 fs.defaultFS=hdfs://mycluster:8020
 
-# if resource.storage.type=S3,s3 endpoint
-fs.s3a.endpoint=http://192.168.xx.xx:9010
+# if resource.storage.type=S3,s3 endpoint
+#fs.s3a.endpoint=http://192.168.199.91:9010
 
-# if resource.storage.type=S3,s3 access key
-fs.s3a.access.key=A3DXS30FO22544RE
+# if resource.storage.type=S3,s3 access key
+#fs.s3a.access.key=A3DXS30FO22544RE
 
-# if resource.storage.type=S3,s3 secret key
-fs.s3a.secret.key=OloCLq3n+8+sdPHUhJ21XrSxTC+JK
+# if resource.storage.type=S3,s3 secret key
+#fs.s3a.secret.key=OloCLq3n+8+sdPHUhJ21XrSxTC+JK
 
-# if resourcemanager HA enable, please type the HA ips ; if resourcemanager is single, make this value empty
+# if not use hadoop resourcemanager, please keep default value; if resourcemanager HA enable, please type the HA ips ; if resourcemanager is single, make this value empty
 yarn.resourcemanager.ha.rm.ids=192.168.xx.xx,192.168.xx.xx
 
-# if resourcemanager HA enable or not use resourcemanager, please keep the default value; If resourcemanager is single, you only need to replace ds1 to actual resourcemanager hostname.
-yarn.application.status.address=http://ds1:8088/ws/v1/cluster/apps/%s
+# If resourcemanager HA enable or not use resourcemanager, please keep the default value; If resourcemanager is single, you only need to replace ark1 to actual resourcemanager hostname.
+yarn.application.status.address=http://ark1:8088/ws/v1/cluster/apps/%s
 # job history status url when application number threshold is reached(default 10000,maybe it was set to 1000)
-yarn.job.history.status.address=http://ds1:19888/ws/v1/history/mapreduce/jobs/%s
+yarn.job.history.status.address=http://ark1:19888/ws/v1/history/mapreduce/jobs/%s
 
 # system env path
 #dolphinscheduler.env.path=env/dolphinscheduler_env.sh
diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/shell/ShellExecutorTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/shell/ShellExecutorTest.java
index e21bc77..70ca5e2 100644
--- a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/shell/ShellExecutorTest.java
+++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/shell/ShellExecutorTest.java
@@ -33,12 +33,47 @@ public class ShellExecutorTest {
     @Test
     public void execCommand() throws InterruptedException {
 
-        try {
-            String res = ShellExecutor.execCommand("groups");
-            logger.info("thread id:" + Thread.currentThread().getId() + ", result:" + res.substring(0, 5));
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
+        ThreadPoolExecutors executors = ThreadPoolExecutors.getInstance();
+        CountDownLatch latch = new CountDownLatch(200);
+
+        executors.execute(new Runnable() {
+            @Override
+            public void run() {
+
+                try {
+                    int i =0;
+                    while(i++ <= 100){
+                        String res = ShellExecutor.execCommand("groups");
+                        logger.info("time:" + i + ",thread id:" + Thread.currentThread().getId() + ", result:" + res.substring(0,5));
+                        Thread.sleep(100l);
+                        latch.countDown();
+                    }
+
+                } catch (IOException | InterruptedException e) {
+                    e.printStackTrace();
+                }
+            }
+        });
 
+        executors.execute(new Runnable() {
+            @Override
+            public void run() {
+
+                try {
+                    int i =0;
+                    while(i++ <= 100){
+                        String res = ShellExecutor.execCommand("whoami");
+                        logger.info("time:" + i + ",thread id:" + Thread.currentThread().getId() + ", result2:" + res);
+                        Thread.sleep(100l);
+                        latch.countDown();
+                    }
+
+                } catch (IOException | InterruptedException e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+
+        latch.await();
+    }
 }
\ No newline at end of file
diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DependentUtilsTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DependentUtilsTest.java
index 40e3e5a..a3ee26e 100644
--- a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DependentUtilsTest.java
+++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DependentUtilsTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.dolphinscheduler.common.utils;
 
-import com.google.common.collect.Lists;
 import org.apache.dolphinscheduler.common.enums.DependResult;
 import org.apache.dolphinscheduler.common.enums.DependentRelation;
 import org.apache.dolphinscheduler.common.model.DateInterval;
@@ -344,45 +343,6 @@ public class DependentUtilsTest {
 
     }
 
-    @Test
-    public void testGetCurretHour() {
-        String dateValue = "currentHour";
-
-        Date curDay = DateUtils.stringToDate("2020-05-15 12:10:00");
-
-        List<DateInterval> dateIntervals  = DependentUtils.getDateIntervalList(curDay, dateValue);
-
-        DateInterval expect = new DateInterval(DateUtils.getStartOfHour(DateUtils.stringToDate("2020-05-15 12:00:00")), DateUtils.getEndOfHour(DateUtils.stringToDate("2020-05-15 12:59:59")));
-
-        Assert.assertEquals(expect, dateIntervals.get(0));
-        Assert.assertEquals(1, dateIntervals.size());
-    }
-
-    @Test
-    public void testGetLast24Hour() {
-        Date curDay = DateUtils.stringToDate("2020-05-15 12:10:00");
-        String dateValue = "last24Hours";
-
-        List<DateInterval> dateIntervals = DependentUtils.getDateIntervalList(curDay, dateValue);
-
-        List<DateInterval> expect = Lists.newArrayList();
-        for (int a = 1; a < 24; a++) {
-            String i = a + "";
-            if (a < 10) {
-                i = "0" + i;
-            }
-            DateInterval dateInterval = new DateInterval(DateUtils.getStartOfHour(DateUtils.stringToDate("2020-05-14 " + i + ":00:00")), DateUtils.getEndOfHour(DateUtils.stringToDate("2020-05-14 " + i + ":59:59")));
-            expect.add(dateInterval);
-        }
-        DateInterval dateInterval = new DateInterval(DateUtils.getStartOfHour(DateUtils.stringToDate("2020-05-15 00:00:00")), DateUtils.getEndOfHour(DateUtils.stringToDate("2020-05-15 00:59:59")));
-        expect.add(dateInterval);
-
-        Assert.assertEquals(24, dateIntervals.size());
-
-        for (int i = 0; i< expect.size(); i++) {
-            Assert.assertEquals(expect.get(i), dateIntervals.get(i));
-        }
-    }
 
     @Test
     public void testMonth(){
diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HadoopUtilsTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HadoopUtilsTest.java
index f6efb1f..440f863 100644
--- a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HadoopUtilsTest.java
+++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HadoopUtilsTest.java
@@ -142,7 +142,7 @@ public class HadoopUtilsTest {
     @Test
     public void isYarnEnabled() {
         boolean result = hadoopUtils.isYarnEnabled();
-        Assert.assertEquals(true, result);
+        Assert.assertEquals(false, result);
     }
 
     @Test
@@ -185,7 +185,7 @@ public class HadoopUtilsTest {
     }
 
     @Test
-    public void getApplicationUrl() throws Exception {
+    public void getApplicationUrl(){
         String application_1516778421218_0042 = hadoopUtils.getApplicationUrl("application_1529051418016_0167");
         logger.info(application_1516778421218_0042);
     }
diff --git a/dolphinscheduler-dao/pom.xml b/dolphinscheduler-dao/pom.xml
index 433bb70..b7fc872 100644
--- a/dolphinscheduler-dao/pom.xml
+++ b/dolphinscheduler-dao/pom.xml
@@ -21,7 +21,7 @@
 	<parent>
 		<groupId>org.apache.dolphinscheduler</groupId>
 		<artifactId>dolphinscheduler</artifactId>
-		<version>1.3.0-SNAPSHOT</version>
+		<version>1.2.1-SNAPSHOT</version>
 	</parent>
 	<artifactId>dolphinscheduler-dao</artifactId>
 	<name>${project.artifactId}</name>
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/BaseDataSource.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/BaseDataSource.java
index a8cad85..5d2a41c 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/BaseDataSource.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/BaseDataSource.java
@@ -34,12 +34,12 @@ public abstract class BaseDataSource {
   /**
    * user name
    */
-  protected String user;
+  private String user;
 
   /**
    * user password
    */
-  protected String password;
+  private String password;
 
   /**
    * data source address
@@ -124,8 +124,7 @@ public abstract class BaseDataSource {
    * @param jdbcUrl jdbc url
    */
   private void appendOther(StringBuilder jdbcUrl) {
-    String otherParams = filterOther(getOther());
-    if (StringUtils.isNotEmpty(otherParams)) {
+    if (StringUtils.isNotEmpty(getOther())) {
       String separator = "";
       switch (dbTypeSelector()) {
         case CLICKHOUSE:
@@ -145,14 +144,10 @@ public abstract class BaseDataSource {
         default:
           logger.error("Db type mismatch!");
       }
-      jdbcUrl.append(separator).append(otherParams);
+      jdbcUrl.append(separator).append(getOther());
     }
   }
 
-  protected String filterOther(String otherParams){
-    return otherParams;
-  }
-
   /**
    * test whether the data source can be connected successfully
    */
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/MySQLDataSource.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/MySQLDataSource.java
index 50e5e7b..94a4895 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/MySQLDataSource.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/MySQLDataSource.java
@@ -18,21 +18,12 @@ package org.apache.dolphinscheduler.dao.datasource;
 
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.DbType;
-import org.apache.dolphinscheduler.common.utils.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * data source of mySQL
  */
 public class MySQLDataSource extends BaseDataSource {
 
-  private final Logger logger = LoggerFactory.getLogger(MySQLDataSource.class);
-
-  private final String sensitiveParam = "autoDeserialize=true";
-
-  private final char symbol = '&';
-
   /**
    * gets the JDBC url for the data source connection
    * @return jdbc url
@@ -50,42 +41,4 @@ public class MySQLDataSource extends BaseDataSource {
     return DbType.MYSQL;
   }
 
-  @Override
-  protected String filterOther(String other){
-    if(StringUtils.isBlank(other)){
-        return "";
-    }
-    if(other.contains(sensitiveParam)){
-      int index = other.indexOf(sensitiveParam);
-      String tmp = sensitiveParam;
-      if(index == 0 || other.charAt(index + 1) == symbol){
-        tmp = tmp + symbol;
-      } else if(other.charAt(index - 1) == symbol){
-        tmp = symbol + tmp;
-      }
-      logger.warn("sensitive param : {} in otherParams field is filtered", tmp);
-      other = other.replace(tmp, "");
-    }
-    logger.debug("other : {}", other);
-    return other;
-  }
-
-  @Override
-  public String getUser() {
-    if(user.contains(sensitiveParam)){
-      logger.warn("sensitive param : {} in username field is filtered", sensitiveParam);
-      user = user.replace(sensitiveParam, "");
-    }
-    logger.debug("username : {}", user);
-    return user;
-  }
-
-  @Override
-  public String getPassword() {
-    if(password.contains(sensitiveParam)){
-      logger.warn("sensitive param : {} in password field is filtered", sensitiveParam);
-      password = password.replace(sensitiveParam, "");
-    }
-    return password;
-  }
 }
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
index 37c451a..8067663 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
@@ -25,14 +25,14 @@ import org.apache.dolphinscheduler.common.enums.DbType;
  */
 public class OracleDataSource extends BaseDataSource {
 
-    private DbConnectType connectType;
+    private DbConnectType type;
 
-    public DbConnectType getConnectType() {
-        return connectType;
+    public DbConnectType getType() {
+        return type;
     }
 
-    public void setConnectType(DbConnectType connectType) {
-        this.connectType = connectType;
+    public void setType(DbConnectType type) {
+        this.type = type;
     }
 
     /**
@@ -48,7 +48,7 @@ public class OracleDataSource extends BaseDataSource {
      */
     @Override
     protected void appendDatabase(StringBuilder jdbcUrl) {
-        if (getConnectType() == DbConnectType.ORACLE_SID) {
+        if (getType() == DbConnectType.ORACLE_SID) {
             jdbcUrl.append(":");
         } else {
             jdbcUrl.append("/");
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessData.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessData.java
index e9a6d99..b563487 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessData.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessData.java
@@ -102,14 +102,4 @@ public class ProcessData {
   public void setTenantId(int tenantId) {
     this.tenantId = tenantId;
   }
-
-  @Override
-  public String toString() {
-    return "ProcessData{" +
-            "tasks=" + tasks +
-            ", globalParams=" + globalParams +
-            ", timeout=" + timeout +
-            ", tenantId=" + tenantId +
-            '}';
-  }
 }
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
index 4df93f2..b75bb58 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
@@ -102,11 +102,4 @@ public interface ProcessDefinitionMapper extends BaseMapper<ProcessDefinition> {
      */
     @MapKey("id")
     List<Map<String, Object>> listResources();
-
-    /**
-     * list all resource ids by user id
-     * @return resource ids list
-     */
-    @MapKey("id")
-    List<Map<String, Object>> listResourcesByUser(@Param("userId") Integer userId);
 }
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/DolphinSchedulerManager.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/DolphinSchedulerManager.java
index 8d1d862..a00cb1c 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/DolphinSchedulerManager.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/DolphinSchedulerManager.java
@@ -112,12 +112,11 @@ public class DolphinSchedulerManager {
             for(String schemaDir : schemaList) {
                 schemaVersion = schemaDir.split("_")[0];
                 if(SchemaUtils.isAGreatVersion(schemaVersion , version)) {
-                    logger.info("upgrade DolphinScheduler metadata version from {} to {}", version, schemaVersion);
+
+                    logger.info("upgrade DolphinScheduler metadata version from " + version + " to " + schemaVersion);
+
                     logger.info("Begin upgrading DolphinScheduler's table structure");
                     upgradeDao.upgradeDolphinScheduler(schemaDir);
-                    if ("1.3.0".equals(schemaVersion)) {
-                        upgradeDao.upgradeDolphinSchedulerWorkerGroup();
-                    }
                     version = schemaVersion;
                 }
 
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDao.java
deleted file mode 100644
index 768f75c..0000000
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDao.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.dao.upgrade;
-
-import org.apache.dolphinscheduler.common.utils.ConnectionUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.*;
-
-public class ProcessDefinitionDao {
-
-
-    public static final Logger logger = LoggerFactory.getLogger(ProcessDefinitionDao.class);
-
-    /**
-     * queryAllProcessDefinition
-     * @param conn jdbc connection
-     * @return ProcessDefinition Json List
-     */
-    public Map<Integer,String> queryAllProcessDefinition(Connection conn){
-
-        Map<Integer,String> processDefinitionJsonMap = new HashMap<>();
-
-        String sql = String.format("SELECT id,process_definition_json FROM t_ds_process_definition");
-        ResultSet rs = null;
-        PreparedStatement pstmt = null;
-        try {
-            pstmt = conn.prepareStatement(sql);
-            rs = pstmt.executeQuery();
-
-            while (rs.next()){
-                Integer id = rs.getInt(1);
-                String processDefinitionJson = rs.getString(2);
-                processDefinitionJsonMap.put(id,processDefinitionJson);
-            }
-
-        } catch (Exception e) {
-            logger.error(e.getMessage(),e);
-            throw new RuntimeException("sql: " + sql, e);
-        } finally {
-            ConnectionUtils.releaseResource(rs, pstmt, conn);
-        }
-
-        return processDefinitionJsonMap;
-    }
-
-
-    /**
-     * updateProcessDefinitionJson
-     * @param conn jdbc connection
-     * @param processDefinitionJsonMap processDefinitionJsonMap
-     */
-    public void updateProcessDefinitionJson(Connection conn,Map<Integer,String> processDefinitionJsonMap){
-        String sql = "UPDATE t_ds_process_definition SET process_definition_json=? where id=?";
-        try {
-            for (Map.Entry<Integer, String> entry : processDefinitionJsonMap.entrySet()){
-                try(PreparedStatement pstmt= conn.prepareStatement(sql)) {
-                    pstmt.setString(1,entry.getValue());
-                    pstmt.setInt(2,entry.getKey());
-                    pstmt.executeUpdate();
-                }
-
-            }
-
-        } catch (Exception e) {
-            logger.error(e.getMessage(),e);
-            throw new RuntimeException("sql: " + sql, e);
-        } finally {
-            ConnectionUtils.releaseResource(conn);
-        }
-    }
-}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java
index 29c6253..e708620 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java
@@ -16,11 +16,12 @@
  */
 package org.apache.dolphinscheduler.dao.upgrade;
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.alibaba.druid.pool.DruidDataSource;
 import org.apache.dolphinscheduler.common.enums.DbType;
-import org.apache.dolphinscheduler.common.utils.*;
+import org.apache.dolphinscheduler.common.utils.ConnectionUtils;
+import org.apache.dolphinscheduler.common.utils.SchemaUtils;
+import org.apache.dolphinscheduler.common.utils.ScriptRunner;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
 import org.apache.dolphinscheduler.dao.AbstractBaseDao;
 import org.apache.dolphinscheduler.dao.datasource.ConnectionFactory;
 import org.slf4j.Logger;
@@ -33,8 +34,6 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.Map;
 
 public abstract class UpgradeDao extends AbstractBaseDao {
 
@@ -45,7 +44,6 @@ public abstract class UpgradeDao extends AbstractBaseDao {
     protected static final DataSource dataSource = getDataSource();
     private static final DbType dbType = getCurrentDbType();
 
-
     @Override
     protected void init() {
 
@@ -121,7 +119,6 @@ public abstract class UpgradeDao extends AbstractBaseDao {
         // Execute the dolphinscheduler DML, it can be rolled back
         runInitDML(initSqlPath);
 
-
     }
 
     /**
@@ -258,57 +255,6 @@ public abstract class UpgradeDao extends AbstractBaseDao {
         upgradeDolphinSchedulerDDL(schemaDir);
 
         upgradeDolphinSchedulerDML(schemaDir);
-    }
-
-
-    /**
-     * upgrade DolphinScheduler worker group
-     * ds-1.3.0 modify the worker group for process definition json
-     */
-    public void upgradeDolphinSchedulerWorkerGroup() {
-        updateProcessDefinitionJsonWorkerGroup();
-    }
-    /**
-     * updateProcessDefinitionJsonWorkerGroup
-     */
-    protected void updateProcessDefinitionJsonWorkerGroup(){
-        WorkerGroupDao workerGroupDao = new WorkerGroupDao();
-        ProcessDefinitionDao processDefinitionDao = new ProcessDefinitionDao();
-        Map<Integer,String> replaceProcessDefinitionMap = new HashMap<>();
-        try {
-            Map<Integer, String> oldWorkerGroupMap = workerGroupDao.queryAllOldWorkerGroup(dataSource.getConnection());
-            Map<Integer,String> processDefinitionJsonMap = processDefinitionDao.queryAllProcessDefinition(dataSource.getConnection());
-
-            for (Map.Entry<Integer,String> entry : processDefinitionJsonMap.entrySet()){
-                ObjectNode jsonObject = JSONUtils.parseObject(entry.getValue());
-                ArrayNode tasks = JSONUtils.parseArray(jsonObject.get("tasks").toString());
-
-                for (int i = 0 ;i < tasks.size() ; i++){
-                    ObjectNode task = (ObjectNode) tasks.path(i);
-                    ObjectNode workerGroupNode = (ObjectNode) task.path("workerGroupId");
-                    Integer workerGroupId = -1;
-                    if(workerGroupNode != null && workerGroupNode.canConvertToInt()){
-                        workerGroupId = workerGroupNode.asInt(-1);
-                    }
-                    if (workerGroupId == -1) {
-                        task.put("workerGroup", "default");
-                    }else {
-                        task.put("workerGroup", oldWorkerGroupMap.get(workerGroupId));
-                    }
-                }
-
-                jsonObject.remove("task");
-
-                jsonObject.put("tasks",tasks);
-
-                replaceProcessDefinitionMap.put(entry.getKey(),jsonObject.toString());
-            }
-            if (replaceProcessDefinitionMap.size() > 0){
-                processDefinitionDao.updateProcessDefinitionJson(dataSource.getConnection(),replaceProcessDefinitionMap);
-            }
-        }catch (Exception e){
-            logger.error("update process definition json workergroup error",e);
-        }
 
     }
 
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/WorkerGroupDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/WorkerGroupDao.java
deleted file mode 100644
index 936b1d4..0000000
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/WorkerGroupDao.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.dao.upgrade;
-
-import org.apache.dolphinscheduler.common.utils.ConnectionUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.HashMap;
-import java.util.Map;
-
-public class WorkerGroupDao {
-
-    public static final Logger logger = LoggerFactory.getLogger(WorkerGroupDao.class);
-
-    /**
-     * query all old worker group
-     * @param conn jdbc connection
-     * @return old worker group Map
-     */
-    public Map<Integer,String> queryAllOldWorkerGroup(Connection conn){
-        Map<Integer,String> workerGroupMap = new HashMap<>();
-
-        String sql = String.format("select id,name from t_ds_worker_group");
-        ResultSet rs = null;
-        PreparedStatement pstmt = null;
-        try {
-            pstmt = conn.prepareStatement(sql);
-            rs = pstmt.executeQuery();
-
-            while (rs.next()){
-                int id = rs.getInt(1);
-                String name = rs.getString(2);
-                workerGroupMap.put(id,name);
-            }
-
-        } catch (Exception e) {
-            logger.error(e.getMessage(),e);
-            throw new RuntimeException("sql: " + sql, e);
-        } finally {
-            ConnectionUtils.releaseResource(rs, pstmt, conn);
-        }
-
-        return workerGroupMap;
-    }
-}
diff --git a/dolphinscheduler-dao/src/main/resources/datasource.properties b/dolphinscheduler-dao/src/main/resources/datasource.properties
index 25ac220..984aa17 100644
--- a/dolphinscheduler-dao/src/main/resources/datasource.properties
+++ b/dolphinscheduler-dao/src/main/resources/datasource.properties
@@ -21,6 +21,7 @@ spring.datasource.url=jdbc:postgresql://localhost:5432/dolphinscheduler
 spring.datasource.username=test
 spring.datasource.password=test
 
+# mysql
 # connection configuration
 #spring.datasource.initialSize=5
 # min connection number
@@ -60,4 +61,4 @@ spring.datasource.password=test
 
 # open PSCache, specify count PSCache for every connection
 #spring.datasource.poolPreparedStatements=true
-#spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
+#spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
\ No newline at end of file
diff --git a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
index 3e538a2..0cabf80 100644
--- a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
+++ b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
@@ -96,10 +96,4 @@
         FROM t_ds_process_definition
         WHERE release_state = 1 and resource_ids is not null and resource_ids != ''
     </select>
-
-    <select id="listResourcesByUser" resultType="java.util.HashMap">
-        SELECT id,resource_ids
-        FROM t_ds_process_definition
-        WHERE user_id = #{userId} and release_state = 1 and resource_ids is not null and resource_ids != ''
-    </select>
 </mapper>
\ No newline at end of file
diff --git a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml
index f219ad3..9ad2567 100644
--- a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml
+++ b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml
@@ -46,10 +46,8 @@
     <select id="queryDetailsById" resultType="org.apache.dolphinscheduler.dao.entity.User">
         select u.*, t.tenant_name,
         case when u.queue <![CDATA[ <> ]]>  '' then u.queue else q.queue_name end as queue_name
-        from t_ds_user u
-        left join t_ds_tenant t on u.tenant_id=t.id
-        left join t_ds_queue q on t.queue_id = q.id
-        WHERE u.id = #{userId}
+        from t_ds_user u,t_ds_tenant t,t_ds_queue q
+        WHERE u.tenant_id = t.id and t.queue_id = q.id and u.id = #{userId}
     </select>
     <select id="queryUserListByAlertGroupId" resultType="org.apache.dolphinscheduler.dao.entity.User">
       select u.*
diff --git a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkerGroupMapper.xml b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkerGroupMapper.xml
new file mode 100644
index 0000000..84dd4db
--- /dev/null
+++ b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkerGroupMapper.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="org.apache.dolphinscheduler.dao.mapper.WorkerGroupMapper">
+    <select id="queryAllWorkerGroup" resultType="org.apache.dolphinscheduler.dao.entity.WorkerGroup">
+        select *
+        from t_ds_worker_group
+        order by update_time desc
+    </select>
+    <select id="queryWorkerGroupByName" resultType="org.apache.dolphinscheduler.dao.entity.WorkerGroup">
+        select *
+        from t_ds_worker_group
+        where name = #{name}
+    </select>
+    <select id="queryListPaging" resultType="org.apache.dolphinscheduler.dao.entity.WorkerGroup">
+        select *
+        from t_ds_worker_group
+        where 1 = 1
+        <if test="searchVal != null and searchVal != ''">
+            and  name like concat('%', #{searchVal}, '%')
+        </if>
+        order by  update_time desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/datasource/MySQLDataSourceTest.java b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/datasource/MySQLDataSourceTest.java
deleted file mode 100644
index 59bf5c4..0000000
--- a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/datasource/MySQLDataSourceTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.dao.datasource;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * test data source of mySQL
- */
-public class MySQLDataSourceTest {
-
-    @Test
-    public void testGetUser(){
-        MySQLDataSource dataSource = new MySQLDataSource();
-        String safeUsername= "test123";
-        dataSource.setUser(safeUsername);
-        Assert.assertEquals("test123", dataSource.getUser());
-        String sensitiveUsername= "test123?autoDeserialize=true";
-        dataSource.setUser(sensitiveUsername);
-        Assert.assertEquals("test123?", dataSource.getUser());
-    }
-
-    @Test
-    public void testGetPassword(){
-        MySQLDataSource dataSource = new MySQLDataSource();
-        String safePwd= "test_pwd";
-        dataSource.setPassword(safePwd);
-        Assert.assertEquals("test_pwd", dataSource.getPassword());
-        String sensitivePwd= "test_pwd?autoDeserialize=true";
-        dataSource.setPassword(sensitivePwd);
-        Assert.assertEquals("test_pwd?", dataSource.getPassword());
-    }
-
-    @Test
-    public void testFilterOther(){
-        MySQLDataSource dataSource = new MySQLDataSource();
-        String other = dataSource.filterOther("serverTimezone=Asia/Shanghai&characterEncoding=utf8");
-        Assert.assertEquals("serverTimezone=Asia/Shanghai&characterEncoding=utf8", other);
-        //at the first
-        other = dataSource.filterOther("autoDeserialize=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8");
-        Assert.assertEquals("serverTimezone=Asia/Shanghai&characterEncoding=utf8", other);
-        //at the end
-        other = dataSource.filterOther("serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoDeserialize=true");
-        Assert.assertEquals("serverTimezone=Asia/Shanghai&characterEncoding=utf8", other);
-        //in the middle
-        other = dataSource.filterOther("serverTimezone=Asia/Shanghai&autoDeserialize=true&characterEncoding=utf8");
-        Assert.assertEquals("serverTimezone=Asia/Shanghai&characterEncoding=utf8", other);
-    }
-}
diff --git a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSourceTest.java b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSourceTest.java
index 8392f72..5d3d63c 100644
--- a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSourceTest.java
+++ b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSourceTest.java
@@ -25,7 +25,7 @@ public class OracleDataSourceTest {
     @Test
     public void testGetOracleJdbcUrl() {
         OracleDataSource oracleDataSource = new OracleDataSource();
-        oracleDataSource.setConnectType(DbConnectType.ORACLE_SERVICE_NAME);
+        oracleDataSource.setType(DbConnectType.ORACLE_SERVICE_NAME);
         oracleDataSource.setAddress("jdbc:oracle:thin:@//127.0.0.1:1521");
         oracleDataSource.setDatabase("test");
         oracleDataSource.setPassword("123456");
@@ -43,7 +43,7 @@ public class OracleDataSourceTest {
         oracleDataSource2.setDatabase("orcl");
         oracleDataSource2.setPassword("123456");
         oracleDataSource2.setUser("test");
-        oracleDataSource2.setConnectType(DbConnectType.ORACLE_SID);
+        oracleDataSource2.setType(DbConnectType.ORACLE_SID);
         Assert.assertEquals("jdbc:oracle:thin:@127.0.0.1:1521:orcl", oracleDataSource2.getJdbcUrl());
         //set fake principal
         oracleDataSource2.setPrincipal("fake principal");
@@ -58,7 +58,7 @@ public class OracleDataSourceTest {
         OracleDataSource oracleDataSource = new OracleDataSource();
         oracleDataSource.setAddress("jdbc:oracle:thin:@//127.0.0.1:1521");
         oracleDataSource.setDatabase("test");
-        oracleDataSource.setConnectType(DbConnectType.ORACLE_SERVICE_NAME);
+        oracleDataSource.setType(DbConnectType.ORACLE_SERVICE_NAME);
         StringBuilder jdbcUrl = new StringBuilder(oracleDataSource.getAddress());
         oracleDataSource.appendDatabase(jdbcUrl);
         Assert.assertEquals("jdbc:oracle:thin:@//127.0.0.1:1521/test", jdbcUrl.toString());
@@ -66,7 +66,7 @@ public class OracleDataSourceTest {
         OracleDataSource oracleDataSource2 = new OracleDataSource();
         oracleDataSource2.setAddress("jdbc:oracle:thin:@127.0.0.1:1521");
         oracleDataSource2.setDatabase("orcl");
-        oracleDataSource2.setConnectType(DbConnectType.ORACLE_SID);
+        oracleDataSource2.setType(DbConnectType.ORACLE_SID);
         StringBuilder jdbcUrl2 = new StringBuilder(oracleDataSource2.getAddress());
         oracleDataSource2.appendDatabase(jdbcUrl2);
         Assert.assertEquals("jdbc:oracle:thin:@127.0.0.1:1521:orcl", jdbcUrl2.toString());
diff --git a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapperTest.java b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapperTest.java
index ad91e79..ec995df 100644
--- a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapperTest.java
+++ b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapperTest.java
@@ -76,22 +76,6 @@ public class ProcessDefinitionMapperTest {
     }
 
     /**
-     * insert
-     * @return ProcessDefinition
-     */
-    private ProcessDefinition insertTwo(){
-        //insertOne
-        ProcessDefinition processDefinition = new ProcessDefinition();
-        processDefinition.setName("def 2");
-        processDefinition.setProjectId(1010);
-        processDefinition.setUserId(101);
-        processDefinition.setUpdateTime(new Date());
-        processDefinition.setCreateTime(new Date());
-        processDefinitionMapper.insert(processDefinition);
-        return processDefinition;
-    }
-
-    /**
      * test update
      */
     @Test
@@ -197,7 +181,7 @@ public class ProcessDefinitionMapperTest {
     public void testQueryDefinitionListByIdList() {
 
         ProcessDefinition processDefinition = insertOne();
-        ProcessDefinition processDefinition1 = insertTwo();
+        ProcessDefinition processDefinition1 = insertOne();
 
         Integer[] array = new Integer[2];
         array[0] = processDefinition.getId();
@@ -246,13 +230,4 @@ public class ProcessDefinitionMapperTest {
         List<Map<String, Object>> maps = processDefinitionMapper.listResources();
         Assert.assertNotNull(maps);
     }
-
-    @Test
-    public void listResourcesByUserTest(){
-        ProcessDefinition processDefinition = insertOne();
-        processDefinition.setResourceIds("3,5");
-        processDefinition.setReleaseState(ReleaseState.ONLINE);
-        List<Map<String, Object>> maps = processDefinitionMapper.listResourcesByUser(processDefinition.getUserId());
-        Assert.assertNotNull(maps);
-    }
 }
\ No newline at end of file
diff --git a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDaoTest.java b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDaoTest.java
deleted file mode 100644
index a7bbd53..0000000
--- a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDaoTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.dao.upgrade;
-
-
-import org.junit.Test;
-
-import javax.sql.DataSource;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.apache.dolphinscheduler.dao.upgrade.UpgradeDao.getDataSource;
-import static org.hamcrest.Matchers.greaterThanOrEqualTo;
-import static org.junit.Assert.assertThat;
-
-public class ProcessDefinitionDaoTest {
-    final DataSource dataSource = getDataSource();
-    final ProcessDefinitionDao processDefinitionDao = new ProcessDefinitionDao();
-
-    @Test
-    public void testQueryAllProcessDefinition() throws Exception{
-
-        Map<Integer, String> processDefinitionJsonMap = processDefinitionDao.queryAllProcessDefinition(dataSource.getConnection());
-
-        assertThat(processDefinitionJsonMap.size(),greaterThanOrEqualTo(0));
-    }
-
-    @Test
-    public void testUpdateProcessDefinitionJson() throws Exception{
-
-        Map<Integer,String> processDefinitionJsonMap = new HashMap<>();
-        processDefinitionJsonMap.put(1,"test");
-
-        processDefinitionDao.updateProcessDefinitionJson(dataSource.getConnection(),processDefinitionJsonMap);
-
-    }
-
-    @Test(expected = Exception.class)
-    public void testQueryAllProcessDefinitionException() throws Exception{
-        processDefinitionDao.queryAllProcessDefinition(null);
-
-    }
-
-    @Test(expected = Exception.class)
-    public void testUpdateProcessDefinitionJsonException() throws Exception{
-        processDefinitionDao.updateProcessDefinitionJson(null,null);
-
-    }
-
-
-}
diff --git a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/WokrerGrouopDaoTest.java b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/WokrerGrouopDaoTest.java
deleted file mode 100644
index 2c9b80a..0000000
--- a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/WokrerGrouopDaoTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.dao.upgrade;
-
-import org.junit.Test;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.apache.dolphinscheduler.dao.upgrade.UpgradeDao.getDataSource;
-import static org.hamcrest.Matchers.greaterThan;
-import static org.hamcrest.Matchers.greaterThanOrEqualTo;
-import static org.junit.Assert.assertThat;
-
-public class WokrerGrouopDaoTest {
-    protected  final DataSource dataSource = getDataSource();
-
-    @Test
-    public void testQueryQueryAllOldWorkerGroup() throws Exception{
-        WorkerGroupDao workerGroupDao = new WorkerGroupDao();
-
-        Map<Integer, String> workerGroupMap = workerGroupDao.queryAllOldWorkerGroup(dataSource.getConnection());
-
-        assertThat(workerGroupMap.size(),greaterThanOrEqualTo(0));
-    }
-
-    @Test(expected = Exception.class)
-    public void testQueryQueryAllOldWorkerGroupException() throws Exception{
-        WorkerGroupDao workerGroupDao = new WorkerGroupDao();
-
-        workerGroupDao.queryAllOldWorkerGroup(null);
-
-    }
-
-}
diff --git a/dolphinscheduler-dist/pom.xml b/dolphinscheduler-dist/pom.xml
index 166edc9..f4b8d2b 100644
--- a/dolphinscheduler-dist/pom.xml
+++ b/dolphinscheduler-dist/pom.xml
@@ -20,7 +20,7 @@
     <parent>
         <artifactId>dolphinscheduler</artifactId>
         <groupId>org.apache.dolphinscheduler</groupId>
-        <version>1.3.0-SNAPSHOT</version>
+        <version>1.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -203,7 +203,7 @@
                             <packager>dolphinscheduler</packager>
                             <!-- <version>${project.version}</version> -->
                             <prefix>/opt/soft</prefix>
-                            <autoRequires>false</autoRequires>
+
                             <defineStatements>
                                 <!-- disable compile python when rpm build -->
                                 <defineStatement>__os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')</defineStatement>
diff --git a/dolphinscheduler-dist/release-docs/LICENSE b/dolphinscheduler-dist/release-docs/LICENSE
index 20ca383..f90a346 100644
--- a/dolphinscheduler-dist/release-docs/LICENSE
+++ b/dolphinscheduler-dist/release-docs/LICENSE
@@ -215,7 +215,6 @@ Apache 2.0 licenses
 The following components are provided under the Apache License. See project link for details.
 The text of each license is also included at licenses/LICENSE-[project].txt.
 
-    ant-1.6.5 https://mvnrepository.com/artifact/ant/ant/1.6.5, Apache 2.0
     apacheds-i18n 2.0.0-M15: https://mvnrepository.com/artifact/org.apache.directory.server/apacheds-i18n/2.0.0-M15, Apache 2.0
     apacheds-kerberos-codec 2.0.0-M15: https://mvnrepository.com/artifact/org.apache.directory.server/apacheds-kerberos-codec/2.0.0-M15, Apache 2.0
     apache-el 8.5.35.1: https://mvnrepository.com/artifact/org.mortbay.jasper/apache-el/8.5.35.1, Apache 2.0
@@ -236,23 +235,33 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
     commons-configuration 1.10: https://mvnrepository.com/artifact/commons-configuration/commons-configuration/1.10, Apache 2.0
     commons-daemon 1.0.13 https://mvnrepository.com/artifact/commons-daemon/commons-daemon/1.0.13, Apache 2.0
     commons-dbcp 1.4: https://github.com/apache/commons-dbcp, Apache 2.0
+    commons-el 1.0: https://mvnrepository.com/artifact/commons-el/commons-el/1.0, Apache 2.0
     commons-email 1.5: https://github.com/apache/commons-email, Apache 2.0
     commons-httpclient 3.0.1: https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient/3.0.1, Apache 2.0
     commons-io 2.4: https://github.com/apache/commons-io, Apache 2.0
-    commons-lang 2.6: https://github.com/apache/commons-lang, Apache 2.0
+    commons-lang 2.3: https://github.com/apache/commons-lang, Apache 2.0
+    commons-lang3 3.5: https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.5, Apache 2.0
     commons-logging 1.1.1: https://github.com/apache/commons-logging, Apache 2.0
     commons-math3 3.1.1: https://github.com/apache/commons-math, Apache 2.0
-    commons-net 3.1: https://github.com/apache/commons-net, Apache 2.0
+    commans-net 3.1: https://github.com/apache/commons-net, Apache 2.0
     commons-pool 1.6: https://github.com/apache/commons-pool, Apache 2.0
     cron-utils 5.0.5: https://mvnrepository.com/artifact/com.cronutils/cron-utils/5.0.5, Apache 2.0
-    curator-client 4.3.0: https://mvnrepository.com/artifact/org.apache.curator/curator-client/4.3.0, Apache 2.0
-    curator-framework 4.3.0: https://mvnrepository.com/artifact/org.apache.curator/curator-framework/4.3.0, Apache 2.0
-    curator-recipes 4.3.0: https://mvnrepository.com/artifact/org.apache.curator/curator-recipes/4.3.0, Apache 2.0
+    curator-client 2.12.0: https://mvnrepository.com/artifact/org.apache.curator/curator-client/2.12.0, Apache 2.0
+    curator-framework 2.12.0: https://mvnrepository.com/artifact/org.apache.curator/curator-framework/2.12.0, Apache 2.0
+    curator-recipes 2.12.0: https://mvnrepository.com/artifact/org.apache.curator/curator-recipes/2.12.0, Apache 2.0
     datanucleus-api-jdo 4.2.1: https://mvnrepository.com/artifact/org.datanucleus/datanucleus-api-jdo/4.2.1, Apache 2.0
     datanucleus-core 4.1.6: https://mvnrepository.com/artifact/org.datanucleus/datanucleus-core/4.1.6, Apache 2.0
     datanucleus-rdbms 4.1.7: https://mvnrepository.com/artifact/org.datanucleus/datanucleus-rdbms/4.1.7, Apache 2.0
     derby 10.14.2.0: https://github.com/apache/derby, Apache 2.0
     druid 1.1.14: https://mvnrepository.com/artifact/com.alibaba/druid/1.1.14, Apache 2.0
+    error_prone_annotations 2.1.2: https://mvnrepository.com/artifact/com.google.errorprone/error_prone_annotations/2.1.2, Apache 2.0
+    freemarker 2.3.21: https://github.com/apache/freemarker, Apache 2.0
+    grpc-context 1.9.0: https://mvnrepository.com/artifact/io.grpc/grpc-context/1.9.0, Apache 2.0
+    grpc-core 1.9.0: https://mvnrepository.com/artifact/io.grpc/grpc-core/1.9.0, Apache 2.0
+    grpc-netty 1.9.0: https://mvnrepository.com/artifact/io.grpc/grpc-netty/1.9.0, Apache 2.0
+    grpc-protobuf 1.9.0: https://mvnrepository.com/artifact/io.grpc/grpc-protobuf/1.9.0, Apache 2.0
+    grpc-protobuf-lite 1.9.0: https://mvnrepository.com/artifact/io.grpc/grpc-protobuf-lite/1.9.0, Apache 2.0
+    grpc-stub 1.9.0: https://mvnrepository.com/artifact/io.grpc/grpc-stub/1.9.0, Apache 2.0
     gson 2.8.5: https://github.com/google/gson, Apache 2.0
     guava 20.0: https://mvnrepository.com/artifact/com.google.guava/guava/20.0, Apache 2.0
     guice 3.0: https://mvnrepository.com/artifact/com.google.inject/guice/3.0, Apache 2.0
@@ -286,6 +295,7 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
     httpclient 4.4.1: https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.4.1, Apache 2.0
     httpcore 4.4.1: https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore/4.4.1, Apache 2.0
     httpmime 4.5.7: https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime/4.5.7, Apache 2.0
+    instrumentation-api 0.4.3: https://mvnrepository.com/artifact/com.google.instrumentation/instrumentation-api/0.4.3, Apache 2.0
     jackson-annotations 2.9.8: https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations/2.9.8, Apache 2.0
     jackson-core 2.9.8: https://github.com/FasterXML/jackson-core, Apache 2.0
     jackson-core-asl 1.9.13: https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-asl/1.9.13, Apache 2.0
@@ -296,6 +306,8 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
     jackson-mapper-asl 1.9.13: https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl/1.9.13, Apache 2.0
     jackson-module-parameter-names 2.9.8: https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-parameter-names/2.9.8, Apache 2.0
     jackson-xc 1.9.13: https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-xc/1.9.13, Apache 2.0 and LGPL 2.1
+    jasper-compiler 5.5.23: https://mvnrepository.com/artifact/tomcat/jasper-compiler/5.5.23, Apache 2.0
+    jasper-runtime 5.5.23: https://mvnrepository.com/artifact/tomcat/jasper-runtime/5.5.23, Apache 2.0
     javax.inject 1: https://mvnrepository.com/artifact/javax.inject/javax.inject/1, Apache 2.0
     javax.jdo-3.2.0-m3: https://mvnrepository.com/artifact/org.datanucleus/javax.jdo/3.2.0-m3, Apache 2.0
     java-xmlbuilder 0.4 : https://mvnrepository.com/artifact/com.jamesmurty.utils/java-xmlbuilder/0.4, Apache 2.0
@@ -320,12 +332,9 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
     joda-time 2.10.1: https://github.com/JodaOrg/joda-time, Apache 2.0
     jpam 1.1: https://mvnrepository.com/artifact/net.sf.jpam/jpam/1.1, Apache 2.0
     jsqlparser 2.1: https://github.com/JSQLParser/JSqlParser, Apache 2.0 or LGPL 2.1
-    jsp-api-2.1 6.1.14: https://mvnrepository.com/artifact/org.mortbay.jetty/jsp-api-2.1/6.1.14, Apache 2.0
     jsr305 3.0.0: https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305, Apache 2.0
     libfb303 0.9.3: https://mvnrepository.com/artifact/org.apache.thrift/libfb303/0.9.3, Apache 2.0
     libthrift 0.9.3: https://mvnrepository.com/artifact/org.apache.thrift/libthrift/0.9.3, Apache 2.0
-    log4j-api 2.11.2: https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api/2.11.2, Apache 2.0
-    log4j-core-2.11.2: https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.11.2, Apache 2.0
     log4j 1.2.17: https://mvnrepository.com/artifact/log4j/log4j/1.2.17, Apache 2.0
     log4j-1.2-api 2.11.2: https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-1.2-api/2.11.2, Apache 2.0
     lz4 1.3.0: https://mvnrepository.com/artifact/net.jpountz.lz4/lz4/1.3.0, Apache 2.0
@@ -339,9 +348,22 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
     mybatis-spring 2.0.2: https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/2.0.2, Apache 2.0
     netty 3.6.2.Final: https://github.com/netty/netty, Apache 2.0
     netty-all 4.1.33.Final: https://github.com/netty/netty/blob/netty-4.1.33.Final/LICENSE.txt, Apache 2.0
+    netty-buffer 4.1.33.Final: https://mvnrepository.com/artifact/io.netty/netty-buffer/4.1.33.Final, Apache 2.0
+    netty-codec 4.1.33.Final: https://mvnrepository.com/artifact/io.netty/netty-codec/4.1.33.Final, Apache 2.0
+    netty-codec-http2 4.1.33.Final: https://mvnrepository.com/artifact/io.netty/netty-codec-http2/4.1.33.Final, Apache 2.0
+    netty-codec-http 4.1.33.Final: https://mvnrepository.com/artifact/io.netty/netty-codec-http/4.1.33.Final, Apache 2.0
+    netty-codec-socks 4.1.33.Final: https://mvnrepository.com/artifact/io.netty/netty-codec-socks/4.1.33.Final, Apache 2.0
+    netty-common 4.1.33.Final: https://mvnrepository.com/artifact/io.netty/netty-common/4.1.33.Final, Apache 2.0
+    netty-handler 4.1.33: https://mvnrepository.com/artifact/io.netty/netty-handler/4.1.33.Final, Apache 2.0
+    netty-handler-proxy 4.1.33.Final: https://mvnrepository.com/artifact/io.netty/netty-handler-proxy/4.1.33.Final, Apache 2.0
+    netty-resolver 4.1.33.Final: https://mvnrepository.com/artifact/io.netty/netty-resolver/4.1.33.Final, Apache 2.0
+    netty-transport 4.1.33.Final: https://mvnrepository.com/artifact/io.netty/netty-transport/4.1.33.Final, Apache 2.0
+    opencensus-api 0.10.0: https://mvnrepository.com/artifact/io.opencensus/opencensus-api/0.10.0, Apache 2.0
+    opencensus-contrib-grpc-metrics 0.10.0: https://mvnrepository.com/artifact/io.opencensus/opencensus-contrib-grpc-metrics/0.10.0, Apache 2.0
     opencsv 2.3: https://mvnrepository.com/artifact/net.sf.opencsv/opencsv/2.3, Apache 2.0
     parquet-hadoop-bundle 1.8.1: https://mvnrepository.com/artifact/org.apache.parquet/parquet-hadoop-bundle/1.8.1, Apache 2.0
     poi 3.17: https://mvnrepository.com/artifact/org.apache.poi/poi/3.17, Apache 2.0
+    proto-google-common-protos 1.0.0: https://mvnrepository.com/artifact/com.google.api.grpc/proto-google-common-protos/1.0.0, Apache 2.0
     quartz 2.2.3: https://mvnrepository.com/artifact/org.quartz-scheduler/quartz/2.2.3, Apache 2.0
     quartz-jobs 2.2.3: https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs/2.2.3, Apache 2.0
     snakeyaml 1.23: https://mvnrepository.com/artifact/org.yaml/snakeyaml/1.23, Apache 2.0
@@ -398,7 +420,8 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
     jsch 0.1.42: https://mvnrepository.com/artifact/com.jcraft/jsch/0.1.42, BSD
     leveldbjni-all 1.8: https://github.com/fusesource/leveldbjni, BSD-3-Clause
     postgresql 42.1.4: https://mvnrepository.com/artifact/org.postgresql/postgresql/42.1.4, BSD 2-clause
-    protobuf-java 2.5.0: https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/2.5.0, BSD 2-clause
+    protobuf-java 3.5.1: https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/3.5.1, BSD 3-clause
+    protobuf-java-util 3.5.1: https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util, BSD 3-clause
     paranamer 2.3: https://mvnrepository.com/artifact/com.thoughtworks.paranamer/paranamer/2.3, BSD
     threetenbp 1.3.6: https://mvnrepository.com/artifact/org.threeten/threetenbp/1.3.6,  BSD 3-clause
     xmlenc 0.52: https://mvnrepository.com/artifact/xmlenc/xmlenc/0.52, BSD
@@ -424,8 +447,7 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
     jersey-guice 1.9: https://mvnrepository.com/artifact/com.sun.jersey.contribs/jersey-guice/1.9, CDDL 1.1 and GPL 1.1
     jersey-json 1.9: https://mvnrepository.com/artifact/com.sun.jersey/jersey-json/1.9, CDDL 1.1 and GPL 1.1
     jersey-server 1.9: https://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9, CDDL 1.1 and GPL 1.1
-    jsp-2.1 6.1.14 https://mvnrepository.com/artifact/org.mortbay.jetty/jsp-2.1/6.1.14, CDDL 1.0
-
+    jsp-api 2.1: https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api/2.1, CDDL and GPL 2.0
     jta 1.1: https://mvnrepository.com/artifact/javax.transaction/jta/1.1, CDDL 1.0
     transaction-api 1.1: https://mvnrepository.com/artifact/javax.transaction/transaction-api/1.1, CDDL 1.0
 
@@ -437,12 +459,11 @@ The following components are provided under the EPL License. See project link fo
 The text of each license is also included at licenses/LICENSE-[project].txt.
 
     aspectjweaver 1.9.2:https://mvnrepository.com/artifact/org.aspectj/aspectjweaver/1.9.2, EPL 1.0
-    core-3.1.1 https://mvnrepository.com/artifact/org.eclipse.jdt/core/3.1.1 Eclipse Public License v1.0
     logback-classic 1.2.3: https://mvnrepository.com/artifact/ch.qos.logback/logback-classic/1.2.3, EPL 1.0 and LGPL 2.1
     logback-core 1.2.3: https://mvnrepository.com/artifact/ch.qos.logback/logback-core/1.2.3, EPL 1.0 and LGPL 2.1
     oshi-core 3.5.0: https://mvnrepository.com/artifact/com.github.oshi/oshi-core/3.5.0, EPL 1.0
     junit 4.12: https://mvnrepository.com/artifact/junit/junit/4.12, EPL 1.0
-    h2-1.4.200 https://github.com/h2database/h2database/blob/master/LICENSE.txt, MPL 2.0 or EPL 1.0
+
 
 ========================================================================
 MIT licenses
@@ -495,6 +516,7 @@ MIT licenses
     js-cookie 2.2.1: https://github.com/js-cookie/js-cookie MIT
     jsplumb 2.8.6: https://github.com/jsplumb/jsplumb MIT and GPLv2
     lodash 4.17.11: https://github.com/lodash/lodash MIT
+    normalize.css 8.0.1: https://github.com/necolas/normalize.css MIT
     vue-treeselect 0.4.0: https://github.com/riophae/vue-treeselect MIT
     vue	2.5.17:	https://github.com/vuejs/vue	MIT
     vue-router 2.7.0: https://github.com/vuejs/vue-router MIT
diff --git a/dolphinscheduler-dist/release-docs/NOTICE b/dolphinscheduler-dist/release-docs/NOTICE
index b72d2ed..ca2f914 100644
--- a/dolphinscheduler-dist/release-docs/NOTICE
+++ b/dolphinscheduler-dist/release-docs/NOTICE
@@ -1,11 +1,55 @@
 Apache DolphinScheduler (incubating)
-Copyright 2019-2020 The Apache Software Foundation
+Copyright 2019 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
 
 ========================================================================
 
+grpc NOTICE
+
+========================================================================
+
+Copyright 2014 gRPC authors.
+
+Licensed 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.
+
+-----------------------------------------------------------------------
+
+This product contains a modified portion of 'OkHttp', an open source
+HTTP & SPDY client for Android and Java applications, which can be obtained
+at:
+
+  * LICENSE:
+    * okhttp/third_party/okhttp/LICENSE (Apache License 2.0)
+  * HOMEPAGE:
+    * https://github.com/square/okhttp
+  * LOCATION_IN_GRPC:
+    * okhttp/third_party/okhttp
+
+This product contains a modified portion of 'Netty', an open source
+networking library, which can be obtained at:
+
+  * LICENSE:
+    * netty/third_party/netty/LICENSE.txt (Apache License 2.0)
+  * HOMEPAGE:
+    * https://netty.io
+  * LOCATION_IN_GRPC:
+    * netty/third_party/netty
+
+========================================================================
+
+
 Jetty NOTICE
 
 ========================================================================
@@ -1176,6 +1220,17 @@ No other notice covers that jar file.
 =========================================================================
 
 
+Apache FreeMarker NOTICE
+
+=========================================================================
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+See the LICENSE.txt for more details.
+
+=========================================================================
+
+
 Apache HttpClient NOTICE
 
 =========================================================================
@@ -2063,6 +2118,28 @@ which has the following notices:
    org.apache.taglibs:taglibs-standard-spec
    org.apache.taglibs:taglibs-standard-impl
 
+
+   ------
+   MortBay
+
+   The following artifacts are ASL2 licensed.  Based on selected classes from
+   following Apache Tomcat jars, all ASL2 licensed.
+
+   org.mortbay.jasper:apache-jsp
+     org.apache.tomcat:tomcat-jasper
+     org.apache.tomcat:tomcat-juli
+     org.apache.tomcat:tomcat-jsp-api
+     org.apache.tomcat:tomcat-el-api
+     org.apache.tomcat:tomcat-jasper-el
+     org.apache.tomcat:tomcat-api
+     org.apache.tomcat:tomcat-util-scan
+     org.apache.tomcat:tomcat-util
+
+   org.mortbay.jasper:apache-el
+     org.apache.tomcat:tomcat-jasper-el
+     org.apache.tomcat:tomcat-el-api
+
+
    ------
    Mortbay
 
@@ -2244,19 +2321,6 @@ Copyright 2003-2013 The Apache Software Foundation
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
 
-ANT NOTICE
-
-=========================================================================
-
-   This product includes software developed by
-   The Apache Software Foundation (http://www.apache.org/).
-
-   This product includes also software developed by :
-     - the W3C consortium (http://www.w3c.org) ,
-     - the SAX project (http://www.saxproject.org)
-
-   Please read the different LICENSE files present in the root directory of
-   this distribution.
 
 
 
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-ant-1.6.5.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-ant-1.6.5.txt
deleted file mode 100644
index f820d4b..0000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-ant-1.6.5.txt
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- *                                 Apache License
- *                           Version 2.0, January 2004
- *                        http://www.apache.org/licenses/
- *
- *   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *   1. Definitions.
- *
- *      "License" shall mean the terms and conditions for use, reproduction,
- *      and distribution as defined by Sections 1 through 9 of this document.
- *
- *      "Licensor" shall mean the copyright owner or entity authorized by
- *      the copyright owner that is granting the License.
- *
- *      "Legal Entity" shall mean the union of the acting entity and all
- *      other entities that control, are controlled by, or are under common
- *      control with that entity. For the purposes of this definition,
- *      "control" means (i) the power, direct or indirect, to cause the
- *      direction or management of such entity, whether by contract or
- *      otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *      outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *      "You" (or "Your") shall mean an individual or Legal Entity
- *      exercising permissions granted by this License.
- *
- *      "Source" form shall mean the preferred form for making modifications,
- *      including but not limited to software source code, documentation
- *      source, and configuration files.
- *
- *      "Object" form shall mean any form resulting from mechanical
- *      transformation or translation of a Source form, including but
- *      not limited to compiled object code, generated documentation,
- *      and conversions to other media types.
- *
- *      "Work" shall mean the work of authorship, whether in Source or
- *      Object form, made available under the License, as indicated by a
- *      copyright notice that is included in or attached to the work
- *      (an example is provided in the Appendix below).
- *
- *      "Derivative Works" shall mean any work, whether in Source or Object
- *      form, that is based on (or derived from) the Work and for which the
- *      editorial revisions, annotations, elaborations, or other modifications
- *      represent, as a whole, an original work of authorship. For the purposes
- *      of this License, Derivative Works shall not include works that remain
- *      separable from, or merely link (or bind by name) to the interfaces of,
- *      the Work and Derivative Works thereof.
- *
- *      "Contribution" shall mean any work of authorship, including
- *      the original version of the Work and any modifications or additions
- *      to that Work or Derivative Works thereof, that is intentionally
- *      submitted to Licensor for inclusion in the Work by the copyright owner
- *      or by an individual or Legal Entity authorized to submit on behalf of
- *      the copyright owner. For the purposes of this definition, "submitted"
- *      means any form of electronic, verbal, or written communication sent
- *      to the Licensor or its representatives, including but not limited to
- *      communication on electronic mailing lists, source code control systems,
- *      and issue tracking systems that are managed by, or on behalf of, the
- *      Licensor for the purpose of discussing and improving the Work, but
- *      excluding communication that is conspicuously marked or otherwise
- *      designated in writing by the copyright owner as "Not a Contribution."
- *
- *      "Contributor" shall mean Licensor and any individual or Legal Entity
- *      on behalf of whom a Contribution has been received by Licensor and
- *      subsequently incorporated within the Work.
- *
- *   2. Grant of Copyright License. Subject to the terms and conditions of
- *      this License, each Contributor hereby grants to You a perpetual,
- *      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *      copyright license to reproduce, prepare Derivative Works of,
- *      publicly display, publicly perform, sublicense, and distribute the
- *      Work and such Derivative Works in Source or Object form.
- *
- *   3. Grant of Patent License. Subject to the terms and conditions of
- *      this License, each Contributor hereby grants to You a perpetual,
- *      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *      (except as stated in this section) patent license to make, have made,
- *      use, offer to sell, sell, import, and otherwise transfer the Work,
- *      where such license applies only to those patent claims licensable
- *      by such Contributor that are necessarily infringed by their
- *      Contribution(s) alone or by combination of their Contribution(s)
- *      with the Work to which such Contribution(s) was submitted. If You
- *      institute patent litigation against any entity (including a
- *      cross-claim or counterclaim in a lawsuit) alleging that the Work
- *      or a Contribution incorporated within the Work constitutes direct
- *      or contributory patent infringement, then any patent licenses
- *      granted to You under this License for that Work shall terminate
- *      as of the date such litigation is filed.
- *
- *   4. Redistribution. You may reproduce and distribute copies of the
- *      Work or Derivative Works thereof in any medium, with or without
- *      modifications, and in Source or Object form, provided that You
- *      meet the following conditions:
- *
- *      (a) You must give any other recipients of the Work or
- *          Derivative Works a copy of this License; and
- *
- *      (b) You must cause any modified files to carry prominent notices
- *          stating that You changed the files; and
- *
- *      (c) You must retain, in the Source form of any Derivative Works
- *          that You distribute, all copyright, patent, trademark, and
- *          attribution notices from the Source form of the Work,
- *          excluding those notices that do not pertain to any part of
- *          the Derivative Works; and
- *
- *      (d) If the Work includes a "NOTICE" text file as part of its
- *          distribution, then any Derivative Works that You distribute must
- *          include a readable copy of the attribution notices contained
- *          within such NOTICE file, excluding those notices that do not
- *          pertain to any part of the Derivative Works, in at least one
- *          of the following places: within a NOTICE text file distributed
- *          as part of the Derivative Works; within the Source form or
- *          documentation, if provided along with the Derivative Works; or,
- *          within a display generated by the Derivative Works, if and
- *          wherever such third-party notices normally appear. The contents
- *          of the NOTICE file are for informational purposes only and
- *          do not modify the License. You may add Your own attribution
- *          notices within Derivative Works that You distribute, alongside
- *          or as an addendum to the NOTICE text from the Work, provided
- *          that such additional attribution notices cannot be construed
- *          as modifying the License.
- *
- *      You may add Your own copyright statement to Your modifications and
- *      may provide additional or different license terms and conditions
- *      for use, reproduction, or distribution of Your modifications, or
- *      for any such Derivative Works as a whole, provided Your use,
- *      reproduction, and distribution of the Work otherwise complies with
- *      the conditions stated in this License.
- *
- *   5. Submission of Contributions. Unless You explicitly state otherwise,
- *      any Contribution intentionally submitted for inclusion in the Work
- *      by You to the Licensor shall be under the terms and conditions of
- *      this License, without any additional terms or conditions.
- *      Notwithstanding the above, nothing herein shall supersede or modify
- *      the terms of any separate license agreement you may have executed
- *      with Licensor regarding such Contributions.
- *
- *   6. Trademarks. This License does not grant permission to use the trade
- *      names, trademarks, service marks, or product names of the Licensor,
- *      except as required for reasonable and customary use in describing the
- *      origin of the Work and reproducing the content of the NOTICE file.
- *
- *   7. Disclaimer of Warranty. Unless required by applicable law or
- *      agreed to in writing, Licensor provides the Work (and each
- *      Contributor provides its Contributions) on an "AS IS" BASIS,
- *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *      implied, including, without limitation, any warranties or conditions
- *      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *      PARTICULAR PURPOSE. You are solely responsible for determining the
- *      appropriateness of using or redistributing the Work and assume any
- *      risks associated with Your exercise of permissions under this License.
- *
- *   8. Limitation of Liability. In no event and under no legal theory,
- *      whether in tort (including negligence), contract, or otherwise,
- *      unless required by applicable law (such as deliberate and grossly
- *      negligent acts) or agreed to in writing, shall any Contributor be
- *      liable to You for damages, including any direct, indirect, special,
- *      incidental, or consequential damages of any character arising as a
- *      result of this License or out of the use or inability to use the
- *      Work (including but not limited to damages for loss of goodwill,
- *      work stoppage, computer failure or malfunction, or any and all
- *      other commercial damages or losses), even if such Contributor
- *      has been advised of the possibility of such damages.
- *
- *   9. Accepting Warranty or Additional Liability. While redistributing
- *      the Work or Derivative Works thereof, You may choose to offer,
- *      and charge a fee for, acceptance of support, warranty, indemnity,
- *      or other liability obligations and/or rights consistent with this
- *      License. However, in accepting such obligations, You may act only
- *      on Your own behalf and on Your sole responsibility, not on behalf
- *      of any other Contributor, and only if You agree to indemnify,
- *      defend, and hold each Contributor harmless for any liability
- *      incurred by, or claims asserted against, such Contributor by reason
- *      of your accepting any such warranty or additional liability.
- *
- *   END OF TERMS AND CONDITIONS
- *
- *   APPENDIX: How to apply the Apache License to your work.
- *
- *      To apply the Apache License to your work, attach the following
- *      boilerplate notice, with the fields enclosed by brackets "[]"
- *      replaced with your own identifying information. (Don't include
- *      the brackets!)  The text should be enclosed in the appropriate
- *      comment syntax for the file format. We also recommend that a
- *      file or class name and description of purpose be included on the
- *      same "printed page" as the copyright notice for easier
- *      identification within third-party archives.
- *
- *   Copyright [yyyy] [name of copyright owner]
- *
- *   Licensed 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-dist/release-docs/licenses/LICENSE-commons-el.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-commons-el.txt
new file mode 100644
index 0000000..cea737d
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-commons-el.txt
@@ -0,0 +1,60 @@
+/*
+ * $Header: /home/cvs/jakarta-commons/el/LICENSE.txt,v 1.1.1.1 2003/02/04 00:22:24 luehe Exp $
+ * $Revision: 1.1.1.1 $
+ * $Date: 2003/02/04 00:22:24 $
+ *
+ * ====================================================================
+ *
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ *    any, must include the following acknowlegement:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowlegement may appear in the software itself,
+ *    if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Commons", and "Apache Software
+ *    Foundation" must not be used to endorse or promote products derived
+ *    from this software without prior written permission. For written
+ *    permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ *    nor may "Apache" appear in their names without prior written
+ *    permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-commons-lang.txt
old mode 100755
new mode 100644
similarity index 100%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-commons-lang.txt
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-commons-lang-2.6.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-commons-lang3.txt
similarity index 100%
rename from dolphinscheduler-dist/release-docs/licenses/LICENSE-commons-lang-2.6.txt
rename to dolphinscheduler-dist/release-docs/licenses/LICENSE-commons-lang3.txt
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-core-3.1.1.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-core-3.1.1.txt
deleted file mode 100644
index 3d967ae..0000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-core-3.1.1.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-Eclipse Public License - v 1.0
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
-b) in the case of each subsequent Contributor:
-i) changes to the Program, and
-ii) additions to the Program;
-where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
-"Contributor" means any person or entity that distributes the Program.
-
-"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
-
-"Program" means the Contributions distributed in accordance with this Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
-
-2. GRANT OF RIGHTS
-
-a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
-b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contributio [...]
-c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
-d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
-
-a) it complies with the terms and conditions of this Agreement; and
-b) its license agreement:
-i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
-ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
-iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
-iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
-When the Program is made available in source code form:
-
-a) it must be made available under this Agreement; and
-b) a copy of this Agreement must be included with each copy of the Program.
-Contributors may not remove or alter any copyright notices contained within the Program.
-
-Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Con [...]
-
-For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Ag [...]
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF [...]
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
-
-Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
-
-This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framework.txt
old mode 100755
new mode 100644
similarity index 100%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framework.txt
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-freemarker.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-freemarker.txt
new file mode 100644
index 0000000..2ac874b
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-freemarker.txt
@@ -0,0 +1,49 @@
+Copyright 2014 Attila Szegedi, Daniel Dekany, Jonathan Revusky
+
+Licensed 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.
+
+==============================================================================
+END LICENSE
+
+
+FreeMarker subcomponents with different copyright owners
+--------------------------------------------------------
+
+FreeMarker, both in its source code and binary form (freemarker.jar)
+includes a number of files that are licensed by the Apache Software
+Foundation under the Apache License, Version 2.0. This is the same
+license as the license of FreeMaker, but the copyright owner is the
+Apache Software Foundation. These files are:
+  
+    freemarker/ext/jsp/web-app_2_2.dtd
+    freemarker/ext/jsp/web-app_2_3.dtd
+    freemarker/ext/jsp/web-app_2_4.xsd
+    freemarker/ext/jsp/web-app_2_5.xsd
+    freemarker/ext/jsp/web-jsptaglibrary_1_1.dtd
+    freemarker/ext/jsp/web-jsptaglibrary_1_2.dtd
+    freemarker/ext/jsp/web-jsptaglibrary_2_0.xsd
+    freemarker/ext/jsp/web-jsptaglibrary_2_1.xsd
+
+
+Historical notes
+----------------
+
+FreeMarker 1.x was released under the LGPL license. Later, by
+community consensus, we have switched over to a BSD-style license. As
+of FreeMarker 2.2pre1, the original author, Benjamin Geer, has
+relinquished the copyright in behalf of Visigoth Software Society.
+
+With FreeMarker 2.3.21 the license has changed to Apache License,
+Version 2.0, and the owner has changed from Visigoth Software Society
+to three of the FreeMarker 2.X developers, Attila Szegedi, Daniel
+Dekany, and Jonathan Revusky.
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-context.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-context.txt
new file mode 100644
index 0000000..0557ad6
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-context.txt
@@ -0,0 +1,36 @@
+Copyright 2014, gRPC Authors All rights reserved.
+
+Licensed 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.
+
+-----------------------------------------------------------------------
+
+This product contains a modified portion of 'OkHttp', an open source
+HTTP & SPDY client for Android and Java applications, which can be obtained
+at:
+
+  * LICENSE:
+    * okhttp/third_party/okhttp/LICENSE (Apache License 2.0)
+  * HOMEPAGE:
+    * https://github.com/square/okhttp
+  * LOCATION_IN_GRPC:
+    * okhttp/third_party/okhttp
+
+This product contains a modified portion of 'Netty', an open source
+networking library, which can be obtained at:
+
+  * LICENSE:
+    * netty/third_party/netty/LICENSE.txt (Apache License 2.0)
+  * HOMEPAGE:
+    * https://netty.io
+  * LOCATION_IN_GRPC:
+    * netty/third_party/netty
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-core.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-core.txt
new file mode 100644
index 0000000..0557ad6
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-core.txt
@@ -0,0 +1,36 @@
+Copyright 2014, gRPC Authors All rights reserved.
+
+Licensed 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.
+
+-----------------------------------------------------------------------
+
+This product contains a modified portion of 'OkHttp', an open source
+HTTP & SPDY client for Android and Java applications, which can be obtained
+at:
+
+  * LICENSE:
+    * okhttp/third_party/okhttp/LICENSE (Apache License 2.0)
+  * HOMEPAGE:
+    * https://github.com/square/okhttp
+  * LOCATION_IN_GRPC:
+    * okhttp/third_party/okhttp
+
+This product contains a modified portion of 'Netty', an open source
+networking library, which can be obtained at:
+
+  * LICENSE:
+    * netty/third_party/netty/LICENSE.txt (Apache License 2.0)
+  * HOMEPAGE:
+    * https://netty.io
+  * LOCATION_IN_GRPC:
+    * netty/third_party/netty
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-netty.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-netty.txt
new file mode 100644
index 0000000..0557ad6
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-netty.txt
@@ -0,0 +1,36 @@
+Copyright 2014, gRPC Authors All rights reserved.
+
+Licensed 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.
+
+-----------------------------------------------------------------------
+
+This product contains a modified portion of 'OkHttp', an open source
+HTTP & SPDY client for Android and Java applications, which can be obtained
+at:
+
+  * LICENSE:
+    * okhttp/third_party/okhttp/LICENSE (Apache License 2.0)
+  * HOMEPAGE:
+    * https://github.com/square/okhttp
+  * LOCATION_IN_GRPC:
+    * okhttp/third_party/okhttp
+
+This product contains a modified portion of 'Netty', an open source
+networking library, which can be obtained at:
+
+  * LICENSE:
+    * netty/third_party/netty/LICENSE.txt (Apache License 2.0)
+  * HOMEPAGE:
+    * https://netty.io
+  * LOCATION_IN_GRPC:
+    * netty/third_party/netty
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-protobuf-little.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-protobuf-little.txt
new file mode 100644
index 0000000..0557ad6
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-protobuf-little.txt
@@ -0,0 +1,36 @@
+Copyright 2014, gRPC Authors All rights reserved.
+
+Licensed 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.
+
+-----------------------------------------------------------------------
+
+This product contains a modified portion of 'OkHttp', an open source
+HTTP & SPDY client for Android and Java applications, which can be obtained
+at:
+
+  * LICENSE:
+    * okhttp/third_party/okhttp/LICENSE (Apache License 2.0)
+  * HOMEPAGE:
+    * https://github.com/square/okhttp
+  * LOCATION_IN_GRPC:
+    * okhttp/third_party/okhttp
+
+This product contains a modified portion of 'Netty', an open source
+networking library, which can be obtained at:
+
+  * LICENSE:
+    * netty/third_party/netty/LICENSE.txt (Apache License 2.0)
+  * HOMEPAGE:
+    * https://netty.io
+  * LOCATION_IN_GRPC:
+    * netty/third_party/netty
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-protobuf.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-protobuf.txt
new file mode 100644
index 0000000..0557ad6
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-protobuf.txt
@@ -0,0 +1,36 @@
+Copyright 2014, gRPC Authors All rights reserved.
+
+Licensed 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.
+
+-----------------------------------------------------------------------
+
+This product contains a modified portion of 'OkHttp', an open source
+HTTP & SPDY client for Android and Java applications, which can be obtained
+at:
+
+  * LICENSE:
+    * okhttp/third_party/okhttp/LICENSE (Apache License 2.0)
+  * HOMEPAGE:
+    * https://github.com/square/okhttp
+  * LOCATION_IN_GRPC:
+    * okhttp/third_party/okhttp
+
+This product contains a modified portion of 'Netty', an open source
+networking library, which can be obtained at:
+
+  * LICENSE:
+    * netty/third_party/netty/LICENSE.txt (Apache License 2.0)
+  * HOMEPAGE:
+    * https://netty.io
+  * LOCATION_IN_GRPC:
+    * netty/third_party/netty
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-stub.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-stub.txt
new file mode 100644
index 0000000..0557ad6
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc-stub.txt
@@ -0,0 +1,36 @@
+Copyright 2014, gRPC Authors All rights reserved.
+
+Licensed 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.
+
+-----------------------------------------------------------------------
+
+This product contains a modified portion of 'OkHttp', an open source
+HTTP & SPDY client for Android and Java applications, which can be obtained
+at:
+
+  * LICENSE:
+    * okhttp/third_party/okhttp/LICENSE (Apache License 2.0)
+  * HOMEPAGE:
+    * https://github.com/square/okhttp
+  * LOCATION_IN_GRPC:
+    * okhttp/third_party/okhttp
+
+This product contains a modified portion of 'Netty', an open source
+networking library, which can be obtained at:
+
+  * LICENSE:
+    * netty/third_party/netty/LICENSE.txt (Apache License 2.0)
+  * HOMEPAGE:
+    * https://netty.io
+  * LOCATION_IN_GRPC:
+    * netty/third_party/netty
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-h2-1.4.200.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-h2-1.4.200.txt
deleted file mode 100644
index 4e2cc25..0000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-h2-1.4.200.txt
+++ /dev/null
@@ -1,552 +0,0 @@
-H2 is dual licensed and available under the MPL 2.0 (Mozilla Public License
-Version 2.0) or under the EPL 1.0 (Eclipse Public License).
-
--------------------------------------------------------------------------------
-
-Mozilla Public License, version 2.0
-
-1. Definitions
-
-    1.1. “Contributor”
-    means each individual or legal entity that creates, contributes to the
-    creation of, or owns Covered Software.
-
-    1.2. “Contributor Version”
-    means the combination of the Contributions of others (if any) used by a
-    Contributor and that particular Contributor’s Contribution.
-
-    1.3. “Contribution”
-    means Covered Software of a particular Contributor.
-
-    1.4. “Covered Software”
-    means Source Code Form to which the initial Contributor has attached the
-    notice in Exhibit A, the Executable Form of such Source Code Form,
-    and Modifications of such Source Code Form, in each case
-    including portions thereof.
-
-    1.5. “Incompatible With Secondary Licenses”
-    means
-
-        a. that the initial Contributor has attached the notice described
-        in Exhibit B to the Covered Software; or
-
-        b. that the Covered Software was made available under the terms of
-        version 1.1 or earlier of the License, but not also under the terms
-        of a Secondary License.
-
-    1.6. “Executable Form”
-    means any form of the work other than Source Code Form.
-
-    1.7. “Larger Work”
-    means a work that combines Covered Software with other material,
-    in a separate file or files, that is not Covered Software.
-
-    1.8. “License”
-    means this document.
-
-    1.9. “Licensable”
-    means having the right to grant, to the maximum extent possible,
-    whether at the time of the initial grant or subsequently,
-    any and all of the rights conveyed by this License.
-
-    1.10. “Modifications”
-    means any of the following:
-
-        a. any file in Source Code Form that results from an addition to,
-        deletion from, or modification of the contents of Covered Software; or
-
-        b. any new file in Source Code Form that contains any Covered Software.
-
-    1.11. “Patent Claims” of a Contributor
-    means any patent claim(s), including without limitation, method, process,
-    and apparatus claims, in any patent Licensable by such Contributor that
-    would be infringed, but for the grant of the License, by the making,
-    using, selling, offering for sale, having made, import, or transfer of
-    either its Contributions or its Contributor Version.
-
-    1.12. “Secondary License”
-    means either the GNU General Public License, Version 2.0, the
-    GNU Lesser General Public License, Version 2.1, the GNU Affero General
-    Public License, Version 3.0, or any later versions of those licenses.
-
-    1.13. “Source Code Form”
-    means the form of the work preferred for making modifications.
-
-    1.14. “You” (or “Your”)
-    means an individual or a legal entity exercising rights under this License.
-    For legal entities, “You” includes any entity that controls,
-    is controlled by, or is under common control with You. For purposes of
-    this definition, “control” means (a) the power, direct or indirect,
-    to cause the direction or management of such entity, whether by contract
-    or otherwise, or (b) ownership of more than fifty percent (50%) of the
-    outstanding shares or beneficial ownership of such entity.
-
-2. License Grants and Conditions
-
-    2.1. Grants
-    Each Contributor hereby grants You a world-wide, royalty-free,
-    non-exclusive license:
-
-        a. under intellectual property rights (other than patent or trademark)
-        Licensable by such Contributor to use, reproduce, make available,
-        modify, display, perform, distribute, and otherwise exploit its
-        Contributions, either on an unmodified basis, with Modifications,
-        or as part of a Larger Work; and
-
-        b. under Patent Claims of such Contributor to make, use, sell,
-        offer for sale, have made, import, and otherwise transfer either
-        its Contributions or its Contributor Version.
-
-    2.2. Effective Date
-    The licenses granted in Section 2.1 with respect to any Contribution
-    become effective for each Contribution on the date the Contributor
-    first distributes such Contribution.
-
-    2.3. Limitations on Grant Scope
-    The licenses granted in this Section 2 are the only rights granted
-    under this License. No additional rights or licenses will be implied
-    from the distribution or licensing of Covered Software under this License.
-    Notwithstanding Section 2.1(b) above, no patent license is granted
-    by a Contributor:
-
-        a. for any code that a Contributor has removed from
-        Covered Software; or
-
-        b. for infringements caused by: (i) Your and any other third party’s
-        modifications of Covered Software, or (ii) the combination of its
-        Contributions with other software (except as part of its
-        Contributor Version); or
-
-        c. under Patent Claims infringed by Covered Software in the
-        absence of its Contributions.
-
-    This License does not grant any rights in the trademarks, service marks,
-    or logos of any Contributor (except as may be necessary to comply with
-    the notice requirements in Section 3.4).
-
-    2.4. Subsequent Licenses
-    No Contributor makes additional grants as a result of Your choice to
-    distribute the Covered Software under a subsequent version of this
-    License (see Section 10.2) or under the terms of a Secondary License
-    (if permitted under the terms of Section 3.3).
-
-    2.5. Representation
-    Each Contributor represents that the Contributor believes its
-    Contributions are its original creation(s) or it has sufficient rights
-    to grant the rights to its Contributions conveyed by this License.
-
-    2.6. Fair Use
-    This License is not intended to limit any rights You have under
-    applicable copyright doctrines of fair use, fair dealing,
-    or other equivalents.
-
-    2.7. Conditions
-    Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the
-    licenses granted in Section 2.1.
-
-3. Responsibilities
-
-    3.1. Distribution of Source Form
-    All distribution of Covered Software in Source Code Form, including
-    any Modifications that You create or to which You contribute, must be
-    under the terms of this License. You must inform recipients that the
-    Source Code Form of the Covered Software is governed by the terms
-    of this License, and how they can obtain a copy of this License.
-    You may not attempt to alter or restrict the recipients’ rights
-    in the Source Code Form.
-
-    3.2. Distribution of Executable Form
-    If You distribute Covered Software in Executable Form then:
-
-        a. such Covered Software must also be made available in Source Code
-        Form, as described in Section 3.1, and You must inform recipients of
-        the Executable Form how they can obtain a copy of such Source Code
-        Form by reasonable means in a timely manner, at a charge no more than
-        the cost of distribution to the recipient; and
-
-        b. You may distribute such Executable Form under the terms of this
-        License, or sublicense it under different terms, provided that the
-        license for the Executable Form does not attempt to limit or alter
-        the recipients’ rights in the Source Code Form under this License.
-
-    3.3. Distribution of a Larger Work
-    You may create and distribute a Larger Work under terms of Your choice,
-    provided that You also comply with the requirements of this License for
-    the Covered Software. If the Larger Work is a combination of
-    Covered Software with a work governed by one or more Secondary Licenses,
-    and the Covered Software is not Incompatible With Secondary Licenses,
-    this License permits You to additionally distribute such Covered Software
-    under the terms of such Secondary License(s), so that the recipient of
-    the Larger Work may, at their option, further distribute the
-    Covered Software under the terms of either this License or such
-    Secondary License(s).
-
-    3.4. Notices
-    You may not remove or alter the substance of any license notices
-    (including copyright notices, patent notices, disclaimers of warranty,
-    or limitations of liability) contained within the Source Code Form of
-    the Covered Software, except that You may alter any license notices to
-    the extent required to remedy known factual inaccuracies.
-
-    3.5. Application of Additional Terms
-    You may choose to offer, and to charge a fee for, warranty, support,
-    indemnity or liability obligations to one or more recipients of
-    Covered Software. However, You may do so only on Your own behalf,
-    and not on behalf of any Contributor. You must make it absolutely clear
-    that any such warranty, support, indemnity, or liability obligation is
-    offered by You alone, and You hereby agree to indemnify every Contributor
-    for any liability incurred by such Contributor as a result of warranty,
-    support, indemnity or liability terms You offer. You may include
-    additional disclaimers of warranty and limitations of liability
-    specific to any jurisdiction.
-
-4. Inability to Comply Due to Statute or Regulation
-
-If it is impossible for You to comply with any of the terms of this License
-with respect to some or all of the Covered Software due to statute,
-judicial order, or regulation then You must: (a) comply with the terms of
-this License to the maximum extent possible; and (b) describe the limitations
-and the code they affect. Such description must be placed in a text file
-included with all distributions of the Covered Software under this License.
-Except to the extent prohibited by statute or regulation, such description
-must be sufficiently detailed for a recipient of ordinary skill
-to be able to understand it.
-
-5. Termination
-
-    5.1. The rights granted under this License will terminate automatically
-    if You fail to comply with any of its terms. However, if You become
-    compliant, then the rights granted under this License from a particular
-    Contributor are reinstated (a) provisionally, unless and until such
-    Contributor explicitly and finally terminates Your grants, and (b) on an
-    ongoing basis, if such Contributor fails to notify You of the
-    non-compliance by some reasonable means prior to 60 days after You have
-    come back into compliance. Moreover, Your grants from a particular
-    Contributor are reinstated on an ongoing basis if such Contributor
-    notifies You of the non-compliance by some reasonable means,
-    this is the first time You have received notice of non-compliance with
-    this License from such Contributor, and You become compliant prior to
-    30 days after Your receipt of the notice.
-
-    5.2. If You initiate litigation against any entity by asserting a patent
-    infringement claim (excluding declaratory judgment actions,
-    counter-claims, and cross-claims) alleging that a Contributor Version
-    directly or indirectly infringes any patent, then the rights granted
-    to You by any and all Contributors for the Covered Software under
-    Section 2.1 of this License shall terminate.
-
-    5.3. In the event of termination under Sections 5.1 or 5.2 above, all
-    end user license agreements (excluding distributors and resellers) which
-    have been validly granted by You or Your distributors under this License
-    prior to termination shall survive termination.
-
-6. Disclaimer of Warranty
-
-Covered Software is provided under this License on an “as is” basis, without
-warranty of any kind, either expressed, implied, or statutory, including,
-without limitation, warranties that the Covered Software is free of defects,
-merchantable, fit for a particular purpose or non-infringing. The entire risk
-as to the quality and performance of the Covered Software is with You.
-Should any Covered Software prove defective in any respect, You
-(not any Contributor) assume the cost of any necessary servicing, repair,
-or correction. This disclaimer of warranty constitutes an essential part of
-this License. No use of any Covered Software is authorized under this
-License except under this disclaimer.
-
-7. Limitation of Liability
-
-Under no circumstances and under no legal theory, whether tort
-(including negligence), contract, or otherwise, shall any Contributor, or
-anyone who distributes Covered Software as permitted above, be liable to
-You for any direct, indirect, special, incidental, or consequential damages
-of any character including, without limitation, damages for lost profits,
-loss of goodwill, work stoppage, computer failure or malfunction, or any and
-all other commercial damages or losses, even if such party shall have been
-informed of the possibility of such damages. This limitation of liability
-shall not apply to liability for death or personal injury resulting from
-such party’s negligence to the extent applicable law prohibits such
-limitation. Some jurisdictions do not allow the exclusion or limitation of
-incidental or consequential damages, so this exclusion and limitation may
-not apply to You.
-
-8. Litigation
-
-Any litigation relating to this License may be brought only in the courts of
-a jurisdiction where the defendant maintains its principal place of business
-and such litigation shall be governed by laws of that jurisdiction, without
-reference to its conflict-of-law provisions. Nothing in this Section shall
-prevent a party’s ability to bring cross-claims or counter-claims.
-
-9. Miscellaneous
-
-This License represents the complete agreement concerning the subject matter
-hereof. If any provision of this License is held to be unenforceable,
-such provision shall be reformed only to the extent necessary to make it
-enforceable. Any law or regulation which provides that the language of a
-contract shall be construed against the drafter shall not be used to construe
-this License against a Contributor.
-
-10. Versions of the License
-
-    10.1. New Versions
-    Mozilla Foundation is the license steward. Except as provided in
-    Section 10.3, no one other than the license steward has the right to
-    modify or publish new versions of this License. Each version will be
-    given a distinguishing version number.
-
-    10.2. Effect of New Versions
-    You may distribute the Covered Software under the terms of the version
-    of the License under which You originally received the Covered Software,
-    or under the terms of any subsequent version published
-    by the license steward.
-
-    10.3. Modified Versions
-    If you create software not governed by this License, and you want to
-    create a new license for such software, you may create and use a modified
-    version of this License if you rename the license and remove any
-    references to the name of the license steward (except to note that such
-    modified license differs from this License).
-
-    10.4. Distributing Source Code Form that is
-    Incompatible With Secondary Licenses
-    If You choose to distribute Source Code Form that is
-    Incompatible With Secondary Licenses under the terms of this version of
-    the License, the notice described in Exhibit B of this
-    License must be attached.
-
-Exhibit A - Source Code Form License Notice
-
-    This Source Code Form is subject to the terms of the
-    Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed
-    with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-If it is not possible or desirable to put the notice in a particular file,
-then You may include the notice in a location (such as a LICENSE file in a
-relevant directory) where a recipient would be likely to
-look for such a notice.
-
-You may add additional accurate notices of copyright ownership.
-
-Exhibit B - “Incompatible With Secondary Licenses” Notice
-
-    This Source Code Form is “Incompatible With Secondary Licenses”,
-    as defined by the Mozilla Public License, v. 2.0.
-
--------------------------------------------------------------------------------
-
-Eclipse Public License, Version 1.0 (EPL-1.0)
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
-LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
-CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-    a) in the case of the initial Contributor, the initial code and
-       documentation distributed under this Agreement, and
-
-    b) in the case of each subsequent Contributor:
-        i) changes to the Program, and
-        ii) additions to the Program;
-
-where such changes and/or additions to the Program originate from and are
-distributed by that particular Contributor. A Contribution 'originates'
-from a Contributor if it was added to the Program by such Contributor itself
-or anyone acting on such Contributor's behalf. Contributions do not include
-additions to the Program which: (i) are separate modules of software
-distributed in conjunction with the Program under their own license agreement,
-and (ii) are not derivative works of the Program.
-
-"Contributor" means any person or entity that distributes the Program.
-
-"Licensed Patents " mean patent claims licensable by a Contributor which are
-necessarily infringed by the use or sale of its Contribution alone or
-when combined with the Program.
-
-"Program" means the Contributions distributed in accordance with
-this Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement,
-including all Contributors.
-
-2. GRANT OF RIGHTS
-
-    a) Subject to the terms of this Agreement, each Contributor hereby grants
-       Recipient a non-exclusive, worldwide, royalty-free copyright license to
-       reproduce, prepare derivative works of, publicly display, publicly
-       perform, distribute and sublicense the Contribution of such
-       Contributor, if any, and such derivative works,
-       in source code and object code form.
-
-    b) Subject to the terms of this Agreement, each Contributor hereby grants
-       Recipient a non-exclusive, worldwide, royalty-free patent license under
-       Licensed Patents to make, use, sell, offer to sell, import and
-       otherwise transfer the Contribution of such Contributor, if any,
-       in source code and object code form. This patent license shall apply
-       to the combination of the Contribution and the Program if, at the time
-       the Contribution is added by the Contributor, such addition of the
-       Contribution causes such combination to be covered by the
-       Licensed Patents. The patent license shall not apply to any other
-       combinations which include the Contribution.
-       No hardware per se is licensed hereunder.
-
-    c) Recipient understands that although each Contributor grants the
-       licenses to its Contributions set forth herein, no assurances are
-       provided by any Contributor that the Program does not infringe the
-       patent or other intellectual property rights of any other entity.
-       Each Contributor disclaims any liability to Recipient for claims
-       brought by any other entity based on infringement of intellectual
-       property rights or otherwise. As a condition to exercising the
-       rights and licenses granted hereunder, each Recipient hereby assumes
-       sole responsibility to secure any other intellectual property rights
-       needed, if any. For example, if a third party patent license is
-       required to allow Recipient to distribute the Program, it is
-       Recipient's responsibility to acquire that license
-       before distributing the Program.
-
-    d) Each Contributor represents that to its knowledge it has sufficient
-       copyright rights in its Contribution, if any, to grant the copyright
-       license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under
-its own license agreement, provided that:
-
-    a) it complies with the terms and conditions of this Agreement; and
-
-    b) its license agreement:
-
-        i) effectively disclaims on behalf of all Contributors all warranties
-        and conditions, express and implied, including warranties or
-        conditions of title and non-infringement, and implied warranties or
-        conditions of merchantability and fitness for a particular purpose;
-
-        ii) effectively excludes on behalf of all Contributors all liability
-        for damages, including direct, indirect, special, incidental and
-        consequential damages, such as lost profits;
-
-        iii) states that any provisions which differ from this Agreement are
-        offered by that Contributor alone and not by any other party; and
-
-        iv) states that source code for the Program is available from such
-        Contributor, and informs licensees how to obtain it in a reasonable
-        manner on or through a medium customarily used for software exchange.
-
-When the Program is made available in source code form:
-
-    a) it must be made available under this Agreement; and
-    b) a copy of this Agreement must be included with each copy of the Program.
-
-Contributors may not remove or alter any copyright notices contained
-within the Program.
-
-Each Contributor must identify itself as the originator of its Contribution,
-if any, in a manner that reasonably allows subsequent Recipients to
-identify the originator of the Contribution.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities with
-respect to end users, business partners and the like. While this license is
-intended to facilitate the commercial use of the Program, the Contributor who
-includes the Program in a commercial product offering should do so in a manner
-which does not create potential liability for other Contributors. Therefore,
-if a Contributor includes the Program in a commercial product offering,
-such Contributor ("Commercial Contributor") hereby agrees to defend and
-indemnify every other Contributor ("Indemnified Contributor") against any
-losses, damages and costs (collectively "Losses") arising from claims,
-lawsuits and other legal actions brought by a third party against the
-Indemnified Contributor to the extent caused by the acts or omissions of
-such Commercial Contributor in connection with its distribution of the Program
-in a commercial product offering. The obligations in this section do not apply
-to any claims or Losses relating to any actual or alleged intellectual
-property infringement. In order to qualify, an Indemnified Contributor must:
-a) promptly notify the Commercial Contributor in writing of such claim,
-and b) allow the Commercial Contributor to control, and cooperate with the
-Commercial Contributor in, the defense and any related settlement
-negotiations. The Indemnified Contributor may participate in any such
-claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial product
-offering, Product X. That Contributor is then a Commercial Contributor.
-If that Commercial Contributor then makes performance claims, or offers
-warranties related to Product X, those performance claims and warranties
-are such Commercial Contributor's responsibility alone. Under this section,
-the Commercial Contributor would have to defend claims against the other
-Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result,
-the Commercial Contributor must pay those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
-IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
-NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-Each Recipient is solely responsible for determining the appropriateness of
-using and distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement , including but not limited to the
-risks and costs of program errors, compliance with applicable laws, damage to
-or loss of data, programs or equipment, and unavailability
-or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
-CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
-LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
-EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of the
-remainder of the terms of this Agreement, and without further action by
-the parties hereto, such provision shall be reformed to the minimum extent
-necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity (including a
-cross-claim or counterclaim in a lawsuit) alleging that the Program itself
-(excluding combinations of the Program with other software or hardware)
-infringes such Recipient's patent(s), then such Recipient's rights granted
-under Section 2(b) shall terminate as of the date such litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it fails to
-comply with any of the material terms or conditions of this Agreement and
-does not cure such failure in a reasonable period of time after becoming
-aware of such noncompliance. If all Recipient's rights under this
-Agreement terminate, Recipient agrees to cease use and distribution of the
-Program as soon as reasonably practicable. However, Recipient's obligations
-under this Agreement and any licenses granted by Recipient relating to the
-Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement,
-but in order to avoid inconsistency the Agreement is copyrighted and may
-only be modified in the following manner. The Agreement Steward reserves
-the right to publish new versions (including revisions) of this Agreement
-from time to time. No one other than the Agreement Steward has the right to
-modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version
-of the Agreement under which it was received. In addition, after a new version
-of the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly
-stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
-licenses to the intellectual property of any Contributor under this Agreement,
-whether expressly, by implication, estoppel or otherwise. All rights in the
-Program not expressly granted under this Agreement are reserved.
-
-This Agreement is governed by the laws of the State of New York and the
-intellectual property laws of the United States of America. No party to
-this Agreement will bring a legal action under this Agreement more than one
-year after the cause of action arose. Each party waives its rights to a
-jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-instrumentation-api.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-instrumentation-api.txt
index d645695..56ee3c8
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-instrumentation-api.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                                Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-jackson-annotations.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-jackson-annotations.txt
old mode 100755
new mode 100644
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-jackson-core.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-jackson-core.txt
old mode 100755
new mode 100644
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-jackson-databind.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-jackson-databind.txt
old mode 100755
new mode 100644
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-log4j-core-2.11.2.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-jasper-compiler.txt
similarity index 99%
rename from dolphinscheduler-dist/release-docs/licenses/LICENSE-log4j-core-2.11.2.txt
rename to dolphinscheduler-dist/release-docs/licenses/LICENSE-jasper-compiler.txt
index 6279e52..7a4a3ea 100644
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-log4j-core-2.11.2.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-jasper-compiler.txt
@@ -187,7 +187,7 @@
       same "printed page" as the copyright notice for easier
       identification within third-party archives.
 
-   Copyright 1999-2005 The Apache Software Foundation
+   Copyright [yyyy] [name of copyright owner]
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -199,4 +199,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-jasper-runtime.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-jasper-runtime.txt
new file mode 100644
index 0000000..a9ac967
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-jasper-runtime.txt
@@ -0,0 +1,14 @@
+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.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-jsp-api-2.1-6.1.14.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-jsp-api-2.1-6.1.14.txt
deleted file mode 100644
index d6aac6c..0000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-jsp-api-2.1-6.1.14.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-Apache License
-
-Version 2.0, January 2004
-
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or it [...]
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combin [...]
-
-4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-You must give any other recipients of the Work or Derivative Works a copy of this License; and
-You must cause any modified files to carry prominent notices stating that You changed the files; and
-You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, w [...]
-
-You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the [...]
-
-8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limit [...]
-
-9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor h [...]
-
-END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-log4j-api-2.11.2.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-log4j-api-2.11.2.txt
deleted file mode 100644
index d6aac6c..0000000
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-log4j-api-2.11.2.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-Apache License
-
-Version 2.0, January 2004
-
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or it [...]
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combin [...]
-
-4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-You must give any other recipients of the Work or Derivative Works a copy of this License; and
-You must cause any modified files to carry prominent notices stating that You changed the files; and
-You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, w [...]
-
-You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the [...]
-
-8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limit [...]
-
-9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor h [...]
-
-END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-buffer.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-buffer.txt
index d645695..9d72f1c
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-buffer.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                             Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-code-http.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-code-http.txt
index d645695..9d72f1c
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-code-http.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                             Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http2.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http2.txt
index d645695..9d72f1c
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http2.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                             Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-socks.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-socks.txt
index d645695..9d72f1c
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-socks.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                             Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec.txt
index d645695..9d72f1c
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                             Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-common.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-common.txt
index d645695..9d72f1c
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-common.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                             Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-handler-proxy.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-handler-proxy.txt
index d645695..9d72f1c
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-handler-proxy.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                             Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-handler.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-handler.txt
index d645695..9d72f1c
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-handler.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                             Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-resolver.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-resolver.txt
index d645695..9d72f1c
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-resolver.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                             Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-transport.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-transport.txt
index d645695..9d72f1c
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-transport.txt
@@ -1,5 +1,4 @@
-
-                                 Apache License
+                             Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -199,4 +198,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-opencensus-api.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-opencensus-api.txt
index d645695..7a4a3ea
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-opencensus-api.txt
@@ -199,4 +199,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-opencensus-contrib-grpc-metrics.txt
old mode 100755
new mode 100644
similarity index 99%
copy from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
copy to dolphinscheduler-dist/release-docs/licenses/LICENSE-opencensus-contrib-grpc-metrics.txt
index d645695..7a4a3ea
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-opencensus-contrib-grpc-metrics.txt
@@ -199,4 +199,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-proto-google-common-protos.txt
old mode 100755
new mode 100644
similarity index 99%
rename from dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
rename to dolphinscheduler-dist/release-docs/licenses/LICENSE-proto-google-common-protos.txt
index d645695..7a4a3ea
--- a/dolphinscheduler-dist/release-docs/licenses/LICENSE-curator-framwork.txt
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-proto-google-common-protos.txt
@@ -199,4 +199,4 @@
    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.
+   limitations under the License.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-protobuf-java-util.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-protobuf-java-util.txt
new file mode 100644
index 0000000..327bafe
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-protobuf-java-util.txt
@@ -0,0 +1,42 @@
+This license applies to all parts of Protocol Buffers except the following:
+
+  - Atomicops support for generic gcc, located in
+    src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
+    This file is copyrighted by Red Hat Inc.
+
+  - Atomicops support for AIX/POWER, located in
+    src/google/protobuf/stubs/atomicops_internals_power.h.
+    This file is copyrighted by Bloomberg Finance LP.
+
+Copyright 2014, Google Inc.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it.  This code is not
+standalone and requires a support library to be linked with it.  This
+support library is itself covered by the above license.
\ No newline at end of file
diff --git a/dolphinscheduler-dist/release-docs/licenses/ui-licenses/LICENSE-normalize b/dolphinscheduler-dist/release-docs/licenses/ui-licenses/LICENSE-normalize
new file mode 100644
index 0000000..90e0c09
--- /dev/null
+++ b/dolphinscheduler-dist/release-docs/licenses/ui-licenses/LICENSE-normalize
@@ -0,0 +1,8 @@
+The MIT License (MIT)
+Copyright © Nicolas Gallagher and Jonathan Neal
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/dolphinscheduler-microbench/pom.xml b/dolphinscheduler-microbench/pom.xml
index 4d9775f..6080343 100644
--- a/dolphinscheduler-microbench/pom.xml
+++ b/dolphinscheduler-microbench/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <artifactId>dolphinscheduler</artifactId>
         <groupId>org.apache.dolphinscheduler</groupId>
-        <version>1.3.0-SNAPSHOT</version>
+        <version>1.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/dolphinscheduler-plugin-api/pom.xml b/dolphinscheduler-plugin-api/pom.xml
index 5c9a138..b958b21 100644
--- a/dolphinscheduler-plugin-api/pom.xml
+++ b/dolphinscheduler-plugin-api/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.dolphinscheduler</groupId>
         <artifactId>dolphinscheduler</artifactId>
-        <version>1.3.0-SNAPSHOT</version>
+        <version>1.2.1-SNAPSHOT</version>
     </parent>
     <artifactId>dolphinscheduler-plugin-api</artifactId>
     <name>${project.artifactId}</name>
diff --git a/dolphinscheduler-remote/pom.xml b/dolphinscheduler-remote/pom.xml
index a20a02e..c01434c 100644
--- a/dolphinscheduler-remote/pom.xml
+++ b/dolphinscheduler-remote/pom.xml
@@ -20,7 +20,7 @@
     <parent>
         <artifactId>dolphinscheduler</artifactId>
         <groupId>org.apache.dolphinscheduler</groupId>
-        <version>1.3.0-SNAPSHOT</version>
+        <version>1.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java
index 10e62d8..10f729d 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java
+++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java
@@ -349,7 +349,7 @@ public class NettyRemotingClient {
                 return channel;
             }
         } catch (Exception ex) {
-            logger.warn(String.format("connect to %s error", host), ex);
+            logger.info("connect to {} error  {}", host, ex);
         }
         return null;
     }
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandType.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandType.java
index d1ffc65..c8d5659 100644
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandType.java
+++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/CommandType.java
@@ -1 +1 @@
-/*
 * 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.remote.command;


public enum CommandType {

    /**
     * remove task log request,
     */
    REMOVE_TAK_LOG_REQUEST,

    /**
     * remove task log respons
 e
     */
    REMOVE_TAK_LOG_RESPONSE,

    /**
     *  roll view log request
     */
    ROLL_VIEW_LOG_REQUEST,

    /**
     *  roll view log response
     */
    ROLL_VIEW_LOG_RESPONSE,

    /**
     * view whole log request
     */
    VIEW_WHOLE_LOG_REQUEST,

    /**
     * view whole log response
     */
    VIEW_WHOLE_LOG_RESPONSE,

    /**
     * get log bytes request
     */
    GET_LOG_BYTES_REQUEST,

    /**
     * get log bytes response
     */
    GET_LOG_BYTES_RESPONSE,


    WORKER_REQUEST,
    MASTER_RESPONSE,

    /**
     * execute task request
     */
    TASK_EXECUTE_REQUEST,

    /**
     * execute task ack
     */
    TASK_EXECUTE_ACK,

    /**
     * execute task response
     */
    TASK_EXECUTE_RESPONSE,

    /**
     * kill task
     */
    TASK_KILL_REQUEST,

    /**
     * kill task response
     */
    TASK_KILL_RESPONSE,

    /**
     *  ping
     */
    PING,

    /**
     *  pong
     */
    PONG;
}
\ No newline at end of file
+/*
 * 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.remote.command;


public enum CommandType {

    /**
     *  roll view log request
     */
    ROLL_VIEW_LOG_REQUEST,

    /**
     *  roll view log response
  
    */
    ROLL_VIEW_LOG_RESPONSE,

    /**
     * view whole log request
     */
    VIEW_WHOLE_LOG_REQUEST,

    /**
     * view whole log response
     */
    VIEW_WHOLE_LOG_RESPONSE,

    /**
     * get log bytes request
     */
    GET_LOG_BYTES_REQUEST,

    /**
     * get log bytes response
     */
    GET_LOG_BYTES_RESPONSE,


    WORKER_REQUEST,
    MASTER_RESPONSE,

    /**
     * execute task request
     */
    TASK_EXECUTE_REQUEST,

    /**
     * execute task ack
     */
    TASK_EXECUTE_ACK,

    /**
     * execute task response
     */
    TASK_EXECUTE_RESPONSE,

    /**
     * kill task
     */
    TASK_KILL_REQUEST,

    /**
     * kill task response
     */
    TASK_KILL_RESPONSE,

    /**
     *  ping
     */
    PING,

    /**
     *  pong
     */
    PONG;
}
\ No newline at end of file
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestCommand.java
deleted file mode 100644
index a91cb2a..0000000
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogRequestCommand.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.remote.command.log;
-
-import org.apache.dolphinscheduler.remote.command.Command;
-import org.apache.dolphinscheduler.remote.command.CommandType;
-import org.apache.dolphinscheduler.remote.utils.JsonSerializer;
-
-import java.io.Serializable;
-
-/**
- *  remove task log request command
- */
-public class RemoveTaskLogRequestCommand implements Serializable {
-
-    /**
-     *  log path
-     */
-    private String path;
-
-    public RemoveTaskLogRequestCommand() {
-    }
-
-    public RemoveTaskLogRequestCommand(String path) {
-        this.path = path;
-    }
-
-    public String getPath() {
-        return path;
-    }
-
-    public void setPath(String path) {
-        this.path = path;
-    }
-
-    /**
-     * package request command
-     *
-     * @return command
-     */
-    public Command convert2Command(){
-        Command command = new Command();
-        command.setType(CommandType.REMOVE_TAK_LOG_REQUEST);
-        byte[] body = JsonSerializer.serialize(this);
-        command.setBody(body);
-        return command;
-    }
-}
diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseCommand.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseCommand.java
deleted file mode 100644
index 39e8672..0000000
--- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RemoveTaskLogResponseCommand.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.remote.command.log;
-
-import org.apache.dolphinscheduler.remote.command.Command;
-import org.apache.dolphinscheduler.remote.command.CommandType;
-import org.apache.dolphinscheduler.remote.utils.JsonSerializer;
-
-import java.io.Serializable;
-
-/**
- *  remove task log request command
- */
-public class RemoveTaskLogResponseCommand implements Serializable {
-
-    /*TaskPriorityQueueConsumer.*
-     *  log path
-     */
-    private Boolean status;
-
-    public RemoveTaskLogResponseCommand() {
-    }
-
-    public RemoveTaskLogResponseCommand(Boolean status) {
-        this.status = status;
-    }
-
-    public Boolean getStatus() {
-        return status;
-    }
-
-    public void setStatus(Boolean status) {
-        this.status = status;
-    }
-
-    /**
-     * package request command
-     *
-     * @return command
-     */
-    public Command convert2Command(long opaque){
-        Command command = new Command(opaque);
-        command.setType(CommandType.REMOVE_TAK_LOG_RESPONSE);
-        byte[] body = JsonSerializer.serialize(this);
-        command.setBody(body);
-        return command;
-    }
-}
diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/RemoveTaskLogRequestCommandTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/RemoveTaskLogRequestCommandTest.java
deleted file mode 100644
index 37c2106..0000000
--- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/RemoveTaskLogRequestCommandTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.remote;
-
-import junit.framework.Assert;
-import org.apache.dolphinscheduler.remote.command.Command;
-import org.apache.dolphinscheduler.remote.command.log.RemoveTaskLogRequestCommand;
-import org.apache.dolphinscheduler.remote.command.log.RemoveTaskLogResponseCommand;
-import org.junit.Test;
-
-public class RemoveTaskLogRequestCommandTest {
-
-    @Test
-    public void testConvert2Command(){
-        RemoveTaskLogResponseCommand removeTaskLogResponseCommand = new RemoveTaskLogResponseCommand();
-        removeTaskLogResponseCommand.setStatus(true);
-        Command command = removeTaskLogResponseCommand.convert2Command(122);
-        Assert.assertNotNull(command);
-    }
-}
diff --git a/dolphinscheduler-server/pom.xml b/dolphinscheduler-server/pom.xml
index b2daacf..891d918 100644
--- a/dolphinscheduler-server/pom.xml
+++ b/dolphinscheduler-server/pom.xml
@@ -21,7 +21,7 @@
 	<parent>
 		<groupId>org.apache.dolphinscheduler</groupId>
 		<artifactId>dolphinscheduler</artifactId>
-		<version>1.3.0-SNAPSHOT</version>
+		<version>1.2.1-SNAPSHOT</version>
 	</parent>
 	<artifactId>dolphinscheduler-server</artifactId>
 	<name>dolphinscheduler-server</name>
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/log/LoggerRequestProcessor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/log/LoggerRequestProcessor.java
index 458afa6..b7eea01 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/log/LoggerRequestProcessor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/log/LoggerRequestProcessor.java
@@ -60,14 +60,14 @@ public class LoggerRequestProcessor implements NettyRequestProcessor {
          */
         final CommandType commandType = command.getType();
         switch (commandType){
-            case GET_LOG_BYTES_REQUEST:
-                GetLogBytesRequestCommand getLogRequest = JsonSerializer.deserialize(
-                        command.getBody(), GetLogBytesRequestCommand.class);
-                byte[] bytes = getFileContentBytes(getLogRequest.getPath());
-                GetLogBytesResponseCommand getLogResponse = new GetLogBytesResponseCommand(bytes);
-                channel.writeAndFlush(getLogResponse.convert2Command(command.getOpaque()));
-                break;
-            case VIEW_WHOLE_LOG_REQUEST:
+                case GET_LOG_BYTES_REQUEST:
+                    GetLogBytesRequestCommand getLogRequest = JsonSerializer.deserialize(
+                            command.getBody(), GetLogBytesRequestCommand.class);
+                    byte[] bytes = getFileContentBytes(getLogRequest.getPath());
+                    GetLogBytesResponseCommand getLogResponse = new GetLogBytesResponseCommand(bytes);
+                    channel.writeAndFlush(getLogResponse.convert2Command(command.getOpaque()));
+                    break;
+                case VIEW_WHOLE_LOG_REQUEST:
                 ViewLogRequestCommand viewLogRequest = JsonSerializer.deserialize(
                         command.getBody(), ViewLogRequestCommand.class);
                 String msg = readWholeFileContent(viewLogRequest.getPath());
@@ -86,25 +86,6 @@ public class LoggerRequestProcessor implements NettyRequestProcessor {
                 RollViewLogResponseCommand rollViewLogRequestResponse = new RollViewLogResponseCommand(builder.toString());
                 channel.writeAndFlush(rollViewLogRequestResponse.convert2Command(command.getOpaque()));
                 break;
-            case REMOVE_TAK_LOG_REQUEST:
-                RemoveTaskLogRequestCommand removeTaskLogRequest = JsonSerializer.deserialize(
-                        command.getBody(), RemoveTaskLogRequestCommand.class);
-
-                String taskLogPath = removeTaskLogRequest.getPath();
-
-                File taskLogFile = new File(taskLogPath);
-                Boolean status = true;
-                try {
-                    if (taskLogFile.exists()){
-                        status = taskLogFile.delete();
-                    }
-                }catch (Exception e){
-                    status = false;
-                }
-
-                RemoveTaskLogResponseCommand removeTaskLogResponse = new RemoveTaskLogResponseCommand(status);
-                channel.writeAndFlush(removeTaskLogResponse.convert2Command(command.getOpaque()));
-                break;
             default:
                 throw new IllegalArgumentException("unknown commandType");
         }
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/log/LoggerServer.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/log/LoggerServer.java
index f1999e6..3520fb0 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/log/LoggerServer.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/log/LoggerServer.java
@@ -55,7 +55,6 @@ public class LoggerServer {
         this.server.registerProcessor(CommandType.GET_LOG_BYTES_REQUEST, requestProcessor, requestProcessor.getExecutor());
         this.server.registerProcessor(CommandType.ROLL_VIEW_LOG_REQUEST, requestProcessor, requestProcessor.getExecutor());
         this.server.registerProcessor(CommandType.VIEW_WHOLE_LOG_REQUEST, requestProcessor, requestProcessor.getExecutor());
-        this.server.registerProcessor(CommandType.REMOVE_TAK_LOG_REQUEST, requestProcessor, requestProcessor.getExecutor());
     }
 
     /**
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
index efd29dd..5b4b5da 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
@@ -37,9 +37,6 @@ public class MasterConfig {
     @Value("${master.task.commit.retryTimes:5}")
     private int masterTaskCommitRetryTimes;
 
-    @Value("${master.dispatch.task.num :3}")
-    private int masterDispatchTaskNumber;
-
     @Value("${master.task.commit.interval:1000}")
     private int masterTaskCommitInterval;
 
@@ -129,12 +126,4 @@ public class MasterConfig {
     public void setMasterReservedMemory(double masterReservedMemory) {
         this.masterReservedMemory = masterReservedMemory;
     }
-
-    public int getMasterDispatchTaskNumber() {
-        return masterDispatchTaskNumber;
-    }
-
-    public void setMasterDispatchTaskNumber(int masterDispatchTaskNumber) {
-        this.masterDispatchTaskNumber = masterDispatchTaskNumber;
-    }
 }
\ No newline at end of file
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java
index 68db1f2..d63b925 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java
@@ -17,7 +17,6 @@
 
 package org.apache.dolphinscheduler.server.master.consumer;
 
-import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
 import org.apache.dolphinscheduler.common.enums.SqoopJobType;
 import org.apache.dolphinscheduler.common.enums.TaskType;
@@ -32,11 +31,11 @@ import org.apache.dolphinscheduler.common.task.sqoop.SqoopParameters;
 import org.apache.dolphinscheduler.common.task.sqoop.sources.SourceMysqlParameter;
 import org.apache.dolphinscheduler.common.task.sqoop.targets.TargetMysqlParameter;
 import org.apache.dolphinscheduler.common.thread.Stopper;
+import org.apache.dolphinscheduler.common.thread.ThreadUtils;
 import org.apache.dolphinscheduler.common.utils.*;
 import org.apache.dolphinscheduler.dao.entity.*;
 import org.apache.dolphinscheduler.server.builder.TaskExecutionContextBuilder;
 import org.apache.dolphinscheduler.server.entity.*;
-import org.apache.dolphinscheduler.server.master.config.MasterConfig;
 import org.apache.dolphinscheduler.server.master.dispatch.ExecutorDispatcher;
 import org.apache.dolphinscheduler.server.master.dispatch.context.ExecutionContext;
 import org.apache.dolphinscheduler.server.master.dispatch.enums.ExecutorType;
@@ -86,13 +85,6 @@ public class TaskPriorityQueueConsumer extends Thread{
     @Autowired
     private ExecutorDispatcher dispatcher;
 
-
-    /**
-     * master config
-     */
-    @Autowired
-    private MasterConfig masterConfig;
-
     @PostConstruct
     public void init(){
         super.setName("TaskUpdateQueueConsumerThread");
@@ -101,27 +93,14 @@ public class TaskPriorityQueueConsumer extends Thread{
 
     @Override
     public void run() {
-        List<String> failedDispatchTasks = new ArrayList<>();
         while (Stopper.isRunning()){
             try {
-                int fetchTaskNum = masterConfig.getMasterDispatchTaskNumber();
-                failedDispatchTasks.clear();
-                for(int i = 0; i < fetchTaskNum; i++){
-                    if(taskPriorityQueue.size() <= 0){
-                        Thread.sleep(Constants.SLEEP_TIME_MILLIS);
-                        continue;
-                    }
-                    // if not task , blocking here
-                    String taskPriorityInfo = taskPriorityQueue.take();
-                    TaskPriority taskPriority = TaskPriority.of(taskPriorityInfo);
-                    boolean dispatchResult = dispatch(taskPriority.getTaskId());
-                    if(!dispatchResult){
-                        failedDispatchTasks.add(taskPriorityInfo);
-                    }
-                }
-                for(String dispatchFailedTask : failedDispatchTasks){
-                    taskPriorityQueue.put(dispatchFailedTask);
-                }
+                // if not task , blocking here
+                String taskPriorityInfo = taskPriorityQueue.take();
+
+                TaskPriority taskPriority = TaskPriority.of(taskPriorityInfo);
+
+                dispatch(taskPriority.getTaskId());
             }catch (Exception e){
                 logger.error("dispatcher task error",e);
             }
@@ -135,20 +114,21 @@ public class TaskPriorityQueueConsumer extends Thread{
      * @param taskInstanceId taskInstanceId
      * @return result
      */
-    private boolean dispatch(int taskInstanceId){
-        boolean result = false;
-        try {
-            TaskExecutionContext context = getTaskExecutionContext(taskInstanceId);
-            ExecutionContext executionContext = new ExecutionContext(context.toCommand(), ExecutorType.WORKER, context.getWorkerGroup());
-
-            if (taskInstanceIsFinalState(taskInstanceId)){
-                // when task finish, ignore this task, there is no need to dispatch anymore
-                return true;
-            }else{
+    private Boolean dispatch(int taskInstanceId){
+        TaskExecutionContext context = getTaskExecutionContext(taskInstanceId);
+        ExecutionContext executionContext = new ExecutionContext(context.toCommand(), ExecutorType.WORKER, context.getWorkerGroup());
+        Boolean result = false;
+        while (Stopper.isRunning()){
+            try {
                 result = dispatcher.dispatch(executionContext);
+            } catch (ExecuteException e) {
+                logger.error("dispatch error",e);
+                ThreadUtils.sleep(SLEEP_TIME_MILLIS);
+            }
+
+            if (result || taskInstanceIsFinalState(taskInstanceId)){
+                break;
             }
-        } catch (ExecuteException e) {
-            logger.error("dispatch error",e);
         }
         return result;
     }
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcher.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcher.java
index 34c8c8e..605297a 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcher.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/ExecutorDispatcher.java
@@ -81,12 +81,9 @@ public class ExecutorDispatcher implements InitializingBean {
         /**
          * host select
          */
-
         Host host = hostManager.select(context);
         if (StringUtils.isEmpty(host.getAddress())) {
-            throw new ExecuteException(String.format("fail to execute : %s due to no suitable worker , " +
-                            "current task need to %s worker group execute",
-                    context.getCommand(),context.getWorkerGroup()));
+            throw new ExecuteException(String.format("fail to execute : %s due to no worker ", context.getCommand()));
         }
         context.setHost(host);
         executorManager.beforeExecute(context);
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/LowerWeightHostManager.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/LowerWeightHostManager.java
index 1872ae0..66f31cd 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/LowerWeightHostManager.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/LowerWeightHostManager.java
@@ -17,7 +17,6 @@
 
 package org.apache.dolphinscheduler.server.master.dispatch.host;
 
-import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.utils.CollectionUtils;
 import org.apache.dolphinscheduler.common.utils.StringUtils;
 import org.apache.dolphinscheduler.remote.utils.Host;
@@ -37,8 +36,6 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
 
 import static org.apache.dolphinscheduler.common.Constants.COMMA;
 
@@ -69,12 +66,7 @@ public class LowerWeightHostManager extends CommonHostManager {
     /**
      * worker host weights
      */
-    private ConcurrentHashMap<String, Set<HostWeight>> workerHostWeightsMap;
-
-    /**
-     * worker group host lock
-     */
-    private Lock lock;
+    private ConcurrentHashMap<String, Set<HostWeight>> workerHostWeights;
 
     /**
      * executor service
@@ -84,10 +76,9 @@ public class LowerWeightHostManager extends CommonHostManager {
     @PostConstruct
     public void init(){
         this.selector = new LowerWeightRoundRobin();
-        this.workerHostWeightsMap = new ConcurrentHashMap<>();
-        this.lock = new ReentrantLock();
+        this.workerHostWeights = new ConcurrentHashMap<>();
         this.executorService = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("LowerWeightHostManagerExecutor"));
-        this.executorService.scheduleWithFixedDelay(new RefreshResourceTask(),0, 5, TimeUnit.SECONDS);
+        this.executorService.scheduleWithFixedDelay(new RefreshResourceTask(),35, 40, TimeUnit.SECONDS);
         this.roundRobinHostManager = new RoundRobinHostManager();
         this.roundRobinHostManager.setZookeeperNodeManager(getZookeeperNodeManager());
     }
@@ -107,8 +98,9 @@ public class LowerWeightHostManager extends CommonHostManager {
         Set<HostWeight> workerHostWeights = getWorkerHostWeights(context.getWorkerGroup());
         if(CollectionUtils.isNotEmpty(workerHostWeights)){
             return selector.select(workerHostWeights).getHost();
+        } else{
+            return roundRobinHostManager.select(context);
         }
-        return new Host();
     }
 
     @Override
@@ -116,23 +108,13 @@ public class LowerWeightHostManager extends CommonHostManager {
         throw new UnsupportedOperationException("not support");
     }
 
-    private void syncWorkerHostWeight(Map<String, Set<HostWeight>> workerHostWeights){
-        lock.lock();
-        try {
-            workerHostWeightsMap.clear();
-            workerHostWeightsMap.putAll(workerHostWeights);
-        } finally {
-            lock.unlock();
-        }
+    private void syncWorkerHostWeight(Map<String, Set<HostWeight>> workerHostWeights) {
+        this.workerHostWeights.clear();
+        this.workerHostWeights.putAll(workerHostWeights);
     }
 
-    private Set<HostWeight> getWorkerHostWeights(String workerGroup){
-        lock.lock();
-        try {
-            return workerHostWeightsMap.get(workerGroup);
-        } finally {
-            lock.unlock();
-        }
+    private Set<HostWeight> getWorkerHostWeights(String workerGroup) {
+        return workerHostWeights.get(workerGroup);
     }
 
     class RefreshResourceTask implements Runnable{
@@ -150,17 +132,8 @@ public class LowerWeightHostManager extends CommonHostManager {
                     Set<HostWeight> hostWeights = new HashSet<>(nodes.size());
                     for(String node : nodes){
                         String heartbeat = registryCenter.getZookeeperCachedOperator().get(workerGroupPath + "/" + node);
-                        if(StringUtils.isNotEmpty(heartbeat)
-                                && heartbeat.split(COMMA).length == Constants.HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH){
+                        if(StringUtils.isNotEmpty(heartbeat) && heartbeat.contains(COMMA) && heartbeat.split(COMMA).length == 5){
                             String[] parts = heartbeat.split(COMMA);
-
-                            int status = Integer.parseInt(parts[8]);
-                            if (status == Constants.ABNORMAL_NODE_STATUS){
-                                logger.warn("load is too high or availablePhysicalMemorySize(G) is too low, it's availablePhysicalMemorySize(G):{},loadAvg:{}",
-                                        Double.parseDouble(parts[3]) , Double.parseDouble(parts[2]));
-                                continue;
-                            }
-
                             double cpu = Double.parseDouble(parts[0]);
                             double memory = Double.parseDouble(parts[1]);
                             double loadAverage = Double.parseDouble(parts[2]);
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskAckProcessor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskAckProcessor.java
index 0f038dd..e579535 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskAckProcessor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/processor/TaskAckProcessor.java
@@ -70,7 +70,7 @@ public class TaskAckProcessor implements NettyRequestProcessor {
     }
 
     /**
-     * task ack process
+     *  task ack process
      * @param channel channel channel
      * @param command command TaskExecuteAckCommand
      */
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/registry/MasterRegistry.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/registry/MasterRegistry.java
index 3ddb9e7..b658298 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/registry/MasterRegistry.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/registry/MasterRegistry.java
@@ -19,12 +19,10 @@ package org.apache.dolphinscheduler.server.master.registry;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.state.ConnectionState;
 import org.apache.curator.framework.state.ConnectionStateListener;
-import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.utils.DateUtils;
 import org.apache.dolphinscheduler.common.utils.OSUtils;
 import org.apache.dolphinscheduler.remote.utils.NamedThreadFactory;
 import org.apache.dolphinscheduler.server.master.config.MasterConfig;
-import org.apache.dolphinscheduler.server.registry.HeartBeatTask;
 import org.apache.dolphinscheduler.server.registry.ZookeeperRegistryCenter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -97,13 +95,7 @@ public class MasterRegistry {
             }
         });
         int masterHeartbeatInterval = masterConfig.getMasterHeartbeatInterval();
-        HeartBeatTask heartBeatTask = new HeartBeatTask(startTime,
-                masterConfig.getMasterReservedMemory(),
-                masterConfig.getMasterMaxCpuloadAvg(),
-                getMasterPath(),
-                zookeeperRegistryCenter);
-
-        this.heartBeatExecutor.scheduleAtFixedRate(heartBeatTask, masterHeartbeatInterval, masterHeartbeatInterval, TimeUnit.SECONDS);
+        this.heartBeatExecutor.scheduleAtFixedRate(new HeartBeatTask(), masterHeartbeatInterval, masterHeartbeatInterval, TimeUnit.SECONDS);
         logger.info("master node : {} registry to ZK successfully with heartBeatInterval : {}s", address, masterHeartbeatInterval);
     }
 
@@ -132,7 +124,28 @@ public class MasterRegistry {
      * @return
      */
     private String getLocalAddress(){
-        return OSUtils.getHost() + Constants.COLON + masterConfig.getListenPort();
+        return OSUtils.getHost() + ":" + masterConfig.getListenPort();
     }
 
+    /**
+     * hear beat task
+     */
+    class HeartBeatTask implements Runnable{
+
+        @Override
+        public void run() {
+            try {
+                StringBuilder builder = new StringBuilder(100);
+                builder.append(OSUtils.cpuUsage()).append(COMMA);
+                builder.append(OSUtils.memoryUsage()).append(COMMA);
+                builder.append(OSUtils.loadAverage()).append(COMMA);
+                builder.append(startTime).append(COMMA);
+                builder.append(DateUtils.dateToString(new Date()));
+                String masterPath = getMasterPath();
+                zookeeperRegistryCenter.getZookeeperCachedOperator().update(masterPath, builder.toString());
+            } catch (Throwable ex){
+                logger.error("error write master heartbeat info", ex);
+            }
+        }
+    }
 }
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/DependentTaskExecThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/DependentTaskExecThread.java
index 882f588..7c8da5a 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/DependentTaskExecThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/DependentTaskExecThread.java
@@ -148,7 +148,7 @@ public class DependentTaskExecThread extends MasterBaseTaskExecThread {
                 if ( allDependentTaskFinish() || taskInstance.getState().typeIsFinished()){
                     break;
                 }
-                // update process task
+                // updateProcessInstance task instance
                 taskInstance = processService.findTaskInstanceById(taskInstance.getId());
                 processInstance = processService.findProcessInstanceById(processInstance.getId());
                 Thread.sleep(Constants.SLEEP_TIME_MILLIS);
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
index 4b5c3f7..211da1a 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
@@ -337,7 +337,7 @@ public class MasterExecThread implements Runnable {
     private void endProcess() {
         processInstance.setEndTime(new Date());
         processService.updateProcessInstance(processInstance);
-        if(processInstance.getState().typeIsWaitingThread()){
+        if(processInstance.getState().typeIsWaittingThread()){
             processService.createRecoveryWaitingThreadCommand(null, processInstance);
         }
         List<TaskInstance> taskInstances = processService.findValidTaskListByProcessId(processInstance.getId());
@@ -495,7 +495,6 @@ public class MasterExecThread implements Runnable {
             }
 
             String processWorkerGroup = processInstance.getWorkerGroup();
-            processWorkerGroup = StringUtils.isBlank(processWorkerGroup) ? DEFAULT_WORKER_GROUP : processWorkerGroup;
             String taskWorkerGroup = StringUtils.isBlank(taskNode.getWorkerGroup()) ? processWorkerGroup : taskNode.getWorkerGroup();
             if (!processWorkerGroup.equals(DEFAULT_WORKER_GROUP) && taskWorkerGroup.equals(DEFAULT_WORKER_GROUP)) {
                 taskInstance.setWorkerGroup(processWorkerGroup);
@@ -804,8 +803,7 @@ public class MasterExecThread implements Runnable {
         ProcessInstance instance = processService.findProcessInstanceById(processInstance.getId());
         ExecutionStatus state = instance.getState();
 
-        if(activeTaskNode.size() > 0 || retryTaskExists()){
-            // active task and retry task exists
+        if(activeTaskNode.size() > 0 || haveRetryTaskStandBy()){
             return runningState(state);
         }
         // process failure
@@ -828,8 +826,7 @@ public class MasterExecThread implements Runnable {
             List<TaskInstance> stopList = getCompleteTaskByState(ExecutionStatus.STOP);
             List<TaskInstance> killList = getCompleteTaskByState(ExecutionStatus.KILL);
             if(CollectionUtils.isNotEmpty(stopList)
-                    || CollectionUtils.isNotEmpty(killList)
-                    || !isComplementEnd()){
+                    || CollectionUtils.isNotEmpty(killList) || !isComplementEnd()){
                 return ExecutionStatus.STOP;
             }else{
                 return ExecutionStatus.SUCCESS;
@@ -838,13 +835,9 @@ public class MasterExecThread implements Runnable {
 
         // success
         if(state == ExecutionStatus.RUNNING_EXEUTION){
-            List<TaskInstance> killTasks = getCompleteTaskByState(ExecutionStatus.KILL);
             if(readyToSubmitTaskList.size() > 0){
                 //tasks currently pending submission, no retries, indicating that depend is waiting to complete
                 return ExecutionStatus.RUNNING_EXEUTION;
-            }else if(CollectionUtils.isNotEmpty(killTasks)){
-                // tasks maybe killed manually
-                return ExecutionStatus.FAILURE;
             }else{
                 //  if the waiting queue is empty and the status is in progress, then success
                 return ExecutionStatus.SUCCESS;
@@ -858,7 +851,7 @@ public class MasterExecThread implements Runnable {
      * whether standby task list have retry tasks
      * @return
      */
-    private boolean retryTaskExists() {
+    private boolean haveRetryTaskStandBy() {
 
         boolean result = false;
 
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterTaskExecThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterTaskExecThread.java
index a2dd7ce..ed49150 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterTaskExecThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterTaskExecThread.java
@@ -24,7 +24,6 @@ import org.apache.dolphinscheduler.common.model.TaskNode;
 import org.apache.dolphinscheduler.common.task.TaskTimeoutParameter;
 import org.apache.dolphinscheduler.common.thread.Stopper;
 import org.apache.dolphinscheduler.common.utils.CollectionUtils;
-import org.apache.dolphinscheduler.common.utils.StringUtils;
 import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
 import org.apache.dolphinscheduler.dao.entity.TaskInstance;
 import org.apache.dolphinscheduler.remote.command.TaskKillRequestCommand;
@@ -140,9 +139,6 @@ public class MasterTaskExecThread extends MasterBaseTaskExecThread {
                 if(this.cancel || this.processInstance.getState() == ExecutionStatus.READY_STOP){
                     cancelTaskInstance();
                 }
-                if(processInstance.getState() == ExecutionStatus.READY_PAUSE){
-                    pauseTask();
-                }
                 // task instance finished
                 if (taskInstance.getState().typeIsFinished()){
                     // if task is final result , then remove taskInstance from cache
@@ -177,33 +173,20 @@ public class MasterTaskExecThread extends MasterBaseTaskExecThread {
         return true;
     }
 
-    /**
-     * pause task if task have not been dispatched to worker, do not dispatch anymore.
-     *
-     */
-    public void pauseTask() {
-        taskInstance = processService.findTaskInstanceById(taskInstance.getId());
-        if(taskInstance == null){
-            return;
-        }
-        if(StringUtils.isBlank(taskInstance.getHost())){
-            taskInstance.setState(ExecutionStatus.PAUSE);
-            taskInstance.setEndTime(new Date());
-            processService.updateTaskInstance(taskInstance);
-        }
-    }
-
 
     /**
      *  task instance add queue , waiting worker to kill
      */
     private void cancelTaskInstance() throws Exception{
         if(alreadyKilled){
-            return;
+            return ;
         }
         alreadyKilled = true;
-        taskInstance = processService.findTaskInstanceById(taskInstance.getId());
-        if(StringUtils.isBlank(taskInstance.getHost())){
+
+        String taskInstanceWorkerGroup = taskInstance.getWorkerGroup();
+
+        // not exists
+        if (!existsValidWorkerGroup(taskInstanceWorkerGroup)){
             taskInstance.setState(ExecutionStatus.KILL);
             taskInstance.setEndTime(new Date());
             processService.updateTaskInstance(taskInstance);
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/monitor/RunConfig.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/monitor/RunConfig.java
index 484958e..4efe23e 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/monitor/RunConfig.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/monitor/RunConfig.java
@@ -16,8 +16,6 @@
  */
 package org.apache.dolphinscheduler.server.monitor;
 
-import org.apache.dolphinscheduler.common.Constants;
-import org.apache.dolphinscheduler.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.PropertySource;
 import org.springframework.stereotype.Component;
@@ -54,18 +52,7 @@ public class RunConfig {
     }
 
     public String getWorkers() {
-        StringBuilder sb = new StringBuilder(50);
-        if(StringUtils.isNotBlank(workers)){
-            String[] workersArr = workers.trim().split(Constants.COMMA);
-            for (String workerGroup : workersArr) {
-                sb.append(workerGroup.split(Constants.COLON)[0]).append(Constants.COMMA);
-            }
-        }
-        if( sb.length() > 0) {
-            sb.deleteCharAt(sb.length() - 1);
-        }
-
-        return sb.toString();
+        return workers;
     }
 
     public void setWorkers(String workers) {
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/registry/HeartBeatTask.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/registry/HeartBeatTask.java
deleted file mode 100644
index 2345ce9..0000000
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/registry/HeartBeatTask.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * 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.server.registry;
-
-import org.apache.dolphinscheduler.common.Constants;
-import org.apache.dolphinscheduler.common.utils.DateUtils;
-import org.apache.dolphinscheduler.common.utils.OSUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Date;
-
-import static org.apache.dolphinscheduler.remote.utils.Constants.COMMA;
-
-public class HeartBeatTask extends Thread{
-
-    private final Logger logger = LoggerFactory.getLogger(HeartBeatTask.class);
-
-    private String startTime;
-    private double reservedMemory;
-    private double maxCpuloadAvg;
-    private String heartBeatPath;
-    private ZookeeperRegistryCenter zookeeperRegistryCenter;
-
-    public HeartBeatTask(String startTime,
-                         double reservedMemory,
-                         double maxCpuloadAvg,
-                         String heartBeatPath,
-                         ZookeeperRegistryCenter zookeeperRegistryCenter){
-        this.startTime = startTime;
-        this.reservedMemory = reservedMemory;
-        this.maxCpuloadAvg = maxCpuloadAvg;
-        this.heartBeatPath = heartBeatPath;
-        this.zookeeperRegistryCenter = zookeeperRegistryCenter;
-    }
-
-    @Override
-    public void run() {
-        try {
-
-            double availablePhysicalMemorySize = OSUtils.availablePhysicalMemorySize();
-            double loadAverage = OSUtils.loadAverage();
-
-            int status = Constants.NORAML_NODE_STATUS;
-
-            if(availablePhysicalMemorySize < reservedMemory
-                    || loadAverage > maxCpuloadAvg){
-                logger.warn("load is too high or availablePhysicalMemorySize(G) is too low, it's availablePhysicalMemorySize(G):{},loadAvg:{}", availablePhysicalMemorySize , loadAverage);
-                status = Constants.ABNORMAL_NODE_STATUS;
-            }
-
-            StringBuilder builder = new StringBuilder(100);
-            builder.append(OSUtils.cpuUsage()).append(COMMA);
-            builder.append(OSUtils.memoryUsage()).append(COMMA);
-            builder.append(OSUtils.loadAverage()).append(COMMA);
-            builder.append(OSUtils.availablePhysicalMemorySize()).append(Constants.COMMA);
-            builder.append(maxCpuloadAvg).append(Constants.COMMA);
-            builder.append(reservedMemory).append(Constants.COMMA);
-            builder.append(startTime).append(Constants.COMMA);
-            builder.append(DateUtils.dateToString(new Date())).append(Constants.COMMA);
-            builder.append(status).append(COMMA);
-            //save process id
-            builder.append(OSUtils.getProcessID());
-            zookeeperRegistryCenter.getZookeeperCachedOperator().update(heartBeatPath, builder.toString());
-        } catch (Throwable ex){
-            logger.error("error write heartbeat info", ex);
-        }
-    }
-}
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/DependentExecute.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/DependentExecute.java
index 71c7d95..2359546 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/DependentExecute.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/DependentExecute.java
@@ -123,16 +123,28 @@ public class DependentExecute {
 
     /**
      * depend type = depend_all
+     * skip the condition tasks.
+     * judge all the task
      * @return
      */
     private DependResult dependResultByProcessInstance(ProcessInstance processInstance){
-        if(!processInstance.getState().typeIsFinished()){
-            return DependResult.WAITING;
+        DependResult result = DependResult.FAILED;
+        List<TaskNode> taskNodes =
+                processService.getTaskNodeListByDefinitionId(processInstance.getProcessDefinitionId());
+        if(CollectionUtils.isEmpty(taskNodes)) {
+            return result;
         }
-        if(processInstance.getState().typeIsSuccess()){
-            return DependResult.SUCCESS;
+        for(TaskNode taskNode:taskNodes){
+            if(taskNode.isConditionsTask()
+                    || DagHelper.haveConditionsAfterNode(taskNode.getName(), taskNodes)){
+                continue;
+            }
+            DependResult tmpResult = getDependTaskResult(taskNode.getName(),processInstance);
+            if(DependResult.SUCCESS != tmpResult){
+                return tmpResult;
+            }
         }
-        return DependResult.FAILED;
+        return DependResult.SUCCESS;
     }
 
     /**
@@ -156,11 +168,7 @@ public class DependentExecute {
         if(taskInstance == null){
             // cannot find task in the process instance
             // maybe because process instance is running or failed.
-            if(processInstance.getState().typeIsFinished()){
-                result = DependResult.FAILED;
-            }else{
-                return DependResult.WAITING;
-            }
+            result = getDependResultByProcessStateWhenTaskNull(processInstance.getState());
         }else{
             result = getDependResultByState(taskInstance.getState());
         }
@@ -209,7 +217,9 @@ public class DependentExecute {
      */
     private DependResult getDependResultByState(ExecutionStatus state) {
 
-        if(!state.typeIsFinished()){
+        if(state.typeIsRunning()
+                || state == ExecutionStatus.SUBMITTED_SUCCESS
+                || state == ExecutionStatus.WAITTING_THREAD){
             return DependResult.WAITING;
         }else if(state.typeIsSuccess()){
             return DependResult.SUCCESS;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/config/WorkerConfig.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/config/WorkerConfig.java
index 1a31fa0..7f4d93f 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/config/WorkerConfig.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/config/WorkerConfig.java
@@ -38,7 +38,7 @@ public class WorkerConfig {
     @Value("${worker.max.cpuload.avg:-1}")
     private int workerMaxCpuloadAvg;
 
-    @Value("${worker.reserved.memory:0.3}")
+    @Value("${worker.reserved.memory:0.5}")
     private double workerReservedMemory;
 
     @Value("${worker.group: default}")
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackService.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackService.java
index 4aeb6fe..0fe7524 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackService.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackService.java
@@ -43,7 +43,6 @@ import static org.apache.dolphinscheduler.common.Constants.SLEEP_TIME_MILLIS;
 public class TaskCallbackService {
 
     private final Logger logger = LoggerFactory.getLogger(TaskCallbackService.class);
-    private static final int [] RETRY_BACKOFF = { 1, 2, 3, 5, 10, 20, 40, 100, 100, 100, 100, 200, 200, 200 };
 
     /**
      *  remote channels
@@ -56,7 +55,6 @@ public class TaskCallbackService {
     @Autowired
     private ZookeeperRegistryCenter zookeeperRegistryCenter;
 
-
     /**
      * netty remoting client
      */
@@ -94,44 +92,26 @@ public class TaskCallbackService {
         if(newChannel != null){
             return getRemoteChannel(newChannel, nettyRemoteChannel.getOpaque(), taskInstanceId);
         }
-        logger.warn("original master : {} for task : {} is not reachable, random select master",
-                nettyRemoteChannel.getHost(),
-                taskInstanceId);
+        logger.warn("original master : {} is not reachable, random select master", nettyRemoteChannel.getHost());
         Set<String> masterNodes = null;
-        int ntries = 0;
         while (Stopper.isRunning()) {
             masterNodes = zookeeperRegistryCenter.getMasterNodesDirectly();
             if (CollectionUtils.isEmpty(masterNodes)) {
-                logger.info("try {} times but not find any master for task : {}.",
-                        ntries + 1,
-                        taskInstanceId);
-                masterNodes = null;
-                ThreadUtils.sleep(pause(ntries++));
-                continue;
+                logger.error("no available master node");
+                ThreadUtils.sleep(SLEEP_TIME_MILLIS);
+            }else {
+                break;
             }
-            logger.info("try {} times to find {} masters for task : {}.",
-                    ntries + 1,
-                    masterNodes.size(),
-                    taskInstanceId);
-            for (String masterNode : masterNodes) {
-                newChannel = nettyRemotingClient.getChannel(Host.of(masterNode));
-                if (newChannel != null) {
-                    return getRemoteChannel(newChannel, nettyRemoteChannel.getOpaque(), taskInstanceId);
-                }
+        }
+        for(String masterNode : masterNodes){
+            newChannel = nettyRemotingClient.getChannel(Host.of(masterNode));
+            if(newChannel != null){
+                return getRemoteChannel(newChannel, nettyRemoteChannel.getOpaque(), taskInstanceId);
             }
-            masterNodes = null;
-            ThreadUtils.sleep(pause(ntries++));
         }
-
-        throw new IllegalStateException(String.format("all available master nodes : %s are not reachable for task: {}", masterNodes, taskInstanceId));
+        throw new IllegalStateException(String.format("all available master nodes : %s are not reachable", masterNodes));
     }
 
-
-    public int pause(int ntries){
-        return SLEEP_TIME_MILLIS * RETRY_BACKOFF[ntries % RETRY_BACKOFF.length];
-    }
-
-
     private NettyRemoteChannel getRemoteChannel(Channel newChannel, long opaque, int taskInstanceId){
         NettyRemoteChannel remoteChannel = new NettyRemoteChannel(newChannel, opaque);
         addRemoteChannel(taskInstanceId, remoteChannel);
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskKillProcessor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskKillProcessor.java
index 800db21..17ae6a4 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskKillProcessor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskKillProcessor.java
@@ -93,7 +93,6 @@ public class TaskKillProcessor implements NettyRequestProcessor {
 
         TaskKillResponseCommand taskKillResponseCommand = buildKillTaskResponseCommand(killCommand,result);
         taskCallbackService.sendResult(taskKillResponseCommand.getTaskInstanceId(), taskKillResponseCommand.convert2Command());
-        taskExecutionContextCacheManager.removeByTaskInstanceId(taskKillResponseCommand.getTaskInstanceId());
     }
 
     /**
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/registry/WorkerRegistry.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/registry/WorkerRegistry.java
index 715db39..4d72340 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/registry/WorkerRegistry.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/registry/WorkerRegistry.java
@@ -19,12 +19,10 @@ package org.apache.dolphinscheduler.server.worker.registry;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.state.ConnectionState;
 import org.apache.curator.framework.state.ConnectionStateListener;
-import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.utils.DateUtils;
 import org.apache.dolphinscheduler.common.utils.OSUtils;
 import org.apache.dolphinscheduler.common.utils.StringUtils;
 import org.apache.dolphinscheduler.remote.utils.NamedThreadFactory;
-import org.apache.dolphinscheduler.server.registry.HeartBeatTask;
 import org.apache.dolphinscheduler.server.registry.ZookeeperRegistryCenter;
 import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
 import org.slf4j.Logger;
@@ -104,13 +102,7 @@ public class WorkerRegistry {
             }
         });
         int workerHeartbeatInterval = workerConfig.getWorkerHeartbeatInterval();
-
-        HeartBeatTask heartBeatTask = new HeartBeatTask(startTime,
-                workerConfig.getWorkerReservedMemory(),
-                workerConfig.getWorkerMaxCpuloadAvg(),
-                getWorkerPath(),
-                zookeeperRegistryCenter);
-        this.heartBeatExecutor.scheduleAtFixedRate(heartBeatTask, workerHeartbeatInterval, workerHeartbeatInterval, TimeUnit.SECONDS);
+        this.heartBeatExecutor.scheduleAtFixedRate(new HeartBeatTask(), workerHeartbeatInterval, workerHeartbeatInterval, TimeUnit.SECONDS);
         logger.info("worker node : {} registry to ZK successfully with heartBeatInterval : {}s", address, workerHeartbeatInterval);
 
     }
@@ -149,7 +141,28 @@ public class WorkerRegistry {
      * @return
      */
     private String getLocalAddress(){
-        return OSUtils.getHost() + Constants.COLON + workerConfig.getListenPort();
+        return OSUtils.getHost() + ":" + workerConfig.getListenPort();
     }
 
+    /**
+     * hear beat task
+     */
+    class HeartBeatTask implements Runnable{
+
+        @Override
+        public void run() {
+            try {
+                StringBuilder builder = new StringBuilder(100);
+                builder.append(OSUtils.cpuUsage()).append(COMMA);
+                builder.append(OSUtils.memoryUsage()).append(COMMA);
+                builder.append(OSUtils.loadAverage()).append(COMMA);
+                builder.append(startTime).append(COMMA);
+                builder.append(DateUtils.dateToString(new Date()));
+                String workerPath = getWorkerPath();
+                zookeeperRegistryCenter.getZookeeperCachedOperator().update(workerPath, builder.toString());
+            } catch (Throwable ex){
+                logger.error("error write worker heartbeat info", ex);
+            }
+        }
+    }
 }
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
index bf4c46f..a2ad762 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
@@ -35,12 +35,9 @@ import org.apache.dolphinscheduler.common.utils.HadoopUtils;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.remote.command.TaskExecuteResponseCommand;
 import org.apache.dolphinscheduler.server.entity.TaskExecutionContext;
-import org.apache.dolphinscheduler.server.worker.cache.TaskExecutionContextCacheManager;
-import org.apache.dolphinscheduler.server.worker.cache.impl.TaskExecutionContextCacheManagerImpl;
 import org.apache.dolphinscheduler.server.worker.processor.TaskCallbackService;
 import org.apache.dolphinscheduler.server.worker.task.AbstractTask;
 import org.apache.dolphinscheduler.server.worker.task.TaskManager;
-import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -71,11 +68,6 @@ public class TaskExecuteThread implements Runnable {
     private TaskCallbackService taskCallbackService;
 
     /**
-     * taskExecutionContextCacheManager
-     */
-    private TaskExecutionContextCacheManager taskExecutionContextCacheManager;
-
-    /**
      * task logger
      */
     private Logger taskLogger;
@@ -90,7 +82,6 @@ public class TaskExecuteThread implements Runnable {
             , Logger taskLogger) {
         this.taskExecutionContext = taskExecutionContext;
         this.taskCallbackService = taskCallbackService;
-        this.taskExecutionContextCacheManager = SpringApplicationContext.getBean(TaskExecutionContextCacheManagerImpl.class);
         this.taskLogger = taskLogger;
     }
 
@@ -146,7 +137,6 @@ public class TaskExecuteThread implements Runnable {
             responseCommand.setAppIds(task.getAppIds());
         } finally {
             try {
-                taskExecutionContextCacheManager.removeByTaskInstanceId(taskExecutionContext.getTaskInstanceId());
                 taskCallbackService.sendResult(taskExecutionContext.getTaskInstanceId(), responseCommand.convert2Command());
             }catch (Exception e){
                 ThreadUtils.sleep(Constants.SLEEP_TIME_MILLIS);
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
index 3459e35..7224d34 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
@@ -16,39 +16,32 @@
  */
 package org.apache.dolphinscheduler.server.worker.task;
 
-import com.sun.jna.platform.win32.Kernel32;
-import com.sun.jna.platform.win32.WinNT;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
 import org.apache.dolphinscheduler.common.thread.Stopper;
 import org.apache.dolphinscheduler.common.thread.ThreadUtils;
 import org.apache.dolphinscheduler.common.utils.HadoopUtils;
-import org.apache.dolphinscheduler.common.utils.LoggerUtils;
-import org.apache.dolphinscheduler.common.utils.OSUtils;
 import org.apache.dolphinscheduler.common.utils.StringUtils;
-import org.apache.dolphinscheduler.common.utils.process.ProcessBuilderForWin32;
+import org.apache.dolphinscheduler.common.utils.LoggerUtils;
 import org.apache.dolphinscheduler.server.entity.TaskExecutionContext;
 import org.apache.dolphinscheduler.server.utils.ProcessUtils;
 import org.apache.dolphinscheduler.server.worker.cache.TaskExecutionContextCacheManager;
 import org.apache.dolphinscheduler.server.worker.cache.impl.TaskExecutionContextCacheManagerImpl;
 import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
+
 import org.slf4j.Logger;
 
 import java.io.*;
 import java.lang.reflect.Field;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import static org.apache.dolphinscheduler.common.Constants.EXIT_CODE_FAILURE;
-import static org.apache.dolphinscheduler.common.Constants.EXIT_CODE_SUCCESS;
+import static org.apache.dolphinscheduler.common.Constants.*;
 
 /**
  * abstract command executor
@@ -106,51 +99,26 @@ public abstract class AbstractCommandExecutor {
      * @throws IOException IO Exception
      */
     private void buildProcess(String commandFile) throws IOException {
+        //init process builder
+        ProcessBuilder processBuilder = new ProcessBuilder();
+        // setting up a working directory
+        processBuilder.directory(new File(taskExecutionContext.getExecutePath()));
+        // merge error information to standard output stream
+        processBuilder.redirectErrorStream(true);
         // setting up user to run commands
         List<String> command = new LinkedList<>();
+        command.add("sudo");
+        command.add("-u");
+        command.add(taskExecutionContext.getTenantCode());
+        command.add(commandInterpreter());
+        command.addAll(commandOptions());
+        command.add(commandFile);
+        processBuilder.command(command);
 
-        if (OSUtils.isWindows()) {
-            //init process builder
-            ProcessBuilderForWin32 processBuilder = new ProcessBuilderForWin32();
-            // setting up a working directory
-            processBuilder.directory(new File(taskExecutionContext.getExecutePath()));
-            // setting up a username and password
-            processBuilder.user(taskExecutionContext.getTenantCode(), StringUtils.EMPTY);
-            // merge error information to standard output stream
-            processBuilder.redirectErrorStream(true);
-
-            // setting up user to run commands
-            command.add(commandInterpreter());
-            command.add("/c");
-            command.addAll(commandOptions());
-            command.add(commandFile);
-
-            // setting commands
-            processBuilder.command(command);
-            process = processBuilder.start();
-        } else {
-            //init process builder
-            ProcessBuilder processBuilder = new ProcessBuilder();
-            // setting up a working directory
-            processBuilder.directory(new File(taskExecutionContext.getExecutePath()));
-            // merge error information to standard output stream
-            processBuilder.redirectErrorStream(true);
-
-            // setting up user to run commands
-            command.add("sudo");
-            command.add("-u");
-            command.add(taskExecutionContext.getTenantCode());
-            command.add(commandInterpreter());
-            command.addAll(commandOptions());
-            command.add(commandFile);
-
-            // setting commands
-            processBuilder.command(command);
-            process = processBuilder.start();
-        }
+        process = processBuilder.start();
 
         // print command
-        printCommand(command);
+        printCommand(processBuilder);
     }
 
     /**
@@ -302,13 +270,13 @@ public abstract class AbstractCommandExecutor {
 
     /**
      * print command
-     * @param commands process builder
+     * @param processBuilder process builder
      */
-    private void printCommand(List<String> commands) {
+    private void printCommand(ProcessBuilder processBuilder) {
         String cmdStr;
 
         try {
-            cmdStr = ProcessUtils.buildCommandStr(commands);
+            cmdStr = ProcessUtils.buildCommandStr(processBuilder.command());
             logger.info("task run command:\n{}", cmdStr);
         } catch (IOException e) {
             logger.error(e.getMessage(), e);
@@ -497,12 +465,7 @@ public abstract class AbstractCommandExecutor {
             Field f = process.getClass().getDeclaredField(Constants.PID);
             f.setAccessible(true);
 
-            if (OSUtils.isWindows()) {
-                WinNT.HANDLE handle = (WinNT.HANDLE) f.get(process);
-                processId = Kernel32.INSTANCE.GetProcessId(handle);
-            } else {
-                processId = f.getInt(process);
-            }
+            processId = f.getInt(process);
         } catch (Throwable e) {
             logger.error(e.getMessage(), e);
         }
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/ShellCommandExecutor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/ShellCommandExecutor.java
index 5e297ab..2141810 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/ShellCommandExecutor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/ShellCommandExecutor.java
@@ -17,8 +17,8 @@
 package org.apache.dolphinscheduler.server.worker.task;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.dolphinscheduler.common.utils.OSUtils;
 import org.apache.dolphinscheduler.server.entity.TaskExecutionContext;
+import org.apache.dolphinscheduler.common.utils.OSUtils;
 import org.slf4j.Logger;
 
 import java.io.File;
@@ -60,10 +60,7 @@ public class ShellCommandExecutor extends AbstractCommandExecutor {
     @Override
     protected String buildCommandFilePath() {
         // command file
-        return String.format("%s/%s.%s"
-                , taskExecutionContext.getExecutePath()
-                , taskExecutionContext.getTaskAppId()
-                , OSUtils.isWindows() ? "bat" : "command");
+        return String.format("%s/%s.command", taskExecutionContext.getExecutePath(), taskExecutionContext.getTaskAppId());
     }
 
     /**
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/datax/DataxTask.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/datax/DataxTask.java
index 6d701a0..a14a5d6 100755
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/datax/DataxTask.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/datax/DataxTask.java
@@ -28,8 +28,6 @@ import org.apache.commons.io.FileUtils;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.CommandType;
 import org.apache.dolphinscheduler.common.enums.DbType;
-import org.apache.dolphinscheduler.common.enums.Flag;
-import org.apache.dolphinscheduler.common.enums.Flag;
 import org.apache.dolphinscheduler.common.process.Property;
 import org.apache.dolphinscheduler.common.task.AbstractParameters;
 import org.apache.dolphinscheduler.common.task.datax.DataxParameters;
@@ -134,16 +132,9 @@ public class DataxTask extends AbstractTask {
             String threadLoggerInfoName = String.format("TaskLogInfo-%s", taskExecutionContext.getTaskAppId());
             Thread.currentThread().setName(threadLoggerInfoName);
 
-            // combining local and global parameters
-            Map<String, Property> paramsMap = ParamUtils.convert(ParamUtils.getUserDefParamsMap(taskExecutionContext.getDefinedParams()),
-                    taskExecutionContext.getDefinedParams(),
-                    dataXParameters.getLocalParametersMap(),
-                    CommandType.of(taskExecutionContext.getCmdTypeIfComplement()),
-                    taskExecutionContext.getScheduleTime());
-
-            // run datax procesDataSourceService.s
-            String jsonFilePath = buildDataxJsonFile(paramsMap);
-            String shellCommandFilePath = buildShellCommandFile(jsonFilePath, paramsMap);
+            // run datax process
+            String jsonFilePath = buildDataxJsonFile();
+            String shellCommandFilePath = buildShellCommandFile(jsonFilePath);
             CommandExecuteResult commandExecuteResult = shellCommandExecutor.run(shellCommandFilePath);
 
             setExitStatusCode(commandExecuteResult.getExitStatusCode());
@@ -176,7 +167,7 @@ public class DataxTask extends AbstractTask {
      * @return datax json file name
      * @throws Exception if error throws Exception
      */
-    private String buildDataxJsonFile(Map<String, Property> paramsMap)
+    private String buildDataxJsonFile()
             throws Exception {
         // generate json
         String fileName = String.format("%s/%s_job.json",
@@ -189,22 +180,36 @@ public class DataxTask extends AbstractTask {
             return fileName;
         }
 
-        if (dataXParameters.getCustomConfig() == Flag.YES.ordinal()){
+
+
+        if (dataXParameters.getCustomConfig() == 1){
+
             json = dataXParameters.getJson().replaceAll("\\r\\n", "\n");
+
+            /**
+             *  combining local and global parameters
+             */
+            Map<String, Property> paramsMap = ParamUtils.convert(ParamUtils.getUserDefParamsMap(taskExecutionContext.getDefinedParams()),
+                    taskExecutionContext.getDefinedParams(),
+                    dataXParameters.getLocalParametersMap(),
+                    CommandType.of(taskExecutionContext.getCmdTypeIfComplement()),
+                    taskExecutionContext.getScheduleTime());
+            if (paramsMap != null){
+                json = ParameterUtils.convertParameterPlaceholders(json, ParamUtils.convert(paramsMap));
+            }
+
         }else {
             ObjectNode job = JSONUtils.createObjectNode();
             job.putArray("content").addAll(buildDataxJobContentJson());
             job.set("setting", buildDataxJobSettingJson());
 
             ObjectNode root = JSONUtils.createObjectNode();
+
             root.set("job", job);
             root.set("core", buildDataxCoreJson());
             json = root.toString();
         }
 
-        // replace placeholder
-        json = ParameterUtils.convertParameterPlaceholders(json, ParamUtils.convert(paramsMap));
-
         logger.debug("datax job json : {}", json);
 
         // create datax json file
@@ -367,13 +372,12 @@ public class DataxTask extends AbstractTask {
      * @return shell command file name
      * @throws Exception if error throws Exception
      */
-    private String buildShellCommandFile(String jobConfigFilePath, Map<String, Property> paramsMap)
-        throws Exception {
+    private String buildShellCommandFile(String jobConfigFilePath)
+            throws Exception {
         // generate scripts
-        String fileName = String.format("%s/%s_node.%s",
+        String fileName = String.format("%s/%s_node.sh",
                 taskExecutionContext.getExecutePath(),
-                taskExecutionContext.getTaskAppId(),
-                OSUtils.isWindows() ? "bat" : "sh");
+                taskExecutionContext.getTaskAppId());
 
         Path path = new File(fileName).toPath();
 
@@ -388,9 +392,18 @@ public class DataxTask extends AbstractTask {
         sbr.append(DATAX_HOME_EVN);
         sbr.append(" ");
         sbr.append(jobConfigFilePath);
+        String dataxCommand = sbr.toString();
 
+        // combining local and global parameters
         // replace placeholder
-        String dataxCommand = ParameterUtils.convertParameterPlaceholders(sbr.toString(), ParamUtils.convert(paramsMap));
+        Map<String, Property> paramsMap = ParamUtils.convert(ParamUtils.getUserDefParamsMap(taskExecutionContext.getDefinedParams()),
+                taskExecutionContext.getDefinedParams(),
+                dataXParameters.getLocalParametersMap(),
+                CommandType.of(taskExecutionContext.getCmdTypeIfComplement()),
+                taskExecutionContext.getScheduleTime());
+        if (paramsMap != null) {
+            dataxCommand = ParameterUtils.convertParameterPlaceholders(dataxCommand, ParamUtils.convert(paramsMap));
+        }
 
         logger.debug("raw script : {}", dataxCommand);
 
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/shell/ShellTask.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/shell/ShellTask.java
index b805939..d846d5f 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/shell/ShellTask.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/shell/ShellTask.java
@@ -116,7 +116,7 @@ public class ShellTask extends AbstractTask {
    */
   private String buildCommand() throws Exception {
     // generate scripts
-    String fileName = String.format("%s/%s_node.%s",
+    String fileName = String.format("%s/%s_node.sh",
             taskExecutionContext.getExecutePath(),
             taskExecutionContext.getTaskAppId(), OSUtils.isWindows() ? "bat" : "sh");
 
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sql/SqlTask.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sql/SqlTask.java
index c30ca23..4781143 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sql/SqlTask.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sql/SqlTask.java
@@ -178,7 +178,7 @@ public class SqlTask extends AbstractTask {
         }
         //new
         //replace variable TIME with $[YYYYmmddd...] in sql when history run job and batch complement job
-        sql = ParameterUtils.replaceScheduleTime(sql, taskExecutionContext.getScheduleTime());
+        sql = ParameterUtils.replaceScheduleTime(sql, taskExecutionContext.getScheduleTime(), paramsMap);
         // special characters need to be escaped, ${} needs to be escaped
         String rgex = "['\"]*\\$\\{(.*?)\\}['\"]*";
         setSqlParamsMap(sql, rgex, sqlParamsMap, paramsMap);
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sqoop/generator/sources/MysqlSourceGenerator.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sqoop/generator/sources/MysqlSourceGenerator.java
index 47430d1..f4d0a67 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sqoop/generator/sources/MysqlSourceGenerator.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sqoop/generator/sources/MysqlSourceGenerator.java
@@ -91,7 +91,7 @@ public class MysqlSourceGenerator implements ISourceGenerator {
 
                         if(StringUtils.isNotEmpty(columnMap.toString())){
                             result.append(" --map-column-hive ")
-                                    .append(columnMap.substring(0,columnMap.length() - 1));
+                                    .append(columnMap.substring(0,columnMap.length()-1));
                         }
                     }
 
@@ -105,7 +105,7 @@ public class MysqlSourceGenerator implements ISourceGenerator {
 
                         if(StringUtils.isNotEmpty(columnMap.toString())){
                             result.append(" --map-column-java ")
-                                    .append(columnMap.substring(0,columnMap.length() - 1));
+                                    .append(columnMap.substring(0,columnMap.length()-1));
                         }
                     }
                 }
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/zk/ZKMasterClient.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/zk/ZKMasterClient.java
index 686d73d..69aecee 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/zk/ZKMasterClient.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/zk/ZKMasterClient.java
@@ -262,7 +262,7 @@ public class ZKMasterClient extends AbstractZKClient {
 		Date workerServerStartDate = null;
 		List<Server> workerServers = getServersList(ZKNodeType.WORKER);
 		for(Server workerServer : workerServers){
-		    if(taskInstance.getHost().equals(workerServer.getHost() + Constants.COLON + workerServer.getPort())){
+			if(workerServer.getHost().equals(taskInstance.getHost())){
 				workerServerStartDate = workerServer.getCreateTime();
 				break;
 			}
@@ -335,9 +335,6 @@ public class ZKMasterClient extends AbstractZKClient {
 
 		//updateProcessInstance host is null and insert into command
 		for(ProcessInstance processInstance : needFailoverProcessInstanceList){
-			if(Constants.NULL.equals(processInstance.getHost()) ){
-			    continue;
-			}
 			processService.processNeedFailoverProcessInstances(processInstance);
 		}
 
diff --git a/dolphinscheduler-server/src/main/resources/config/install_config.conf b/dolphinscheduler-server/src/main/resources/config/install_config.conf
index eeff030..fab6b32 100644
--- a/dolphinscheduler-server/src/main/resources/config/install_config.conf
+++ b/dolphinscheduler-server/src/main/resources/config/install_config.conf
@@ -64,15 +64,16 @@ mailUser="xxxxxxxxxx"
 mailPassword="xxxxxxxxxx"
 
 # TLS mail protocol support
-starttlsEnable="true"
-
-# SSL mail protocol support
-# only one of TLS and SSL can be in the true state.
-sslEnable="false"
+starttlsEnable="false"
 
 #note: sslTrust is the same as mailServerHost
 sslTrust="smtp.exmail.qq.com"
 
+# SSL mail protocol support
+# note: The SSL protocol is enabled by default.
+# only one of TLS and SSL can be in the true state.
+sslEnable="true"
+
 
 # resource storage type:HDFS,S3,NONE
 resourceStorageType="NONE"
@@ -87,11 +88,11 @@ s3Endpoint="http://192.168.xx.xx:9010"
 s3AccessKey="xxxxxxxxxx"
 s3SecretKey="xxxxxxxxxx"
 
-# if resourcemanager HA enable, please type the HA ips ; if resourcemanager is single, make this value empty
+# if not use hadoop resourcemanager, please keep default value; if resourcemanager HA enable, please type the HA ips ; if resourcemanager is single, make this value empty
 yarnHaIps="192.168.xx.xx,192.168.xx.xx"
 
-# if resourcemanager HA enable or not use resourcemanager, please skip this value setting; If resourcemanager is single, you only need to replace yarnIp1 to actual resourcemanager hostname.
-singleYarnIp="yarnIp1"
+# if resourcemanager HA enable or not use resourcemanager, please keep the default value; If resourcemanager is single, you only need to replace ark1 to actual resourcemanager hostname.
+singleYarnIp="ark1"
 
 # resource store on HDFS/S3 path, resource file will store to this hadoop hdfs path, self configuration, please make sure the directory exists on hdfs and have read write permissions。/dolphinscheduler is recommended
 resourceUploadPath="/dolphinscheduler"
@@ -117,7 +118,7 @@ apiServerPort="12345"
 
 # install hosts
 # Note: install the scheduled hostname list. If it is pseudo-distributed, just write a pseudo-distributed hostname
-ips="ds1,ds2,ds3,ds4,ds5"
+ips="ark0,ark1,ark2,ark3,ark4"
 
 # ssh port, default 22
 # Note: if ssh port is not default, modify here
@@ -125,16 +126,19 @@ sshPort="22"
 
 # run master machine
 # Note: list of hosts hostname for deploying master
-masters="ds1,ds2"
+masters="ark0,ark1"
 
 # run worker machine
-# note: need to write the worker group name of each worker, the default value is "default"
-workers="ds1:default,ds2:default,ds3:default,ds4:default,ds5:default"
+# note: list of machine hostnames for deploying workers
+workers="ark2,ark3,ark4"
 
 # run alert machine
 # note: list of machine hostnames for deploying alert server
-alertServer="ds3"
+alertServer="ark3"
 
 # run api machine
 # note: list of machine hostnames for deploying api server
-apiServers="ds1"
\ No newline at end of file
+apiServers="ark1"
+
+# whether to start monitoring self-starting scripts
+monitorServerState="false"
diff --git a/dolphinscheduler-server/src/main/resources/master.properties b/dolphinscheduler-server/src/main/resources/master.properties
index 44301fb..2f75aa5 100644
--- a/dolphinscheduler-server/src/main/resources/master.properties
+++ b/dolphinscheduler-server/src/main/resources/master.properties
@@ -21,10 +21,6 @@
 # master execute task number in parallel
 #master.exec.task.num=20
 
-
-# master dispatch task number
-#master.dispatch.task.num = 3
-
 # master heartbeat interval
 #master.heartbeat.interval=10
 
@@ -35,8 +31,8 @@
 #master.task.commit.interval=1000
 
 
-# only less than cpu avg load, master server can work.  default value -1 : the number of cpu cores * 2
-#master.max.cpuload.avg=-1
+# only less than cpu avg load, master server can work. default value : the number of cpu cores * 2
+#master.max.cpuload.avg=100
 
 # only larger than reserved memory, master server can work. default value : physical memory * 1/10, unit is G.
 #master.reserved.memory=0.3
diff --git a/dolphinscheduler-server/src/main/resources/worker.properties b/dolphinscheduler-server/src/main/resources/worker.properties
index eb01bbb..d078f26 100644
--- a/dolphinscheduler-server/src/main/resources/worker.properties
+++ b/dolphinscheduler-server/src/main/resources/worker.properties
@@ -21,8 +21,11 @@
 # worker heartbeat interval
 #worker.heartbeat.interval=10
 
-# only less than cpu avg load, worker server can work. default value -1: the number of cpu cores * 2
-#worker.max.cpuload.avg= -1
+# submit the number of tasks at a time
+#worker.fetch.task.num = 3
+
+# only less than cpu avg load, worker server can work. default value : the number of cpu cores * 2
+#worker.max.cpuload.avg=100
 
 # only larger than reserved memory, worker server can work. default value : physical memory * 1/6, unit is G.
 #worker.reserved.memory=0.3
@@ -31,4 +34,4 @@
 #worker.listen.port: 1234
 
 # default worker group
-worker.group=default
\ No newline at end of file
+#worker.group=default
\ No newline at end of file
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/log/LoggerServerTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/log/LoggerServerTest.java
deleted file mode 100644
index 0da8874..0000000
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/log/LoggerServerTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.server.log;
-
-import org.apache.dolphinscheduler.common.Constants;
-import org.apache.dolphinscheduler.service.log.LogClientService;
-import org.junit.Test;
-
-public class LoggerServerTest {
-
-
-    @Test
-    public void testRollViewLog(){
-        LoggerServer loggerServer = new LoggerServer();
-        loggerServer.start();
-
-        LogClientService logClientService = new LogClientService();
-        logClientService.rollViewLog("localhost", Constants.RPC_PORT,"/opt/demo.txt",0,1000);
-
-        try {
-            Thread.sleep(5000);
-        } catch (InterruptedException e) {
-
-        }
-
-        loggerServer.stop();
-        logClientService.close();
-    }
-
-    @Test
-    public void testRemoveTaskLog(){
-        LoggerServer loggerServer = new LoggerServer();
-        loggerServer.start();
-
-        LogClientService logClientService = new LogClientService();
-        logClientService.removeTaskLog("localhost", Constants.RPC_PORT,"/opt/zhangsan");
-
-        try {
-            Thread.sleep(5000);
-        } catch (InterruptedException e) {
-
-        }
-
-        loggerServer.stop();
-        logClientService.close();
-    }
-}
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/DependentTaskTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/DependentTaskTest.java
index 66bc3af..a65b050 100644
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/DependentTaskTest.java
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/DependentTaskTest.java
@@ -94,12 +94,11 @@ public class DependentTaskTest {
     }
 
     @Test
-    public void testDependAll() throws Exception{
+    public void test() throws Exception{
 
         TaskInstance taskInstance = getTaskInstance();
         String dependString = "{\"dependTaskList\":[{\"dependItemList\":[{\"dateValue\":\"today\",\"depTasks\":\"ALL\",\"projectId\":1,\"definitionList\":[{\"label\":\"C\",\"value\":4},{\"label\":\"B\",\"value\":3},{\"label\":\"A\",\"value\":2}],\"cycle\":\"day\",\"definitionId\":4}],\"relation\":\"AND\"}],\"relation\":\"AND\"}";
         taskInstance.setDependency(dependString);
-
         Mockito.when(processService.submitTask(taskInstance))
                 .thenReturn(taskInstance);
         DependentTaskExecThread dependentTask =
@@ -108,54 +107,6 @@ public class DependentTaskTest {
         dependentTask.call();
 
         Assert.assertEquals(ExecutionStatus.SUCCESS, dependentTask.getTaskInstance().getState());
-
-        DateInterval dateInterval =DependentDateUtils.getTodayInterval(new Date()).get(0);
-
-
-        Mockito.when(processService
-                .findLastRunningProcess(4, dateInterval.getStartTime(),
-                        dateInterval.getEndTime()))
-                .thenReturn(findLastStopProcessInterval());
-        DependentTaskExecThread dependentFailure = new DependentTaskExecThread(taskInstance);
-        dependentFailure.call();
-        Assert.assertEquals(ExecutionStatus.FAILURE, dependentFailure.getTaskInstance().getState());
-    }
-
-    @Test
-    public void testDependTask() throws Exception{
-
-        TaskInstance taskInstance = getTaskInstance();
-        String dependString = "{\"dependTaskList\":[{\"dependItemList\":[{\"dateValue\":\"today\",\"depTasks\":\"D\",\"projectId\":1,\"definitionList\":[{\"label\":\"C\",\"value\":4},{\"label\":\"B\",\"value\":3},{\"label\":\"A\",\"value\":2}],\"cycle\":\"day\",\"definitionId\":4}],\"relation\":\"AND\"}],\"relation\":\"AND\"}";
-        taskInstance.setDependency(dependString);
-        Mockito.when(processService.submitTask(taskInstance))
-                .thenReturn(taskInstance);
-        DependentTaskExecThread dependentTask =
-                new DependentTaskExecThread(taskInstance);
-
-        dependentTask.call();
-
-        Assert.assertEquals(ExecutionStatus.SUCCESS, dependentTask.getTaskInstance().getState());
-
-        DateInterval dateInterval =DependentDateUtils.getTodayInterval(new Date()).get(0);
-        Mockito.when(processService
-                .findLastRunningProcess(4, dateInterval.getStartTime(),
-                        dateInterval.getEndTime()))
-                .thenReturn(findLastStopProcessInterval());
-
-        Mockito.when(processService
-                .findValidTaskListByProcessId(11))
-                .thenReturn(getErrorTaskInstances());
-        DependentTaskExecThread dependentFailure = new DependentTaskExecThread(taskInstance);
-        dependentFailure.call();
-        Assert.assertEquals(ExecutionStatus.FAILURE, dependentFailure.getTaskInstance().getState());
-    }
-
-    private ProcessInstance findLastStopProcessInterval(){
-        ProcessInstance processInstance = new ProcessInstance();
-        processInstance.setId(11);
-        processInstance.setProcessDefinitionId(4);
-        processInstance.setState(ExecutionStatus.STOP);
-        return  processInstance;
     }
 
     private ProcessInstance findLastProcessInterval(){
@@ -191,20 +142,10 @@ public class DependentTaskTest {
         return list;
     }
 
-    private List<TaskInstance> getErrorTaskInstances(){
-        List<TaskInstance> list = new ArrayList<>();
-        TaskInstance taskInstance = new TaskInstance();
-        taskInstance.setName("C");
-        taskInstance.setState(ExecutionStatus.SUCCESS);
-        taskInstance.setDependency("1231");
-        list.add(taskInstance);
-        return list;
-    }
-
     private List<TaskInstance> getTaskInstances(){
         List<TaskInstance> list = new ArrayList<>();
         TaskInstance taskInstance = new TaskInstance();
-        taskInstance.setName("D");
+        taskInstance.setName("C");
         taskInstance.setState(ExecutionStatus.SUCCESS);
         taskInstance.setDependency("1231");
         list.add(taskInstance);
@@ -217,7 +158,6 @@ public class DependentTaskTest {
         taskInstance.setId(252612);
         taskInstance.setName("C");
         taskInstance.setProcessInstanceId(10111);
-        taskInstance.setState(ExecutionStatus.SUBMITTED_SUCCESS);
         return taskInstance;
     }
 
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumerTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumerTest.java
index beefedb..b2a48d4 100644
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumerTest.java
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumerTest.java
@@ -22,7 +22,6 @@ import org.apache.dolphinscheduler.common.enums.DbType;
 import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
 import org.apache.dolphinscheduler.common.enums.Priority;
 import org.apache.dolphinscheduler.dao.entity.*;
-import org.apache.dolphinscheduler.server.master.config.MasterConfig;
 import org.apache.dolphinscheduler.server.master.dispatch.ExecutorDispatcher;
 import org.apache.dolphinscheduler.server.master.dispatch.executor.NettyExecutorManager;
 import org.apache.dolphinscheduler.server.registry.DependencyConfig;
@@ -48,7 +47,7 @@ import java.util.Date;
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(classes={DependencyConfig.class, SpringApplicationContext.class, SpringZKServer.class,
         NettyExecutorManager.class, ExecutorDispatcher.class, ZookeeperRegistryCenter.class, TaskPriorityQueueConsumer.class,
-        ZookeeperNodeManager.class, ZookeeperCachedOperator.class, ZookeeperConfig.class, MasterConfig.class})
+        ZookeeperNodeManager.class, ZookeeperCachedOperator.class, ZookeeperConfig.class})
 public class TaskPriorityQueueConsumerTest {
 
 
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/registry/MasterRegistryTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/registry/MasterRegistryTest.java
index 9d90f20..a482029 100644
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/registry/MasterRegistryTest.java
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/registry/MasterRegistryTest.java
@@ -33,7 +33,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-import static org.apache.dolphinscheduler.common.Constants.HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH;
+
 /**
  * master registry test
  */
@@ -57,7 +57,7 @@ public class MasterRegistryTest {
         TimeUnit.SECONDS.sleep(masterConfig.getMasterHeartbeatInterval() + 2); //wait heartbeat info write into zk node
         String masterNodePath = masterPath + "/" + (Constants.LOCAL_ADDRESS + ":" + masterConfig.getListenPort());
         String heartbeat = zookeeperRegistryCenter.getZookeeperCachedOperator().get(masterNodePath);
-        Assert.assertEquals(HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH, heartbeat.split(",").length);
+        Assert.assertEquals(5, heartbeat.split(",").length);
     }
 
     @Test
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/runner/MasterTaskExecThreadTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/runner/MasterTaskExecThreadTest.java
index 83095a3..ebddec4 100644
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/runner/MasterTaskExecThreadTest.java
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/runner/MasterTaskExecThreadTest.java
@@ -17,8 +17,8 @@
 
 package org.apache.dolphinscheduler.server.master.runner;
 
-import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
-import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import junit.framework.Assert;
+import org.apache.dolphinscheduler.server.master.config.MasterConfig;
 import org.apache.dolphinscheduler.server.master.consumer.TaskPriorityQueueConsumer;
 import org.apache.dolphinscheduler.server.master.dispatch.ExecutorDispatcher;
 import org.apache.dolphinscheduler.server.master.dispatch.executor.NettyExecutorManager;
@@ -27,13 +27,12 @@ import org.apache.dolphinscheduler.server.registry.ZookeeperNodeManager;
 import org.apache.dolphinscheduler.server.registry.ZookeeperRegistryCenter;
 import org.apache.dolphinscheduler.server.zk.SpringZKServer;
 import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
-import org.apache.dolphinscheduler.service.process.ProcessService;
+import org.apache.dolphinscheduler.service.queue.TaskPriorityQueueImpl;
 import org.apache.dolphinscheduler.service.zk.ZookeeperCachedOperator;
 import org.apache.dolphinscheduler.service.zk.ZookeeperConfig;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
-import org.springframework.context.ApplicationContext;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
@@ -43,10 +42,9 @@ import java.util.Set;
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(classes={DependencyConfig.class, SpringApplicationContext.class, SpringZKServer.class,
         NettyExecutorManager.class, ExecutorDispatcher.class, ZookeeperRegistryCenter.class, TaskPriorityQueueConsumer.class,
-        ZookeeperNodeManager.class, ZookeeperCachedOperator.class, ZookeeperConfig.class})
+        ZookeeperNodeManager.class, ZookeeperCachedOperator.class, ZookeeperConfig.class, MasterConfig.class})
 public class MasterTaskExecThreadTest {
 
-
     @Test
     public void testExistsValidWorkerGroup1(){
         ZookeeperRegistryCenter zookeeperRegistryCenter = Mockito.mock(ZookeeperRegistryCenter.class);
@@ -78,36 +76,5 @@ public class MasterTaskExecThreadTest {
         masterTaskExecThread.existsValidWorkerGroup("test1");
     }
 
-    @Test
-    public void testPauseTask(){
-
-
-        ProcessService processService = Mockito.mock(ProcessService.class);
-        ApplicationContext applicationContext = Mockito.mock(ApplicationContext.class);
-        SpringApplicationContext springApplicationContext = new SpringApplicationContext();
-        springApplicationContext.setApplicationContext(applicationContext);
-        Mockito.when(applicationContext.getBean(ProcessService.class)).thenReturn(processService);
-
-        TaskInstance taskInstance = getTaskInstance();
-        Mockito.when(processService.findTaskInstanceById(252612))
-                .thenReturn(taskInstance);
-
-        Mockito.when(processService.updateTaskInstance(taskInstance))
-        .thenReturn(true);
-
-        MasterTaskExecThread masterTaskExecThread = new MasterTaskExecThread(taskInstance);
-        masterTaskExecThread.pauseTask();
-        org.junit.Assert.assertEquals(ExecutionStatus.PAUSE, taskInstance.getState());
-    }
-
-    private TaskInstance getTaskInstance(){
-        TaskInstance taskInstance = new TaskInstance();
-        taskInstance.setTaskType("SHELL");
-        taskInstance.setId(252612);
-        taskInstance.setName("C");
-        taskInstance.setProcessInstanceId(10111);
-        taskInstance.setState(ExecutionStatus.SUBMITTED_SUCCESS);
-        return taskInstance;
-    }
 
 }
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/registry/DependencyConfig.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/registry/DependencyConfig.java
index 30f1053..e0c4188 100644
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/registry/DependencyConfig.java
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/registry/DependencyConfig.java
@@ -20,7 +20,6 @@ package org.apache.dolphinscheduler.server.registry;
 import org.apache.dolphinscheduler.dao.AlertDao;
 import org.apache.dolphinscheduler.dao.mapper.*;
 import org.apache.dolphinscheduler.server.master.cache.impl.TaskInstanceCacheManagerImpl;
-import org.apache.dolphinscheduler.server.master.config.MasterConfig;
 import org.apache.dolphinscheduler.server.master.dispatch.ExecutorDispatcher;
 import org.apache.dolphinscheduler.server.master.dispatch.host.HostManager;
 import org.apache.dolphinscheduler.server.master.dispatch.host.RandomHostManager;
@@ -65,10 +64,6 @@ public class DependencyConfig {
     }
 
     @Bean
-    public MasterConfig masterConfig(){
-        return Mockito.mock(MasterConfig.class);
-    }
-    @Bean
     public UserMapper userMapper(){
         return Mockito.mock(UserMapper.class);
     }
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackServiceTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackServiceTest.java
index d09d399..e064f4c 100644
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackServiceTest.java
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackServiceTest.java
@@ -42,7 +42,6 @@ import org.apache.dolphinscheduler.server.zk.SpringZKServer;
 import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
 import org.apache.dolphinscheduler.service.zk.ZookeeperCachedOperator;
 import org.apache.dolphinscheduler.service.zk.ZookeeperConfig;
-import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
@@ -50,7 +49,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
-import java.io.IOException;
 import java.util.Date;
 
 /**
@@ -112,8 +110,12 @@ public class TaskCallbackServiceTest {
         ackCommand.setStartTime(new Date());
         taskCallbackService.sendAck(1, ackCommand.convert2Command());
 
+        Thread.sleep(5000);
+
         Stopper.stop();
 
+        Thread.sleep(5000);
+
         nettyRemotingServer.close();
         nettyRemotingClient.close();
     }
@@ -157,13 +159,8 @@ public class TaskCallbackServiceTest {
         Stopper.stop();
     }
 
-    @Test
-    public void testPause(){
-        Assert.assertEquals(5000, taskCallbackService.pause(3));;
-    }
-
-    @Test
-    public void testSendAck1(){
+    @Test(expected = IllegalStateException.class)
+    public void testSendAckWithIllegalStateException1(){
         masterRegistry.registry();
         final NettyServerConfig serverConfig = new NettyServerConfig();
         serverConfig.setListenPort(30000);
@@ -175,20 +172,27 @@ public class TaskCallbackServiceTest {
         NettyRemotingClient nettyRemotingClient = new NettyRemotingClient(clientConfig);
         Channel channel = nettyRemotingClient.getChannel(Host.of("localhost:30000"));
         taskCallbackService.addRemoteChannel(1, new NettyRemoteChannel(channel, 1));
-//        channel.close();
-
+        channel.close();
         TaskExecuteAckCommand ackCommand = new TaskExecuteAckCommand();
         ackCommand.setTaskInstanceId(1);
         ackCommand.setStartTime(new Date());
 
-        taskCallbackService.sendAck(1, ackCommand.convert2Command());
+        nettyRemotingServer.close();
 
-        Assert.assertEquals(true, channel.isOpen());
+        taskCallbackService.sendAck(1, ackCommand.convert2Command());
+        try {
+            Thread.sleep(5000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
 
         Stopper.stop();
 
-        nettyRemotingServer.close();
-        nettyRemotingClient.close();
+        try {
+            Thread.sleep(5000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
     }
 
     @Test
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/registry/WorkerRegistryTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/registry/WorkerRegistryTest.java
index 6ecff51..d5f836e 100644
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/registry/WorkerRegistryTest.java
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/registry/WorkerRegistryTest.java
@@ -36,8 +36,6 @@ import java.util.concurrent.TimeUnit;
 
 import static org.apache.dolphinscheduler.common.Constants.DEFAULT_WORKER_GROUP;
 
-
-import static org.apache.dolphinscheduler.common.Constants.HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH;
 /**
  * worker registry test
  */
@@ -63,7 +61,7 @@ public class WorkerRegistryTest {
         String instancePath = workerPath + "/" + workerConfig.getWorkerGroup().trim() + "/" + (OSUtils.getHost() + ":" + workerConfig.getListenPort());
         TimeUnit.SECONDS.sleep(workerConfig.getWorkerHeartbeatInterval() + 2); //wait heartbeat info write into zk node
         String heartbeat = zookeeperRegistryCenter.getZookeeperCachedOperator().get(instancePath);
-        Assert.assertEquals(HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH, heartbeat.split(",").length);
+        Assert.assertEquals(5, heartbeat.split(",").length);
     }
 
     @Test
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/datax/DataxTaskTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/datax/DataxTaskTest.java
index e5177aa..6c3cad5 100644
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/datax/DataxTaskTest.java
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/datax/DataxTaskTest.java
@@ -21,7 +21,6 @@ import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 
 import com.fasterxml.jackson.databind.JsonNode;
diff --git a/dolphinscheduler-service/pom.xml b/dolphinscheduler-service/pom.xml
index 1b5b953..c150e83 100644
--- a/dolphinscheduler-service/pom.xml
+++ b/dolphinscheduler-service/pom.xml
@@ -20,7 +20,7 @@
     <parent>
         <artifactId>dolphinscheduler</artifactId>
         <groupId>org.apache.dolphinscheduler</groupId>
-        <version>1.3.0-SNAPSHOT</version>
+        <version>1.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -72,27 +72,5 @@
             <groupId>org.quartz-scheduler</groupId>
             <artifactId>quartz-jobs</artifactId>
         </dependency>
-
-        <dependency>
-            <groupId>org.powermock</groupId>
-            <artifactId>powermock-module-junit4</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.powermock</groupId>
-            <artifactId>powermock-api-mockito2</artifactId>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.mockito</groupId>
-                    <artifactId>mockito-core</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-core</artifactId>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 </project>
diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/log/LogClientService.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/log/LogClientService.java
index 92d38d4..c4fe447 100644
--- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/log/LogClientService.java
+++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/log/LogClientService.java
@@ -16,7 +16,6 @@
  */
 package org.apache.dolphinscheduler.service.log;
 
-import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.remote.NettyRemotingClient;
 import org.apache.dolphinscheduler.remote.command.Command;
 import org.apache.dolphinscheduler.remote.command.log.*;
@@ -145,33 +144,4 @@ public class LogClientService {
         }
         return result;
     }
-
-
-    /**
-     * remove task log
-     * @param host host
-     * @param port port
-     * @param path path
-     * @return remove task status
-     */
-    public Boolean removeTaskLog(String host, int port, String path) {
-        logger.info("log path {}", path);
-        RemoveTaskLogRequestCommand request = new RemoveTaskLogRequestCommand(path);
-        Boolean result = false;
-        final Host address = new Host(host, port);
-        try {
-            Command command = request.convert2Command();
-            Command response = this.client.sendSync(address, command, LOG_REQUEST_TIMEOUT);
-            if(response != null){
-                RemoveTaskLogResponseCommand taskLogResponse = JsonSerializer.deserialize(
-                        response.getBody(), RemoveTaskLogResponseCommand.class);
-                return taskLogResponse.getStatus();
-            }
-        } catch (Exception e) {
-            logger.error("remove task log error", e);
-        } finally {
-            this.client.closeChannel(address);
-        }
-        return result;
-    }
 }
\ No newline at end of file
diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/permission/PermissionCheck.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/permission/PermissionCheck.java
index 1a9295b..9f93f4c 100644
--- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/permission/PermissionCheck.java
+++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/permission/PermissionCheck.java
@@ -174,10 +174,6 @@ public class PermissionCheck<T> {
 
             // get user type in order to judge whether the user is admin
             User user = processService.getUserById(userId);
-            if (user == null) {
-                logger.error("user id {} didn't exist",userId);
-                throw new RuntimeException(String.format("user %s didn't exist",userId));
-            }
             if (user.getUserType() != UserType.ADMIN_USER){
                 List<T> unauthorizedList = processService.listUnauthorized(userId,needChecks,authorizationType);
                 // if exist unauthorized resource
diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
index 769fe09..60c17f7 100644
--- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
+++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
@@ -28,8 +28,6 @@ import org.apache.dolphinscheduler.common.task.subprocess.SubProcessParameters;
 import org.apache.dolphinscheduler.common.utils.*;
 import org.apache.dolphinscheduler.dao.entity.*;
 import org.apache.dolphinscheduler.dao.mapper.*;
-import org.apache.dolphinscheduler.remote.utils.Host;
-import org.apache.dolphinscheduler.service.log.LogClientService;
 import org.apache.dolphinscheduler.service.quartz.cron.CronUtils;
 import org.quartz.CronExpression;
 import org.slf4j.Logger;
@@ -38,7 +36,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.File;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -120,6 +117,10 @@ public class ProcessService {
             logger.info("there is not enough thread for this command: {}", command);
             return setWaitingThreadProcess(command, processInstance);
         }
+        if (processInstance.getCommandType().equals(CommandType.RECOVER_TOLERANCE_FAULT_PROCESS)){
+            delCommandByid(command.getId());
+            return null;
+        }
         processInstance.setCommandType(command.getCommandType());
         processInstance.addHistoryCmd(command.getCommandType());
         saveProcessInstance(processInstance);
@@ -235,7 +236,7 @@ public class ProcessService {
      * @param defineId
      * @return
      */
-    public List<TaskNode> getTaskNodeListByDefinitionId(Integer defineId){
+    public  List<TaskNode> getTaskNodeListByDefinitionId(Integer defineId){
         ProcessDefinition processDefinition = processDefineMapper.selectById(defineId);
         if (processDefinition == null) {
             logger.info("process define not exists");
@@ -248,7 +249,7 @@ public class ProcessService {
         //process data check
         if (null == processData) {
             logger.error("process data is null");
-            return new ArrayList<>();
+            return null;
         }
 
         return processData.getTasks();
@@ -290,10 +291,9 @@ public class ProcessService {
 
         List<Integer> subProcessIdList = processInstanceMapMapper.querySubIdListByParentId(processInstanceId);
 
-        for(Integer subId : subProcessIdList){
+        for(Integer subId : subProcessIdList ){
             deleteAllSubWorkProcessByParentId(subId);
             deleteWorkProcessMapByParentId(subId);
-            removeTaskLogFile(subId);
             deleteWorkProcessInstanceById(subId);
         }
         return 1;
@@ -301,41 +301,6 @@ public class ProcessService {
 
 
     /**
-     * remove task log file
-     * @param processInstanceId processInstanceId
-     */
-    public void removeTaskLogFile(Integer processInstanceId){
-
-        LogClientService logClient = new LogClientService();
-
-        List<TaskInstance> taskInstanceList = findValidTaskListByProcessId(processInstanceId);
-
-        if (CollectionUtils.isEmpty(taskInstanceList)){
-            return;
-        }
-
-        for (TaskInstance taskInstance : taskInstanceList){
-            String taskLogPath = taskInstance.getLogPath();
-            if (StringUtils.isEmpty(taskInstance.getHost())){
-                continue;
-            }
-            int port = Constants.RPC_PORT;
-            String ip = "";
-            try {
-                ip = Host.of(taskInstance.getHost()).getIp();
-            }catch (Exception e){
-                // compatible old version
-                ip = taskInstance.getHost();
-            }
-
-
-            // remove task log from loggerserver
-            logClient.removeTaskLog(ip,port,taskLogPath);
-        }
-    }
-
-
-    /**
      * calculate sub process number in the process define.
      * @param processDefinitionId processDefinitionId
      * @return process thread num count
@@ -363,13 +328,11 @@ public class ProcessService {
 
             for (TaskNode taskNode : taskNodeList){
                 String parameter = taskNode.getParams();
-                ObjectNode parameterJson = JSONUtils.parseObject(parameter);
-                if (parameterJson.get(CMDPARAM_SUB_PROCESS_DEFINE_ID) != null){
+                if (parameter.contains(CMDPARAM_SUB_PROCESS_DEFINE_ID)){
                     SubProcessParameters subProcessParam = JSONUtils.parseObject(parameter, SubProcessParameters.class);
                     ids.add(subProcessParam.getProcessDefinitionId());
                     recurseFindSubProcessId(subProcessParam.getProcessDefinitionId(),ids);
                 }
-
             }
         }
     }
@@ -669,7 +632,6 @@ public class ProcessService {
                     taskInstance.setFlag(Flag.NO);
                     this.updateTaskInstance(taskInstance);
                 }
-                initComplementDataParam(processDefinition, processInstance, cmdParam);
                 break;
             case REPEAT_RUNNING:
                 // delete the recover task names from command parameter
@@ -726,9 +688,7 @@ public class ProcessService {
 
         Date startComplementTime = DateUtils.parse(cmdParam.get(CMDPARAM_COMPLEMENT_DATA_START_DATE),
                 YYYY_MM_DD_HH_MM_SS);
-        if(Flag.NO == processInstance.getIsSubProcess()) {
-            processInstance.setScheduleTime(startComplementTime);
-        }
+        processInstance.setScheduleTime(startComplementTime);
         processInstance.setGlobalParams(ParameterUtils.curingGlobalParams(
                 processDefinition.getGlobalParamMap(),
                 processDefinition.getGlobalParamList(),
@@ -921,7 +881,7 @@ public class ProcessService {
 
         CommandType fatherType = parentProcessInstance.getCommandType();
         CommandType commandType = fatherType;
-        if(childInstance == null){
+        if(childInstance == null || commandType == CommandType.REPEAT_RUNNING){
             String fatherHistoryCommand = parentProcessInstance.getHistoryCmd();
             // sub process must begin with schedule/complement data
             // if father begin with scheduler/complement data
@@ -961,7 +921,6 @@ public class ProcessService {
         command.setCommandParam(processMapStr);
         command.setCommandType(commandType);
         command.setProcessInstancePriority(parentProcessInstance.getProcessInstancePriority());
-        command.setWorkerGroup(parentProcessInstance.getWorkerGroup());
         createCommand(command);
         logger.info("sub process command created: {} ", command.toString());
     }
@@ -1480,7 +1439,7 @@ public class ProcessService {
     @Transactional(rollbackFor = Exception.class)
     public void processNeedFailoverProcessInstances(ProcessInstance processInstance){
         //1 update processInstance host is null
-        processInstance.setHost(Constants.NULL);
+        processInstance.setHost("null");
         processInstanceMapper.updateById(processInstance);
 
         //2 insert into recover command
@@ -1813,7 +1772,7 @@ public class ProcessService {
      * @return User
      */
     public User getUserById(int userId){
-        return userMapper.selectById(userId);
+        return userMapper.queryDetailsById(userId);
     }
 
     /**
diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/ProcessScheduleJob.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/ProcessScheduleJob.java
index 6ac847b..c89b7af 100644
--- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/ProcessScheduleJob.java
+++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/ProcessScheduleJob.java
@@ -32,7 +32,6 @@ import org.quartz.JobExecutionException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
 
 import java.util.Date;
 
@@ -99,8 +98,7 @@ public class ProcessScheduleJob implements Job {
         command.setScheduleTime(scheduledFireTime);
         command.setStartTime(fireTime);
         command.setWarningGroupId(schedule.getWarningGroupId());
-        String workerGroup = StringUtils.isEmpty(schedule.getWorkerGroup()) ? Constants.DEFAULT_WORKER_GROUP : schedule.getWorkerGroup();
-        command.setWorkerGroup(workerGroup);
+        command.setWorkerGroup(schedule.getWorkerGroup());
         command.setWarningType(schedule.getWarningType());
         command.setProcessInstancePriority(schedule.getProcessInstancePriority());
 
diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/AbstractZKClient.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/AbstractZKClient.java
index 8b63926..a27a89a 100644
--- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/AbstractZKClient.java
+++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/AbstractZKClient.java
@@ -123,19 +123,12 @@ public abstract class AbstractZKClient extends ZookeeperCachedOperator {
 		String parentPath = getZNodeParentPath(zkNodeType);
 
 		List<Server> masterServers = new ArrayList<>();
+		int i = 0;
 		for (Map.Entry<String, String> entry : masterMap.entrySet()) {
 			Server masterServer = ResInfo.parseHeartbeatForZKInfo(entry.getValue());
-			if(masterServer == null){
-				continue;
-			}
-			String key = entry.getKey();
-			masterServer.setZkDirectory(parentPath + "/"+ key);
-			//set host and port
-			String[] hostAndPort=key.split(COLON);
-			String[] hosts=hostAndPort[0].split(DIVISION_STRING);
-			// fetch the last one
-			masterServer.setHost(hosts[hosts.length-1]);
-			masterServer.setPort(Integer.parseInt(hostAndPort[1]));
+			masterServer.setZkDirectory(parentPath + "/"+ entry.getKey());
+			masterServer.setId(i);
+			i ++;
 			masterServers.add(masterServer);
 		}
 		return masterServers;
@@ -187,7 +180,7 @@ public abstract class AbstractZKClient extends ZookeeperCachedOperator {
 		}
 		Map<String, String> serverMaps = getServerMaps(zkNodeType);
 		for(String hostKey : serverMaps.keySet()){
-			if(hostKey.contains(host)){
+			if(hostKey.startsWith(host)){
 				return true;
 			}
 		}
diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/ZKServer.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/ZKServer.java
index 3cdc9ab..9633140 100644
--- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/ZKServer.java
+++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/ZKServer.java
@@ -95,9 +95,8 @@ public class ZKServer {
      * @param port The port to listen on
      */
     public static void startLocalZkServer(final int port) {
-        String zkDataDir = System.getProperty("user.dir") +"/zookeeper_data";
-        logger.info("zk server starting, data dir path:{}" , zkDataDir);
-        startLocalZkServer(port, zkDataDir, ZooKeeperServer.DEFAULT_TICK_TIME,"60");
+
+        startLocalZkServer(port, System.getProperty("user.dir") +"/zookeeper_data", ZooKeeperServer.DEFAULT_TICK_TIME,"20");
     }
 
     /**
diff --git a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/zk/ZKServerTest.java b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/zk/ZKServerTest.java
index 42b942b..48cde32 100644
--- a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/zk/ZKServerTest.java
+++ b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/zk/ZKServerTest.java
@@ -16,16 +16,22 @@
  */
 package org.apache.dolphinscheduler.service.zk;
 
-import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 
-// ZKServer is a process, can't unit test
+import static org.junit.Assert.*;
+
+@Ignore
 public class ZKServerTest {
 
+    @Test
+    public void start() {
+        //ZKServer is a process, can't unit test
+    }
 
     @Test
     public void isStarted() {
-        Assert.assertEquals(false, ZKServer.isStarted());
+
     }
 
     @Test
diff --git a/dolphinscheduler-ui/build/config.js b/dolphinscheduler-ui/build/config.js
index 91d59a0..b5db173 100644
--- a/dolphinscheduler-ui/build/config.js
+++ b/dolphinscheduler-ui/build/config.js
@@ -95,7 +95,7 @@ const rewriterPath = p => {
     }
   }
 }
-const version = new Date().getTime();
+
 const pages = glob.sync(['*/!(_*).html'], { cwd: viewDir }).map(p => {
   let pagePath = `${path.join(viewDir, p)}`
   let newPagePath = rewriterPath(pagePath)
@@ -109,9 +109,7 @@ const pages = glob.sync(['*/!(_*).html'], { cwd: viewDir }).map(p => {
     filename: newPagePath || path.join('view', p),
     template: `${path.join('src/view', p)}`,
     cache: true,
-    favicon:'./favicon.ico',
     inject: true,
-    hash: version,
     chunks: chunks,
     minify: minifierConfig
   })
@@ -122,7 +120,7 @@ const baseConfig = {
   output: {
     path: distDir,
     publicPath: '/',
-    filename: 'js/[name].[chunkhash:7]'+version+'.js'
+    filename: 'js/[name].[chunkhash:7].js'
   },
   module: {
     rules: [
diff --git a/dolphinscheduler-ui/favicon.ico b/dolphinscheduler-ui/favicon.ico
deleted file mode 100644
index acf4cf7..0000000
Binary files a/dolphinscheduler-ui/favicon.ico and /dev/null differ
diff --git a/dolphinscheduler-ui/pom.xml b/dolphinscheduler-ui/pom.xml
index 8baeb38..78869ff 100644
--- a/dolphinscheduler-ui/pom.xml
+++ b/dolphinscheduler-ui/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <artifactId>dolphinscheduler</artifactId>
     <groupId>org.apache.dolphinscheduler</groupId>
-    <version>1.3.0-SNAPSHOT</version>
+    <version>1.2.1-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/dolphinscheduler-ui/src/js/conf/home/index.js b/dolphinscheduler-ui/src/js/conf/home/index.js
index efec218..3c518d8 100644
--- a/dolphinscheduler-ui/src/js/conf/home/index.js
+++ b/dolphinscheduler-ui/src/js/conf/home/index.js
@@ -17,6 +17,7 @@
 
 // The Vue build version to load with the `import` command
 // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
+// import $ from 'jquery'
 import Vue from 'vue'
 import App from './App'
 import router from './router'
@@ -30,6 +31,7 @@ import Permissions from '@/module/permissions'
 import 'ans-ui/lib/ans-ui.min.css'
 import ans from 'ans-ui/lib/ans-ui.min'
 import en_US from 'ans-ui/lib/locale/en' // eslint-disable-line
+import 'normalize.css/normalize.css'
 import 'sass/conf/home/index.scss'
 import 'bootstrap/dist/css/bootstrap.min.css'
 
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 ff8a452..3f47076 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
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import Vue from 'vue'
-let v = new Vue()
+
 import _ from 'lodash'
-import i18n from '@/module/i18n'
 import { jsPlumb } from 'jsplumb'
 import JSP from './plugIn/jsPlumbHandle'
 import DownChart from './plugIn/downChart'
@@ -75,7 +73,6 @@ Dag.prototype.create = function () {
  * Action event on the right side of the toolbar
  */
 Dag.prototype.toolbarEvent = function ({ item, code, is }) {
-  let self = this
   switch (code) {
     case 'pointer':
       JSP.handleEventPointer(is)
@@ -90,21 +87,8 @@ Dag.prototype.toolbarEvent = function ({ item, code, is }) {
       JSP.handleEventScreen({ item, is })
       break
     case 'download':
-      v.$modal.dialog({
-        width: 350,
-        closable: false,
-        showMask: true,
-        maskClosable: true,
-        title: i18n.$t('Download'),
-        content: i18n.$t('Please confirm whether the workflow has been saved before downloading'),
-        ok: {
-          handle (e) {
-            DownChart.download({
-              dagThis: self.dag
-            })
-          }
-        },
-        cancel: {}
+      DownChart.download({
+        dagThis: this.dag
       })
       break
   }
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 cde94cd..6d24495 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
@@ -180,7 +180,6 @@
           ],
           Connector: 'Bezier',
           PaintStyle: { lineWidth: 2, stroke: '#456' }, // Connection style
-          HoverPaintStyle: {stroke: '#ccc', strokeWidth: 3}, 
           ConnectionOverlays: [
             [
               'Arrow',
@@ -335,11 +334,11 @@
        * Storage interface
        */
       _save (sourceType) {
-        return new Promise((resolve, reject) => {
-          this.spinnerLoading = true
-          // Storage store
-          Dag.saveStore().then(res => {
-            if(this._verifConditions(res.tasks)) {
+        if(this._verifConditions()) {
+          return new Promise((resolve, reject) => {
+            this.spinnerLoading = true
+            // Storage store
+            Dag.saveStore().then(res => {
               if (this.urlParam.id) {
                 /**
                  * Edit
@@ -373,12 +372,12 @@
                   reject(e)
                 })
               }
-            }
+            })
           })
-        })
+        }
       },
-      _verifConditions (value) {
-        let tasks = value
+      _verifConditions () {
+        let tasks = this.$store.state.dag.tasks
         let bool = true
         tasks.map(v=>{
           if(v.type == 'CONDITIONS' && (v.conditionResult.successNode[0] =='' || v.conditionResult.successNode[0] == null || v.conditionResult.failedNode[0] =='' || v.conditionResult.failedNode[0] == null)) {
@@ -388,7 +387,6 @@
         })
         if(!bool) {
           this.$message.warning(`${i18n.$t('Successful branch flow and failed branch flow are required')}`)
-          this.spinnerLoading = false
           return false
         }
         return true
@@ -581,8 +579,7 @@
               taskType: type,
               self: self,
               preNode: preNode,
-              rearList: rearList,
-              instanceId: this.$route.params.id
+              rearList: rearList
             }
           })
         })
@@ -619,7 +616,6 @@
           ],
           Connector: 'Bezier',
           PaintStyle: { lineWidth: 2, stroke: '#456' }, // Connection style
-          HoverPaintStyle: {stroke: '#ccc', strokeWidth: 3}, 
           ConnectionOverlays: [
             [
               'Arrow',
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue
index 8f9066c..459f9a8 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue
@@ -268,7 +268,6 @@
 </template>
 <script>
   import _ from 'lodash'
-  import { mapActions } from 'vuex'
   import mLog from './log'
   import mMr from './tasks/mr'
   import mSql from './tasks/sql'
@@ -357,11 +356,9 @@
       taskType: String,
       self: Object,
       preNode: Array,
-      rearList: Array,
-      instanceId: Number
+      rearList: Array
     },
     methods: {
-      ...mapActions('dag', ['getTaskInstanceList']),
       /**
        * depend
        */
@@ -487,16 +484,6 @@
         }
         return true
       },
-      _verifWorkGroup() {
-        let item = this.store.state.security.workerGroupsListAll.find(item => {
-          return item.id == this.workerGroup;
-        });
-        if(item==undefined) {
-          this.$message.warning(`${i18n.$t('The Worker group no longer exists, please select the correct Worker group!')}`)
-          return false;
-        }
-        return true
-      },
       /**
        * Global verification procedure
        */
@@ -505,10 +492,6 @@
         if (!this._verifName()) {
           return
         }
-        // verif workGroup
-        if(!this._verifWorkGroup()) {
-          return
-        }
         // Verify task alarm parameters
         if (!this.$refs['timeout']._verification()) {
           return
@@ -636,12 +619,9 @@
             break;
           }
         }
-        if(o.workerGroup == undefined) {
-          this.store.dispatch('dag/getTaskInstanceList',{
-            pageSize: 10, pageNo: 1, processInstanceId: this.instanceId, name: o.name
-          }).then(res => {
-            this.workerGroup = res.totalList[0].workerGroup
-          })
+
+        if(!hasMatch){
+          this.workerGroup = 'default'
         } else {
           this.workerGroup = o.workerGroup
         }
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/commcon.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/commcon.js
index da6eb27..37d471c 100755
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/commcon.js
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/commcon.js
@@ -45,10 +45,6 @@ const cycleList = [
 const dateValueList = {
   hour: [
     {
-      value: 'currentHour',
-      label: `${i18n.$t('CurrentHour')}`
-    },
-    {
       value: 'last1Hour',
       label: `${i18n.$t('Last1Hour')}`
     },
@@ -59,10 +55,6 @@ const dateValueList = {
     {
       value: 'last3Hours',
       label: `${i18n.$t('Last3Hours')}`
-    },
-    {
-      value: 'last24Hours',
-      label: `${i18n.$t('Last24Hours')}`
     }
   ],
   day: [
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/datax.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/datax.vue
index 6ced1ad..f1c9b75 100755
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/datax.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/datax.vue
@@ -47,9 +47,6 @@
               name="code-sql-mirror"
               style="opacity: 0;">
             </textarea>
-            <a class="ans-modal-box-max">
-              <em class="ans-icon-max" @click="setEditorVal"></em>
-            </a>
           </div>
         </div>
       </m-list-box>
@@ -126,9 +123,6 @@
               name="code-json-mirror"
               style="opacity: 0;">
             </textarea>
-            <a class="ans-modal-box-max">
-              <em class="ans-icon-max" @click="setJsonEditorVal"></em>
-            </a>
           </div>
         </div>
       </m-list-box>
@@ -150,7 +144,6 @@
   import _ from 'lodash'
   import i18n from '@/module/i18n'
   import mListBox from './_source/listBox'
-  import mScriptBox from './_source/scriptBox'
   import mDatasource from './_source/datasource'
   import mLocalParams from './_source/localParams'
   import mStatementList from './_source/statementList'
@@ -204,62 +197,6 @@
       createNodeId: Number
     },
     methods: {
-      setEditorVal() {
-        let self = this
-        let modal = self.$modal.dialog({
-          className: 'scriptModal',
-          closable: false,
-          showMask: true,
-          maskClosable: true,
-          onClose: function() {
-
-          },
-          render (h) {
-            return h(mScriptBox, {
-              on: {
-                getSriptBoxValue (val) {
-                  editor.setValue(val)
-                },
-                closeAble () {
-                  // this.$modal.destroy()
-                  modal.remove()
-                }
-              },
-              props: {
-                item: editor.getValue()
-              }
-            })
-          }
-        })
-      },
-      setJsonEditorVal() {
-        let self = this
-        let modal = self.$modal.dialog({
-          className: 'scriptModal',
-          closable: false,
-          showMask: true,
-          maskClosable: true,
-          onClose: function() {
-
-          },
-          render (h) {
-            return h(mScriptBox, {
-              on: {
-                getSriptBoxValue (val) {
-                  jsonEditor.setValue(val)
-                },
-                closeAble () {
-                  // this.$modal.destroy()
-                  modal.remove()
-                }
-              },
-              props: {
-                item: jsonEditor.getValue()
-              }
-            })
-          }
-        })
-      },
       _onSwitch (is) {
         if(is) {
           this.customConfig = 1
@@ -300,12 +237,6 @@
         this.postStatements = a
       },
       /**
-       * return localParams
-       */
-      _onLocalParams (a) {
-        this.localParams = a
-      },
-      /**
        * verification
        */
       _verification () {
@@ -315,11 +246,6 @@
             return false
           }
 
-          // localParams Subcomponent verification
-          if (!this.$refs.refLocalParams._verifProp()) {
-            return false
-          }
-
           // storage
           this.$emit('on-params', {
             customConfig: this.customConfig,
@@ -538,10 +464,3 @@
     components: { mListBox, mDatasource, mLocalParams, mStatementList, mSelectInput }
   }
 </script>
-<style lang="scss" rel="stylesheet/scss" scope>
-  .ans-modal-box-max {
-    position: absolute;
-    right: -12px;
-    top: -16px;
-  }
-</style>
\ No newline at end of file
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 d05c698..8fb2eba 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
@@ -78,7 +78,7 @@
     <m-list-box>
       <div slot="text">{{$t('Resources')}}</div>
       <div slot="content">
-        <treeselect  v-model="resourceList" :multiple="true" :options="mainJarList" :normalizer="normalizer" :disabled="isDetails" :value-consists-of="valueConsistsOf" :placeholder="$t('Please select resources')">
+        <treeselect v-model="resourceList" :multiple="true" :options="mainJarList" :normalizer="normalizer" :disabled="isDetails" :placeholder="$t('Please select resources')">
           <div slot="value-label" slot-scope="{ node }">{{ node.raw.fullName }}</div>
         </treeselect>
       </div>
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 30b9f7f..851f8be 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
@@ -22,9 +22,6 @@
         <div class="from-mirror">
           <textarea id="code-python-mirror" name="code-python-mirror" style="opacity: 0;">
           </textarea>
-          <a class="ans-modal-box-max">
-            <em class="ans-icon-max" @click="setEditorVal"></em>
-          </a>
         </div>
       </div>
     </m-list-box>
@@ -60,7 +57,6 @@
   import _ from 'lodash'
   import i18n from '@/module/i18n'
   import mListBox from './_source/listBox'
-  import mScriptBox from './_source/scriptBox'
   import mResources from './_source/resources'
   import mLocalParams from './_source/localParams'
   import Treeselect from '@riophae/vue-treeselect'
@@ -104,34 +100,6 @@
       _onLocalParams (a) {
         this.localParams = a
       },
-      setEditorVal() {
-        let self = this
-          let modal = self.$modal.dialog({
-            className: 'scriptModal',
-            closable: false,
-            showMask: true,
-            maskClosable: true,
-            onClose: function() {
-
-            },
-            render (h) {
-              return h(mScriptBox, {
-                on: {
-                  getSriptBoxValue (val) {
-                    editor.setValue(val)
-                  },
-                  closeAble () {
-                    // this.$modal.destroy()
-                    modal.remove()
-                  }
-                },
-                props: {
-                  item: editor.getValue()
-                }
-              })
-            }
-          })
-      },
       /**
        * return resourceList
        */
@@ -374,9 +342,4 @@
       }
     }
   }
-  .ans-modal-box-max {
-    position: absolute;
-    right: -12px;
-    top: -16px;
-  }
 </style>
\ No newline at end of file
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 94ddaf8..9e7f330 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
@@ -89,9 +89,6 @@
                   name="code-sql-mirror"
                   style="opacity: 0;">
           </textarea>
-          <a class="ans-modal-box-max">
-            <em class="ans-icon-max" @click="setEditorVal"></em>
-          </a>
         </div>
       </div>
     </m-list-box>
@@ -143,7 +140,6 @@
   import i18n from '@/module/i18n'
   import mUdfs from './_source/udfs'
   import mListBox from './_source/listBox'
-  import mScriptBox from './_source/scriptBox'
   import mSqlType from './_source/sqlType'
   import mDatasource from './_source/datasource'
   import mLocalParams from './_source/localParams'
@@ -194,34 +190,6 @@
       createNodeId: Number
     },
     methods: {
-      setEditorVal() {
-        let self = this
-          let modal = self.$modal.dialog({
-            className: 'scriptModal',
-            closable: false,
-            showMask: true,
-            maskClosable: true,
-            onClose: function() {
-
-            },
-            render (h) {
-              return h(mScriptBox, {
-                on: {
-                  getSriptBoxValue (val) {
-                    editor.setValue(val)
-                  },
-                  closeAble () {
-                    // this.$modal.destroy()
-                    modal.remove()
-                  }
-                },
-                props: {
-                  item: editor.getValue()
-                }
-              })
-            }
-          })
-      },
       /**
        * return sqlType
        */
@@ -527,10 +495,5 @@
     color: #ff0000;
     padding-right: 4px;
   }
-  .ans-modal-box-max {
-    position: absolute;
-    right: -12px;
-    top: -16px;
-  }
 </style>
 
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sqoop.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sqoop.vue
index c852f7f..4bed92d 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sqoop.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sqoop.vue
@@ -241,21 +241,18 @@
         </m-list-box>
       </template>
 
-    <m-list-box v-show="srcQueryType === '1' && sourceType ==='MYSQL'">
-      <div slot="text">{{$t('SQL Statement')}}</div>
-      <div slot="content">
-        <div class="from-mirror">
-          <textarea
-                  id="code-sqoop-mirror"
-                  name="code-sqoop-mirror"
-                  style="opacity: 0;">
-          </textarea>
-          <a class="ans-modal-box-max">
-            <em class="ans-icon-max" @click="setEditorVal"></em>
-          </a>
+      <m-list-box v-show="srcQueryType === '1' && sourceType ==='MYSQL'">
+        <div slot="text">{{$t('SQL Statement')}}</div>
+        <div slot="content">
+          <div class="from-mirror">
+            <textarea
+              id="code-sqoop-mirror"
+              name="code-sqoop-mirror"
+              style="opacity: 0;">
+            </textarea>
+          </div>
         </div>
-      </div>
-    </m-list-box>
+      </m-list-box>
 
       <template>
         <m-list-box v-show="sourceType === 'MYSQL'">
@@ -557,7 +554,6 @@
   import _ from 'lodash'
   import i18n from '@/module/i18n'
   import mListBox from './_source/listBox'
-  import mScriptBox from './_source/scriptBox'
   import mDatasource from './_source/datasource'
   import mLocalParams from './_source/localParams'
   import disabledState from '@/module/mixin/disabledState'
@@ -705,34 +701,23 @@
       backfillItem: Object
     },
     methods: {
-      setEditorVal() {
-        let self = this
-          let modal = self.$modal.dialog({
-            className: 'scriptModal',
-            closable: false,
-            showMask: true,
-            maskClosable: true,
-            onClose: function() {
-
-            },
-            render (h) {
-              return h(mScriptBox, {
-                on: {
-                  getSriptBoxValue (val) {
-                    editor.setValue(val)
-                  },
-                  closeAble () {
-                    // this.$modal.destroy()
-                    modal.remove()
-                  }
-                },
-                props: {
-                  item: editor.getValue()
-                }
-              })
-            }
-          })
+
+      _onSwitch(is){
+        if(is) {
+          this.jobType = 'CUSTOM'
+          this.isCustomTask = true
+          setTimeout(() => {
+            this._handlerShellEditor()
+          }, 200)
+        } else {
+          this.jobType = 'TEMPLATE'
+          this.isCustomTask = false
+          setTimeout(() => {
+            this._handlerEditor()
+          }, 200)
+        }
       },
+
       _handleQueryType(o){
         this.sourceMysqlParams.srcQueryType = this.srcQueryType
         this._getTargetTypeList(this.sourceType)
@@ -1275,10 +1260,5 @@
     color: #ff0000;
     padding-right: 4px;
   }
-  .ans-modal-box-max {
-    position: absolute;
-    right: -12px;
-    top: -16px;
-  }
 </style>
 
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sub_process.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sub_process.vue
index e96d409..477038f 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sub_process.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sub_process.vue
@@ -95,12 +95,7 @@
     },
     created () {
       let processListS = _.cloneDeep(this.store.state.dag.processListS)
-      let id = null
-      if(this.router.history.current.name==='projects-instance-details') {
-        id = this.router.history.current.query.id || null
-      } else {
-        id = this.router.history.current.params.id || null
-      }
+      let id = this.router.history.current.params.id || null
       this.processDefinitionList = (() => {
         let a = _.map(processListS, v => {
           return {
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 a40a76f..b0bc0fe 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
@@ -54,6 +54,7 @@ const JSP = function () {
     isClick: false
   }
 }
+
 /**
  * dag init
  */
@@ -198,9 +199,7 @@ JSP.prototype.jsonHandle = function ({ largeJson, locations }) {
       isAttachment: this.config.isAttachment,
       taskType: v.type,
       runFlag: v.runFlag,
-      nodenumber: locations[v.id].nodenumber,
-      successNode: v.conditionResult === undefined? '' : v.conditionResult.successNode[0],
-      failedNode: v.conditionResult === undefined? '' : v.conditionResult.failedNode[0]
+      nodenumber: locations[v.id].nodenumber
     }))
 
     // contextmenu event
@@ -746,34 +745,13 @@ JSP.prototype.jspBackfill = function ({ connects, locations, largeJson }) {
         sourceId = v.endPointSourceId
         targetId = v.endPointTargetId
       }
-      
-      if($(`#${sourceId}`).attr('data-tasks-type') === 'CONDITIONS' && $(`#${sourceId}`).attr('data-successnode') === $(`#${targetId}`).find('.name-p').text()) {
-        this.JspInstance.connect({
-          source: sourceId,
-          target: targetId,
-          type: 'basic',
-          paintStyle: { strokeWidth: 2, stroke: '#4caf50' },
-          HoverPaintStyle: {stroke: '#ccc', strokeWidth: 3},
-          overlays:[["Label", { label: i18n.$t('success'), location:0.5, id:"label"} ]]
-        })
-      } else if($(`#${sourceId}`).attr('data-tasks-type') === 'CONDITIONS' && $(`#${sourceId}`).attr('data-failednode') === $(`#${targetId}`).find('.name-p').text()) {
-        this.JspInstance.connect({
-          source: sourceId,
-          target: targetId,
-          type: 'basic',
-          paintStyle: { strokeWidth: 2, stroke: '#252d39' },
-          HoverPaintStyle: {stroke: '#ccc', strokeWidth: 3},
-          overlays:[["Label", { label: i18n.$t('failed'), location:0.5, id:"label"} ]]
-        })
-      } else {
-        this.JspInstance.connect({
-          source: sourceId,
-          target: targetId,
-          type: 'basic',
-          paintStyle: { strokeWidth: 2, stroke: '#2d8cf0' },
-          HoverPaintStyle: {stroke: '#ccc', strokeWidth: 3}
-        })
-      }
+
+      this.JspInstance.connect({
+        source: sourceId,
+        target: targetId,
+        type: 'basic',
+        paintStyle: { strokeWidth: 2, stroke: '#2d8cf0' }
+      })
     })
   })
 
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js
index 84b01a5..e443639 100755
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js
@@ -43,9 +43,9 @@ const rtBantpl = () => {
 /**
  * return node html
  */
-const rtTasksTpl = ({ id, name, x, y, targetarr, isAttachment, taskType, runFlag, nodenumber, successNode, failedNode }) => {
+const rtTasksTpl = ({ id, name, x, y, targetarr, isAttachment, taskType, runFlag, nodenumber }) => {
   let tpl = ''
-  tpl += `<div class="w jtk-draggable jtk-droppable jtk-endpoint-anchor jtk-connected ${isAttachment ? 'jtk-ep' : ''}" data-targetarr="${targetarr || ''}" data-successNode="${successNode || ''}" data-failedNode="${failedNode || ''}" data-nodenumber="${nodenumber || 0}" data-tasks-type="${taskType}" id="${id}" style="left: ${x}px; top: ${y}px;">`
+  tpl += `<div class="w jtk-draggable jtk-droppable jtk-endpoint-anchor jtk-connected ${isAttachment ? 'jtk-ep' : ''}" data-targetarr="${targetarr || ''}" data-nodenumber="${nodenumber || 0}" data-tasks-type="${taskType}" id="${id}" style="left: ${x}px; top: ${y}px;">`
   tpl += '<div>'
   tpl += '<div class="state-p"></div>'
   tpl += `<div class="icos icos-${taskType}"></div>`
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/startingParam/index.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/startingParam/index.vue
index bea5d92..7927976 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/startingParam/index.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/startingParam/index.vue
@@ -24,7 +24,7 @@
            <li><span class="tab">{{$t('Complement range')}}:</span><span class="content" v-if="startupParam.commandParam && startupParam.commandParam.complementStartDate">{{startupParam.commandParam.complementStartDate}}-{{startupParam.commandParam.complementEndDate}}</span><span class="content" v-else>-</span></li>
            <li><span class="tab">{{$t('Failure Strategy')}}:</span><span class="content">{{startupParam.failureStrategy === 'END' ? $t('End') : $t('Continue')}}</span></li>
            <li><span class="tab">{{$t('Process priority')}}:</span><span class="content">{{startupParam.processInstancePriority}}</span></li>
-           <li><span class="tab">{{$t('Worker group')}}:</span><span class="content" v-if="workerGroupList.length">{{startupParam.workerGroup}}</span></li>
+           <li><span class="tab">{{$t('Worker group')}}:</span><span class="content" v-if="workerGroupList.length">{{_rtWorkerGroupName(startupParam.workerGroup)}}</span></li>
            <li><span class="tab">{{$t('Notification strategy')}}:</span><span class="content">{{_rtWarningType(startupParam.warningType)}}</span></li>
            <li><span class="tab">{{$t('Notification group')}}:</span><span class="content" v-if="notifyGroupList.length">{{_rtNotifyGroupName(startupParam.warningGroupId)}}</span></li>
            <li><span class="tab">{{$t('Recipient')}}:</span><span class="content">{{startupParam.receivers || '-'}}</span></li>
@@ -38,7 +38,7 @@
   import store from '@/conf/home/store'
   import { runningType } from '@/conf/home/pages/dag/_source/config'
   import { warningTypeList } from '@/conf/home/pages/projects/pages/definition/pages/list/_source/util'
- 
+
   export default {
     name: 'starting-params-dag-index',
     data () {
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/udp/udp.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/udp/udp.vue
index b9610cb..1bd48d8 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/udp/udp.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/udp/udp.vue
@@ -205,14 +205,7 @@
       this.syncDefine = dag.syncDefine
       this.timeout = dag.timeout || 0
       this.checkedTimeout = this.timeout !== 0
-      this.$nextTick(() => {
-        if (dag.tenantId === -1) {
-          this.tenantId = this.store.state.user.userInfo.tenantId
-        } else {
-          this.tenantId = dag.tenantId
-        }
-      })
-
+      this.tenantId = dag.tenantId || -1
     },
     mounted () {},
     components: {FormTenant, mLocalParams }
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue b/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue
index 0d05205..db99d00 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue
@@ -429,14 +429,14 @@
           this.showdDatabase = false;
         }
 
-        if (value== 'ORACLE' && !this.item.id) {
+        if (value== 'ORACLE') {
           this.showConnectType = true;
           this.connectType = 'ORACLE_SERVICE_NAME'
-        } else if(value== 'ORACLE' && this.item.id) {
-          this.showConnectType = true;
         } else {
           this.showConnectType = false;
+          this.connectType = ''
         }
+
         //Set default port for each type datasource
         this._setDefaultValues(value)
 
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue
index ecc414c..dc06712 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue
@@ -22,7 +22,7 @@
           <div class="row-title">
             <div class="left">
               <span class="sp">IP: {{item.host}}</span>
-              <span class="sp">{{$t('Process Pid')}}: {{item.id}}</span>
+              <span class="sp">{{$t('Process Pid')}}: {{item.port}}</span>
               <span class="sp">{{$t('Zk registration directory')}}: {{item.zkDirectory}}</span>
             </div>
             <div class="right">
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue
index ceaed89..b386ea0 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue
@@ -22,7 +22,7 @@
           <div class="row-title">
             <div class="left">
               <span class="sp">IP: {{item.host}}</span>
-              <span class="sp">{{$t('Process Pid')}}: {{item.id}}</span>
+              <span class="sp">{{$t('Process Pid')}}: {{item.port}}</span>
               <span class="sp">{{$t('Zk registration directory')}}: {{item.zkDirectory}}</span>
             </div>
             <div class="right">
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/list.vue
index 577bb4f..1a07fae 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/list.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/list.vue
@@ -86,7 +86,7 @@
             <span v-if="item.scheduleReleaseState === 'ONLINE'">{{$t('online')}}</span>
             <span v-if="!item.scheduleReleaseState">-</span>
           </td>
-          <td style="z-index: inherit;">
+          <td>
             <x-button type="info" shape="circle" size="xsmall" data-toggle="tooltip" :title="$t('Edit')" @click="_edit(item)" :disabled="item.releaseState === 'ONLINE'"  icon="ans-icon-edit"><!--{{$t('编辑')}}--></x-button>
             <x-button type="success" shape="circle" size="xsmall" data-toggle="tooltip" :title="$t('Start')" @click="_start(item)" :disabled="item.releaseState !== 'ONLINE'"  icon="ans-icon-play"><!--{{$t('启动')}}--></x-button>
             <x-button type="info" shape="circle" size="xsmall" data-toggle="tooltip" :title="$t('Timing')" @click="_timing(item)" :disabled="item.releaseState !== 'ONLINE' || item.scheduleReleaseState !== null"  icon="ans-icon-timer"><!--{{$t('定时')}}--></x-button>
@@ -136,6 +136,7 @@
         <x-button size="xsmall" style="position: absolute; bottom: -48px; left: 22px;" >{{$t('Delete')}}</x-button>
       </template>
     </x-poptip>
+
     <template v-if="strSelectIds !== ''">
       <x-button size="xsmall" style="position: absolute; bottom: -48px; left: 80px;" @click="_batchExport(item)" >{{$t('Export')}}</x-button>
     </template>
@@ -263,7 +264,11 @@
        * Close the delete layer
        */
       _closeDelete (i) {
-        this.$refs[`poptip-delete-${i}`][0].doClose()
+        if (i > 0) {
+          this.$refs[`poptip-delete-${i}`][0].doClose()
+        }else{
+          this.$refs['poptipDeleteAll'].doClose()
+        }
       },
       /**
        * delete
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue
index 82a82de..0616357 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue
@@ -186,7 +186,7 @@
         receiversCc: [],
         i18n: i18n.globalScope.LOCALE,
         processInstancePriority: 'MEDIUM',
-        workerGroup: '',
+        workerGroup: 'default',
         previewTimes: []
       }
     },
@@ -309,20 +309,6 @@
     watch: {
     },
     created () {
-      if(this.item.workerGroup===undefined) {
-        let stateWorkerGroupsList = this.store.state.security.workerGroupsListAll || []
-        if (stateWorkerGroupsList.length) {
-          this.workerGroup = stateWorkerGroupsList[0].id
-        } else {
-          this.store.dispatch('security/getWorkerGroupsAll').then(res => {
-            this.$nextTick(() => {
-              this.workerGroup = res[0].id
-            })
-          })
-        }
-      } else {
-        this.workerGroup = this.item.workerGroup
-      }
       if(this.item.crontab !== null){
         this.crontab = this.item.crontab
       }
@@ -350,6 +336,7 @@
     },
     mounted () {
       let item = this.item
+
       // Determine whether to echo
       if (this.item.crontab) {
         this.crontab = item.crontab
@@ -357,6 +344,7 @@
         this.failureStrategy = item.failureStrategy
         this.warningType = item.warningType
         this.processInstancePriority = item.processInstancePriority
+        this.workerGroup = item.workerGroup || 'default'
         this._getNotifyGroupList().then(() => {
           this.$nextTick(() => {
             // let list = _.filter(this.notifyGroupList, v => v.id === item.warningGroupId)
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/index.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/index.vue
index eb5d335..5fcb3f6 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/index.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/index.vue
@@ -166,9 +166,6 @@
             right: 0;
             z-index: 2;
           }
-          td:last-child {
-            border-bottom:1px solid #ecf3ff;
-          }
           th:nth-last-child(2) {
             padding-right: 330px;
           }
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue
index 005858d..e0a13a6 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue
@@ -53,11 +53,11 @@
             <span>{{$t('fault-tolerant sign')}}</span>
           </th>
           <th scope="col" style="min-width: 135px">
-            <span>{{$t('Executor')}}</span>
+            <span>{{$t('host')}}</span>
           </th>
-          <th scope="col" style="min-width: 100px">
-            <div style="width: 100px">
-              <span>{{$t('host')}}</span>
+          <th scope="col" style="min-width: 60px">
+            <div style="width: 60px">
+              <span>{{$t('Executor')}}</span>
             </div>
           </th>
           <th scope="col" style="min-width: 210px">
@@ -70,7 +70,7 @@
             <span>{{parseInt(pageNo === 1 ? ($index + 1) : (($index + 1) + (pageSize * (pageNo - 1))))}}</span>
           </td>
           <td style="min-width: 200px;max-width: 300px;padding-right: 10px;">
-            <span class="ellipsis" style="padding-left: 4px;"><router-link :to="{ path: '/projects/instance/list/' + item.id , query:{id: item.processDefinitionId}}" tag="a" class="links" :title="item.name">{{item.name}}</router-link></span>
+            <span class="ellipsis" style="padding-left: 4px;"><router-link :to="{ path: '/projects/instance/list/' + item.id}" tag="a" class="links" :title="item.name">{{item.name}}</router-link></span>
           </td>
           <td>
             <span v-html="_rtState(item.state)" style="cursor: pointer;"></span>
@@ -92,14 +92,14 @@
           <td width="70"><span>{{item.runTimes}}</span></td>
           <td><span>{{item.recovery}}</span></td>
           <td>
-            <span v-if="item.executorName">{{item.executorName}}</span>
+            <span v-if="item.host">{{item.host}}</span>
             <span v-else>-</span>
           </td>
           <td>
-            <span v-if="item.host" style="word-break: break-all">{{item.host}}</span>
+            <span style="word-break: break-all" v-if="item.executorName">{{item.executorName}}</span>
             <span v-else>-</span>
           </td>
-          <td style="z-index: inherit;">
+          <td>
             <div v-show="item.disabled">
               <x-button type="info"
                         shape="circle"
@@ -143,7 +143,7 @@
                         :disabled="item.state !== 'RUNNING_EXEUTION' && item.state !== 'PAUSE'"></x-button>
               <x-poptip
                       :ref="'poptip-delete-' + $index"
-                      placement="top-end"
+                      placement="bottom-end"
                       width="90">
                 <p>{{$t('Delete?')}}</p>
                 <div style="text-align: right; margin: 0;padding-top: 4px;">
@@ -344,7 +344,11 @@
        * Close the delete layer
        */
       _closeDelete (i) {
-        this.$refs[`poptip-delete-${i}`][0].doClose()
+        if (i > 0) {
+          this.$refs[`poptip-delete-${i}`][0].doClose()
+        }else{
+          this.$refs['poptipDeleteAll'].doClose()
+        }
       },
       /**
        * delete
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/index.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/index.vue
index 6582817..7ed4126 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/index.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/index.vue
@@ -216,9 +216,6 @@
             right: 0;
             z-index: 2;
           }
-          td:last-child {
-            border-bottom:1px solid #ecf3ff;
-          }
           th:nth-last-child(2) {
             padding-right: 260px;
           }
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 189d59a..5ce0ead 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
@@ -57,7 +57,7 @@
               <span>{{$t('Retry Count')}}</span>
             </div>
           </th>
-          <th scope="col" style="min-width: 60px">
+          <th scope="col" style="min-width: 50px">
             <span>{{$t('Operation')}}</span>
           </th>
         </tr>
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue
index ad0ff08..e5cfd16 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue
@@ -171,7 +171,7 @@
         tr {
           th:last-child,td:last-child {
             background: inherit;
-            width: 60px;
... 4931 lines suppressed ...