This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 341f1c6 Automated deployment: c21afc9beeaa88a76c9b775ee393673ec39274f9
341f1c6 is described below
commit 341f1c6dcde142eff60d0d71119cd7de57ca29e6
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Jun 2 10:09:28 2021 +0000
Automated deployment: c21afc9beeaa88a76c9b775ee393673ec39274f9
---
build/{blog.e648da6.js => blog.cfdb16c.js} | 2 +-
en-us/blog/index.html | 2 +-
.../1620304011852-1621754591271.png | Bin 0 -> 104322 bytes
.../1620304011852.png | Bin 0 -> 104322 bytes
.../image-20210524102618970.png | Bin 0 -> 43546 bytes
.../image-20210524103609210.png | Bin 0 -> 34961 bytes
.../image-20210524104218236.png | Bin 0 -> 60544 bytes
.../image-20210524104503423.png | Bin 0 -> 45135 bytes
.../image-20210524104838911.png | Bin 0 -> 44057 bytes
.../image-20210524144950185.png | Bin 0 -> 96396 bytes
img/dolphinscheduler_json_20210601/json.png | Bin 0 -> 60578 bytes
zh-cn/blog/dolphinscheduler_json.html | 1043 ++++++++++++++++++++
zh-cn/blog/dolphinscheduler_json.json | 6 +
zh-cn/blog/index.html | 4 +-
14 files changed, 1053 insertions(+), 4 deletions(-)
diff --git a/build/blog.e648da6.js b/build/blog.cfdb16c.js
similarity index 80%
rename from build/blog.e648da6.js
rename to build/blog.cfdb16c.js
index f8e0407..4007b34 100644
--- a/build/blog.e648da6.js
+++ b/build/blog.cfdb16c.js
@@ -1 +1 @@
-webpackJsonp([1],{1:function(e,t){e.exports=React},2:function(e,t){e.exports=ReactDOM},401:function(e,t,n){e.exports=n(402)},402:function(e,t,n){"use
strict";function r(e){return e&&e.__esModule?e:{default:e}}function
a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a
function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been
initialised - super() hasn't been called");return!t||"object"!=typeof
t&&"function"!=typeof t?e:t}function l(e,t){if("functi [...]
\ No newline at end of file
+webpackJsonp([1],{1:function(e,t){e.exports=React},2:function(e,t){e.exports=ReactDOM},401:function(e,t,n){e.exports=n(402)},402:function(e,t,n){"use
strict";function r(e){return e&&e.__esModule?e:{default:e}}function
o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a
function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been
initialised - super() hasn't been called");return!t||"object"!=typeof
t&&"function"!=typeof t?e:t}function l(e,t){if("functi [...]
\ No newline at end of file
diff --git a/en-us/blog/index.html b/en-us/blog/index.html
index 248ef91..e23447a 100644
--- a/en-us/blog/index.html
+++ b/en-us/blog/index.html
@@ -16,7 +16,7 @@
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.98926a5.js"></script>
- <script src="/build/blog.e648da6.js"></script>
+ <script src="/build/blog.cfdb16c.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
diff --git a/img/dolphinscheduler_json_20210601/1620304011852-1621754591271.png
b/img/dolphinscheduler_json_20210601/1620304011852-1621754591271.png
new file mode 100644
index 0000000..c77df50
Binary files /dev/null and
b/img/dolphinscheduler_json_20210601/1620304011852-1621754591271.png differ
diff --git a/img/dolphinscheduler_json_20210601/1620304011852.png
b/img/dolphinscheduler_json_20210601/1620304011852.png
new file mode 100644
index 0000000..c77df50
Binary files /dev/null and
b/img/dolphinscheduler_json_20210601/1620304011852.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524102618970.png
b/img/dolphinscheduler_json_20210601/image-20210524102618970.png
new file mode 100644
index 0000000..e0203e1
Binary files /dev/null and
b/img/dolphinscheduler_json_20210601/image-20210524102618970.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524103609210.png
b/img/dolphinscheduler_json_20210601/image-20210524103609210.png
new file mode 100644
index 0000000..bcccd89
Binary files /dev/null and
b/img/dolphinscheduler_json_20210601/image-20210524103609210.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524104218236.png
b/img/dolphinscheduler_json_20210601/image-20210524104218236.png
new file mode 100644
index 0000000..7cea660
Binary files /dev/null and
b/img/dolphinscheduler_json_20210601/image-20210524104218236.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524104503423.png
b/img/dolphinscheduler_json_20210601/image-20210524104503423.png
new file mode 100644
index 0000000..51d5d4e
Binary files /dev/null and
b/img/dolphinscheduler_json_20210601/image-20210524104503423.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524104838911.png
b/img/dolphinscheduler_json_20210601/image-20210524104838911.png
new file mode 100644
index 0000000..053303b
Binary files /dev/null and
b/img/dolphinscheduler_json_20210601/image-20210524104838911.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524144950185.png
b/img/dolphinscheduler_json_20210601/image-20210524144950185.png
new file mode 100644
index 0000000..0c0bb8a
Binary files /dev/null and
b/img/dolphinscheduler_json_20210601/image-20210524144950185.png differ
diff --git a/img/dolphinscheduler_json_20210601/json.png
b/img/dolphinscheduler_json_20210601/json.png
new file mode 100644
index 0000000..4f0b40f
Binary files /dev/null and b/img/dolphinscheduler_json_20210601/json.png differ
diff --git a/zh-cn/blog/dolphinscheduler_json.html
b/zh-cn/blog/dolphinscheduler_json.html
new file mode 100644
index 0000000..6e01b85
--- /dev/null
+++ b/zh-cn/blog/dolphinscheduler_json.html
@@ -0,0 +1,1043 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0,
maximum-scale=1.0, user-scalable=no">
+ <meta name="keywords" content="dolphinscheduler_json">
+ <meta name="description" content="dolphinscheduler_json">
+ <title>dolphinscheduler_json</title>
+ <link rel="shortcut icon" href="/img/favicon.ico">
+ <link rel="stylesheet" href="/build/vendor.c5ba65d.css">
+ <link rel="stylesheet" href="/build/blog.md.fd8b187.css">
+</head>
+<body>
+ <div id="root"><div class="blog-detail-page" data-reactroot=""><header
class="header-container header-container-dark"><div class="header-body"><a
href="/zh-cn/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div
class="search search-dark"><span class="icon-search"></span></div><span
class="language-switch language-switch-dark">En</span><div
class="header-menu"><img class="header-menu-toggle"
src="/img/system/menu_white.png"/><div><ul class="ant-menu whiteClass
ant-menu-li [...]
+<h2>1、为什么拆解json</h2>
+<p>在dolphinscheduler
1.3.x及以前的工作流中的任务及任务关系保存时是以大json的方式保存到数据库中process_definiton表的process_definition_json字段,如果某个工作流很大比如有100或者1000个任务,这个json字段也就非常大,在使用时需要解析json,非常耗费性能,且任务没法重用;基于大json,在工作流版本及任务版本上也没有好的实现方案,否则会导致数据大量冗余。</p>
+<p>故社区计划启动json拆解项目,实现的需求目标:</p>
+<ul>
+<li>大json完全拆分</li>
+<li>新增工作流及任务版本</li>
+<li>引入全局唯一键(code)</li>
+</ul>
+<h2>2、如何设计拆解后的表</h2>
+<h3>1、1.3.6版本工作流</h3>
+<p>1、比如在当前1.3.6版本创建个a-->b的工作流</p>
+<p><img src="/img/dolphinscheduler_json_20210601/image-20210524102618970.png"
alt="image-20210524102618970"></p>
+<p>以下是processDefiniton save 接口在controller入口打印的入参日志</p>
+<pre><code>create process definition, project name: hadoop, process
definition name: ab, process_definition_json:
{"globalParams":[],"tasks":[{"type":"SHELL","id":"tasks-77643","name":"a","params":{"resourceList":[],"localParams":[{"prop":"yesterday","direct":"IN","type":"VARCHAR","value":"${system.biz.da
[...]
+</code></pre>
+<p>2、依赖节点的工作流,dep是依赖节点</p>
+<p><img src="/img/dolphinscheduler_json_20210601/image-20210524104503423.png"
alt="image-20210524104503423"></p>
+<p>以下是processDefiniton save 接口在controller入口打印的入参日志</p>
+<pre><code> create process definition, project name: hadoop, process
definition name: dep_c, process_definition_json:
{"globalParams":[],"tasks":[{"type":"SHELL","id":"tasks-69503","name":"c","params":{"resourceList":[],"localParams":[],"rawScript":"echo
11"},"description":"","timeout":{"strategy":"","int
[...]
+</code></pre>
+<p>3、条件判断的工作流</p>
+<p><img src="/img/dolphinscheduler_json_20210601/image-20210524104218236.png"
alt="image-20210524104218236"></p>
+<p>以下是processDefiniton save 接口在controller入口打印的入参日志</p>
+<pre><code>create process definition, project name: hadoop, process
definition name: condition_test, process_definition_json:
{"globalParams":[],"tasks":[{"type":"SHELL","id":"tasks-68456","name":"d","params":{"resourceList":[],"localParams":[],"rawScript":"echo
11"},"description":"","timeout":{"strategy":"",&
[...]
+</code></pre>
+<p>从以上三个案例中,我们知道controller的入口参数的每个参数都可以在t_ds_process_definition表中找到对应,故表中数据如下图</p>
+<p><img src="/img/dolphinscheduler_json_20210601/image-20210524104838911.png"
alt="image-20210524104838911"></p>
+<h3>2、拆解后的表设计思路</h3>
+<p>工作流只是dag的展现形式,任务通过工作流进行组织,组织的同时存在了任务之间的关系,也就是依赖。就好比一个画板,画板上有些图案,工作流就是画板,图案就是任务,图案之间的关系就是依赖。而调度的核心是调度任务,依赖只是表述调度的先后顺序。当前定时还是对整个工作流进行的定时,拆解后就方便对单独任务进行调度。正是基于这个思想设计了拆解的思路,所以这就需要三张表,工作流定义表、任务定义表、任务关系表。</p>
+<ul>
+<li>工作流定义表:描述工作流的基本信息,比如全局参数、dag中节点的位置信息</li>
+<li>任务定义表:描述任务的详情信息,比如任务类别、任务容错信息、优先级等</li>
+<li>任务关系表:描述任务的关系信息,比如当前节点、前置节点等</li>
+</ul>
+<p>基于这个设计思想再扩展到版本,无非是对于这三张表,每张表新增个保存版本的日志表。</p>
+<h4>工作流定义表</h4>
+<p>现在看案例中save接口日志,现有字段(project、process_definition_name、desc、locations、connects),对于json中除了task之外的还剩下</p>
+<pre><code class="language-json">{<span
class="hljs-attr">"globalParams"</span>:[],<span
class="hljs-attr">"tenantId"</span>:<span
class="hljs-number">1</span>,<span
class="hljs-attr">"timeout"</span>:<span class="hljs-number">0</span>}
+</code></pre>
+<p>所以可知工作流定义表:</p>
+<pre><code class="language-sql"><span class="hljs-keyword">CREATE</span> <span
class="hljs-keyword">TABLE</span> `t_ds_process_definition` (
+ `id` <span class="hljs-type">int</span>(<span class="hljs-number">11</span>)
<span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>
AUTO_INCREMENT COMMENT <span class="hljs-string">'self-increasing
id'</span>,
+ `code` <span class="hljs-type">bigint</span>(<span
class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'encoding'</span>,
+ `name` <span class="hljs-type">varchar</span>(<span
class="hljs-number">200</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'process definition name'</span>,
+ `version` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'process definition version'</span>,
+ `description` text COMMENT <span
class="hljs-string">'description'</span>,
+ `project_code` <span class="hljs-type">bigint</span>(<span
class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'project code'</span>,
+ `release_state` tinyint(<span class="hljs-number">4</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>
COMMENT <span class="hljs-string">'process definition release
state:0:offline,1:online'</span>,
+ `user_id` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'process definition creator id'</span>,
+ `global_params` text COMMENT <span class="hljs-string">'global
parameters'</span>,
+ `flag` tinyint(<span class="hljs-number">4</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>
COMMENT <span class="hljs-string">'0 not available, 1
available'</span>,
+ `locations` text COMMENT <span class="hljs-string">'Node location
information'</span>,
+ `connects` text COMMENT <span class="hljs-string">'Node connection
information'</span>,
+ `warning_group_id` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">'alert
group id'</span>,
+ `timeout` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-string">'0'</span> COMMENT <span
class="hljs-string">'time out, unit: minute'</span>,
+ `tenant_id` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span
class="hljs-keyword">NULL</span> <span class="hljs-keyword">DEFAULT</span>
<span class="hljs-string">'-1'</span> COMMENT <span
class="hljs-string">'tenant id'</span>,
+ `create_time` datetime <span class="hljs-keyword">NOT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">'create
time'</span>,
+ `update_time` datetime <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">'update
time'</span>,
+ <span class="hljs-keyword">PRIMARY</span> KEY (`id`,`code`),
+ <span class="hljs-keyword">UNIQUE</span> KEY `process_unique`
(`name`,`project_code`) <span class="hljs-keyword">USING</span> BTREE
+) ENGINE<span class="hljs-operator">=</span>InnoDB <span
class="hljs-keyword">DEFAULT</span> CHARSET<span
class="hljs-operator">=</span>utf8;
+
+<span class="hljs-keyword">CREATE</span> <span
class="hljs-keyword">TABLE</span> `t_ds_process_definition_log` (
+ `id` <span class="hljs-type">int</span>(<span class="hljs-number">11</span>)
<span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>
AUTO_INCREMENT COMMENT <span class="hljs-string">'self-increasing
id'</span>,
+ `code` <span class="hljs-type">bigint</span>(<span
class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'encoding'</span>,
+ `name` <span class="hljs-type">varchar</span>(<span
class="hljs-number">200</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'process definition name'</span>,
+ `version` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'process definition version'</span>,
+ `description` text COMMENT <span
class="hljs-string">'description'</span>,
+ `project_code` <span class="hljs-type">bigint</span>(<span
class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'project code'</span>,
+ `release_state` tinyint(<span class="hljs-number">4</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>
COMMENT <span class="hljs-string">'process definition release
state:0:offline,1:online'</span>,
+ `user_id` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'process definition creator id'</span>,
+ `global_params` text COMMENT <span class="hljs-string">'global
parameters'</span>,
+ `flag` tinyint(<span class="hljs-number">4</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>
COMMENT <span class="hljs-string">'0 not available, 1
available'</span>,
+ `locations` text COMMENT <span class="hljs-string">'Node location
information'</span>,
+ `connects` text COMMENT <span class="hljs-string">'Node connection
information'</span>,
+ `warning_group_id` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">'alert
group id'</span>,
+ `timeout` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-string">'0'</span> COMMENT <span
class="hljs-string">'time out,unit: minute'</span>,
+ `tenant_id` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span
class="hljs-keyword">NULL</span> <span class="hljs-keyword">DEFAULT</span>
<span class="hljs-string">'-1'</span> COMMENT <span
class="hljs-string">'tenant id'</span>,
+ `operator` <span class="hljs-type">int</span>(<span
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'operator user id'</span>,
+ `operate_time` datetime <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span
class="hljs-string">'operate time'</span>,
+ `create_time` datetime <span class="hljs-keyword">NOT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">'create
time'</span>,
+ `update_time` datetime <span class="hljs-keyword">DEFAULT</span> <span
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">'update
time'</span>,
+ <span class="hljs-keyword">PRIMARY</span> KEY (`id`)
+) ENGINE<span class="hljs-operator">=</span>InnoDB <span
class="hljs-keyword">DEFAULT</span> CHARSET<span
class="hljs-operator">=</span>utf8;
+</code></pre>
+<p>从表字段可以看出 日志表仅仅比主表多了两个字段operator、operate_time</p>
+<h4>任务定义表</h4>
+<p>案例中ab工作流task的json</p>
+<pre><code class="language-json"> "tasks": [{
+ "type": "SHELL",
+ "id": "tasks-77643",
+ "name": "a",
+ "params": {
+ "resourceList": [],
+ "localParams": [{
+ "prop": "yesterday",
+ "direct": "IN",
+ "type": "VARCHAR",
+ "value":
"${system.biz.date}"
+ }],
+ "rawScript": "echo ${yesterday}"
+ },
+ "description": "",
+ "timeout": {
+ "strategy": "",
+ "interval": null,
+ "enable": false
+ },
+ "runFlag": "NORMAL",
+ "conditionResult": {
+ "successNode": [""],
+ "failedNode": [""]
+ },
+ "dependence": {},
+ "maxRetryTimes": "0",
+ "retryInterval": "1",
+ "taskInstancePriority": "MEDIUM",
+ "workerGroup": "default",
+ "preTasks": []
+ }, {
+ "type": "SHELL",
+ "id": "tasks-99814",
+ "name": "b",
+ "params": {
+ "resourceList": [],
+ "localParams": [{
+ "prop": "today",
+ "direct": "IN",
+ "type": "VARCHAR",
+ "value":
"${system.biz.curdate}"
+ }],
+ "rawScript": "echo ${today}"
+ },
+ "description": "",
+ "timeout": {
+ "strategy": "",
+ "interval": null,
+ "enable": false
+ },
+ "runFlag": "NORMAL",
+ "conditionResult": {
+ "successNode": [""],
+ "failedNode": [""]
+ },
+ "dependence": {},
+ "maxRetryTimes": "0",
+ "retryInterval": "1",
+ "taskInstancePriority": "MEDIUM",
+ "workerGroup": "default",
+ "preTasks": ["a"]
+ }]
+</code></pre>
+<p>dep_c工作流task的json</p>
+<pre><code class="language-json"> "tasks": [{
+ "type": "SHELL",
+ "id": "tasks-69503",
+ "name": "c",
+ "params": {
+ "resourceList": [],
+ "localParams": [],
+ "rawScript": "echo 11"
+ },
+ "description": "",
+ "timeout": {
+ "strategy": "",
+ "interval": null,
+ "enable": false
+ },
+ "runFlag": "NORMAL",
+ "conditionResult": {
+ "successNode": [""],
+ "failedNode": [""]
+ },
+ "dependence": {},
+ "maxRetryTimes": "0",
+ "retryInterval": "1",
+ "taskInstancePriority": "MEDIUM",
+ "workerGroup": "default",
+ "preTasks": ["dep"]
+ }, {
+ "type": "DEPENDENT",
+ "id": "tasks-22756",
+ "name": "dep",
+ "params": {},
+ "description": "",
+ "timeout": {
+ "strategy": "",
+ "interval": null,
+ "enable": false
+ },
+ "runFlag": "NORMAL",
+ "conditionResult": {
+ "successNode": [""],
+ "failedNode": [""]
+ },
+ "dependence": {
+ "relation": "AND",
+ "dependTaskList": [{
+ "relation": "AND",
+ "dependItemList": [{
+ "projectId": 1,
+ "definitionId": 1,
+ "depTasks": "b",
+ "cycle": "day",
+ "dateValue": "today"
+ }]
+ }]
+ },
+ "maxRetryTimes": "0",
+ "retryInterval": "1",
+ "taskInstancePriority": "MEDIUM",
+ "workerGroup": "default",
+ "preTasks": []
+ }]
+</code></pre>
+<p>condition_test工作流task的json</p>
+<pre><code class="language-json"> "tasks": [{
+ "type": "SHELL",
+ "id": "tasks-68456",
+ "name": "d",
+ "params": {
+ "resourceList": [],
+ "localParams": [],
+ "rawScript": "echo 11"
+ },
+ "description": "",
+ "timeout": {
+ "strategy": "",
+ "interval": null,
+ "enable": false
+ },
+ "runFlag": "NORMAL",
+ "conditionResult": {
+ "successNode": [""],
+ "failedNode": [""]
+ },
+ "dependence": {},
+ "maxRetryTimes": "0",
+ "retryInterval": "1",
+ "taskInstancePriority": "MEDIUM",
+ "workerGroup": "default",
+ "preTasks": []
+ }, {
+ "type": "SHELL",
+ "id": "tasks-58183",
+ "name": "e",
+ "params": {
+ "resourceList": [],
+ "localParams": [],
+ "rawScript": "echo 22"
+ },
+ "description": "",
+ "timeout": {
+ "strategy": "",
+ "interval": null,
+ "enable": false
+ },
+ "runFlag": "NORMAL",
+ "conditionResult": {
+ "successNode": [""],
+ "failedNode": [""]
+ },
+ "dependence": {},
+ "maxRetryTimes": "0",
+ "retryInterval": "1",
+ "taskInstancePriority": "MEDIUM",
+ "workerGroup": "default",
+ "preTasks": ["cond"]
+ }, {
+ "type": "SHELL",
+ "id": "tasks-43996",
+ "name": "f",
+ "params": {
+ "resourceList": [],
+ "localParams": [],
+ "rawScript": "echo 33"
+ },
+ "description": "",
+ "timeout": {
+ "strategy": "",
+ "interval": null,
+ "enable": false
+ },
+ "runFlag": "NORMAL",
+ "conditionResult": {
+ "successNode": [""],
+ "failedNode": [""]
+ },
+ "dependence": {},
+ "maxRetryTimes": "0",
+ "retryInterval": "1",
+ "taskInstancePriority": "MEDIUM",
+ "workerGroup": "default",
+ "preTasks": ["cond"]
+ }, {
+ "type": "CONDITIONS",
+ "id": "tasks-38972",
+ "name": "cond",
+ "params": {},
+ "description": "",
+ "timeout": {
+ "strategy": "",
+ "interval": null,
+ "enable": false
+ },
+ "runFlag": "NORMAL",
+ "conditionResult": {
+ "successNode": ["e"],
+ "failedNode": ["f"]
+ },
+ "dependence": {
+ "relation": "AND",
+ "dependTaskList": [{
+ "relation": "AND",
+ "dependItemList": [{
+ "depTasks": "d",
+ "status": "SUCCESS"
+ }]
+ }]
+ },
+ "maxRetryTimes": "0",
+ "retryInterval": "1",
+ "taskInstancePriority": "MEDIUM",
+ "workerGroup": "default",
+ "preTasks": ["d"]
+ }]
+</code></pre>
+<p>从案例中可以知道SHELL/DEPENDENT/CONDITIONS类型的节点的json构成(其他任务类似SHELL),preTasks标识前置依赖节点。conditionResult结构比较固定,而dependence结构复杂,DEPENDENT和CONDITIONS类型任务的dependence结构还不一样,所以为了统一,我们将conditionResult和dependence整体放到params中,params对应表字段的task_params。</p>
+<p>这样我们就确定了t_ds_task_definition表</p>
+<pre><code class="language-mysql"><span class="hljs-keyword">CREATE</span>
<span class="hljs-keyword">TABLE</span> <span
class="hljs-string">`t_ds_task_definition`</span> (
+ <span class="hljs-string">`id`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>
AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'self-increasing id'</span>,
+ <span class="hljs-string">`code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'encoding'</span>,
+ <span class="hljs-string">`name`</span> <span
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>)
<span class="hljs-keyword">DEFAULT</span> <span
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'task definition name'</span>,
+ <span class="hljs-string">`version`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'task
definition version'</span>,
+ <span class="hljs-string">`description`</span> <span
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'description'</span>,
+ <span class="hljs-string">`project_code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'project
code'</span>,
+ <span class="hljs-string">`user_id`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'task
definition creator id'</span>,
+ <span class="hljs-string">`task_type`</span> <span
class="hljs-built_in">varchar</span>(<span class="hljs-number">50</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'task
type'</span>,
+ <span class="hljs-string">`task_params`</span> <span
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'job custom parameters'</span>,
+ <span class="hljs-string">`flag`</span> <span
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'0 not
available, 1 available'</span>,
+ <span class="hljs-string">`task_priority`</span> <span
class="hljs-built_in">tinyint</span>(<span class="hljs-number">4</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'job
priority'</span>,
+ <span class="hljs-string">`worker_group`</span> <span
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>)
<span class="hljs-keyword">DEFAULT</span> <span
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'worker grouping'</span>,
+ <span class="hljs-string">`fail_retry_times`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'number of failed retries'</span>,
+ <span class="hljs-string">`fail_retry_interval`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'failed retry interval'</span>,
+ <span class="hljs-string">`timeout_flag`</span> <span
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span
class="hljs-keyword">DEFAULT</span> <span
class="hljs-string">'0'</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'timeout
flag:0 close, 1 open'</span>,
+ <span class="hljs-string">`timeout_notify_strategy`</span> <span
class="hljs-built_in">tinyint</span>(<span class="hljs-number">4</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'timeout notification policy: 0 warning, 1
fail'</span>,
+ <span class="hljs-string">`timeout`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span
class="hljs-string">'0'</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'timeout
length,unit: minute'</span>,
+ <span class="hljs-string">`delay_time`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span
class="hljs-string">'0'</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'delay
execution time,unit: minute'</span>,
+ <span class="hljs-string">`resource_ids`</span> <span
class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>)
<span class="hljs-keyword">DEFAULT</span> <span
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'resource id, separated by comma'</span>,
+ <span class="hljs-string">`create_time`</span> datetime <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'create
time'</span>,
+ <span class="hljs-string">`update_time`</span> datetime <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'update time'</span>,
+ PRIMARY <span class="hljs-keyword">KEY</span> (<span
class="hljs-string">`id`</span>,<span class="hljs-string">`code`</span>),
+ <span class="hljs-keyword">UNIQUE</span> <span
class="hljs-keyword">KEY</span> <span class="hljs-string">`task_unique`</span>
(<span class="hljs-string">`name`</span>,<span
class="hljs-string">`project_code`</span>) <span
class="hljs-keyword">USING</span> BTREE
+) <span class="hljs-keyword">ENGINE</span>=<span
class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span>
<span class="hljs-keyword">CHARSET</span>=utf8;
+
+<span class="hljs-keyword">CREATE</span> <span
class="hljs-keyword">TABLE</span> <span
class="hljs-string">`t_ds_task_definition_log`</span> (
+ <span class="hljs-string">`id`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>
AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'self-increasing id'</span>,
+ <span class="hljs-string">`code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'encoding'</span>,
+ <span class="hljs-string">`name`</span> <span
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>)
<span class="hljs-keyword">DEFAULT</span> <span
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'task definition name'</span>,
+ <span class="hljs-string">`version`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'task
definition version'</span>,
+ <span class="hljs-string">`description`</span> <span
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'description'</span>,
+ <span class="hljs-string">`project_code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'project
code'</span>,
+ <span class="hljs-string">`user_id`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'task
definition creator id'</span>,
+ <span class="hljs-string">`task_type`</span> <span
class="hljs-built_in">varchar</span>(<span class="hljs-number">50</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'task
type'</span>,
+ <span class="hljs-string">`task_params`</span> <span
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'job custom parameters'</span>,
+ <span class="hljs-string">`flag`</span> <span
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'0 not
available, 1 available'</span>,
+ <span class="hljs-string">`task_priority`</span> <span
class="hljs-built_in">tinyint</span>(<span class="hljs-number">4</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'job
priority'</span>,
+ <span class="hljs-string">`worker_group`</span> <span
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>)
<span class="hljs-keyword">DEFAULT</span> <span
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'worker grouping'</span>,
+ <span class="hljs-string">`fail_retry_times`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'number of failed retries'</span>,
+ <span class="hljs-string">`fail_retry_interval`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'failed retry interval'</span>,
+ <span class="hljs-string">`timeout_flag`</span> <span
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span
class="hljs-keyword">DEFAULT</span> <span
class="hljs-string">'0'</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'timeout
flag:0 close, 1 open'</span>,
+ <span class="hljs-string">`timeout_notify_strategy`</span> <span
class="hljs-built_in">tinyint</span>(<span class="hljs-number">4</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'timeout notification policy: 0 warning, 1
fail'</span>,
+ <span class="hljs-string">`timeout`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span
class="hljs-string">'0'</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'timeout
length,unit: minute'</span>,
+ <span class="hljs-string">`delay_time`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span
class="hljs-string">'0'</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'delay
execution time,unit: minute'</span>,
+ <span class="hljs-string">`resource_ids`</span> <span
class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>)
<span class="hljs-keyword">DEFAULT</span> <span
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'resource id, separated by comma'</span>,
+ <span class="hljs-string">`operator`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'operator user id'</span>,
+ <span class="hljs-string">`operate_time`</span> datetime <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'operate time'</span>,
+ <span class="hljs-string">`create_time`</span> datetime <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'create
time'</span>,
+ <span class="hljs-string">`update_time`</span> datetime <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'update time'</span>,
+ PRIMARY <span class="hljs-keyword">KEY</span> (<span
class="hljs-string">`id`</span>)
+) <span class="hljs-keyword">ENGINE</span>=<span
class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span>
<span class="hljs-keyword">CHARSET</span>=utf8;
+</code></pre>
+<p><strong>注意:dev版本和1.3.6版本区别,dev版本已将description换成desc,并且新增了delayTime</strong></p>
+<pre><code class="language-json">{
+ <span class="hljs-attr">"globalParams"</span>: [],
+ <span class="hljs-attr">"tasks"</span>: [{
+ <span class="hljs-attr">"type"</span>: <span
class="hljs-string">"SHELL"</span>,
+ <span class="hljs-attr">"id"</span>: <span
class="hljs-string">"tasks-18200"</span>,
+ <span class="hljs-attr">"name"</span>: <span
class="hljs-string">"d"</span>,
+ <span class="hljs-attr">"code"</span>: <span
class="hljs-string">""</span>,
+ <span class="hljs-attr">"params"</span>: {
+ <span
class="hljs-attr">"resourceList"</span>: [],
+ <span
class="hljs-attr">"localParams"</span>: [],
+ <span
class="hljs-attr">"rawScript"</span>: <span
class="hljs-string">"echo 5"</span>
+ },
+ <span class="hljs-attr">"desc"</span>: <span
class="hljs-string">""</span>,
+ <span class="hljs-attr">"runFlag"</span>:
<span class="hljs-string">"NORMAL"</span>,
+ <span
class="hljs-attr">"conditionResult"</span>: {
+ <span
class="hljs-attr">"successNode"</span>: [
+ <span
class="hljs-string">""</span>
+ ],
+ <span
class="hljs-attr">"failedNode"</span>: [
+ <span
class="hljs-string">""</span>
+ ]
+ },
+ <span class="hljs-attr">"dependence"</span>:
{},
+ <span
class="hljs-attr">"maxRetryTimes"</span>: <span
class="hljs-string">"0"</span>,
+ <span
class="hljs-attr">"retryInterval"</span>: <span
class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"delayTime"</span>:
<span class="hljs-string">"0"</span>,
+ <span class="hljs-attr">"timeout"</span>: {
+ <span
class="hljs-attr">"strategy"</span>: <span
class="hljs-string">""</span>,
+ <span
class="hljs-attr">"interval"</span>: <span
class="hljs-literal">null</span>,
+ <span
class="hljs-attr">"enable"</span>: <span
class="hljs-literal">false</span>
+ },
+ <span
class="hljs-attr">"waitStartTimeout"</span>: {},
+ <span
class="hljs-attr">"taskInstancePriority"</span>: <span
class="hljs-string">"MEDIUM"</span>,
+ <span class="hljs-attr">"workerGroup"</span>:
<span class="hljs-string">"hadoop"</span>,
+ <span class="hljs-attr">"preTasks"</span>: [],
+ <span class="hljs-attr">"depList"</span>:
<span class="hljs-literal">null</span>
+ },
+ {
+ <span class="hljs-attr">"type"</span>: <span
class="hljs-string">"SHELL"</span>,
+ <span class="hljs-attr">"id"</span>: <span
class="hljs-string">"tasks-55225"</span>,
+ <span class="hljs-attr">"name"</span>: <span
class="hljs-string">"e"</span>,
+ <span class="hljs-attr">"code"</span>: <span
class="hljs-string">""</span>,
+ <span class="hljs-attr">"params"</span>: {
+ <span
class="hljs-attr">"resourceList"</span>: [],
+ <span
class="hljs-attr">"localParams"</span>: [],
+ <span
class="hljs-attr">"rawScript"</span>: <span
class="hljs-string">"echo 6"</span>
+ },
+ <span class="hljs-attr">"desc"</span>: <span
class="hljs-string">""</span>,
+ <span class="hljs-attr">"runFlag"</span>:
<span class="hljs-string">"NORMAL"</span>,
+ <span
class="hljs-attr">"conditionResult"</span>: {
+ <span
class="hljs-attr">"successNode"</span>: [
+ <span
class="hljs-string">""</span>
+ ],
+ <span
class="hljs-attr">"failedNode"</span>: [
+ <span
class="hljs-string">""</span>
+ ]
+ },
+ <span class="hljs-attr">"dependence"</span>:
{},
+ <span
class="hljs-attr">"maxRetryTimes"</span>: <span
class="hljs-string">"0"</span>,
+ <span
class="hljs-attr">"retryInterval"</span>: <span
class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"delayTime"</span>:
<span class="hljs-string">"0"</span>,
+ <span class="hljs-attr">"timeout"</span>: {
+ <span
class="hljs-attr">"strategy"</span>: <span
class="hljs-string">""</span>,
+ <span
class="hljs-attr">"interval"</span>: <span
class="hljs-literal">null</span>,
+ <span
class="hljs-attr">"enable"</span>: <span
class="hljs-literal">false</span>
+ },
+ <span
class="hljs-attr">"waitStartTimeout"</span>: {},
+ <span
class="hljs-attr">"taskInstancePriority"</span>: <span
class="hljs-string">"MEDIUM"</span>,
+ <span class="hljs-attr">"workerGroup"</span>:
<span class="hljs-string">"hadoop"</span>,
+ <span class="hljs-attr">"preTasks"</span>: [
+ <span class="hljs-string">"def"</span>
+ ],
+ <span class="hljs-attr">"depList"</span>:
<span class="hljs-literal">null</span>
+ },
+ {
+ <span class="hljs-attr">"type"</span>: <span
class="hljs-string">"SHELL"</span>,
+ <span class="hljs-attr">"id"</span>: <span
class="hljs-string">"tasks-67639"</span>,
+ <span class="hljs-attr">"name"</span>: <span
class="hljs-string">"f"</span>,
+ <span class="hljs-attr">"code"</span>: <span
class="hljs-string">""</span>,
+ <span class="hljs-attr">"params"</span>: {
+ <span
class="hljs-attr">"resourceList"</span>: [],
+ <span
class="hljs-attr">"localParams"</span>: [],
+ <span
class="hljs-attr">"rawScript"</span>: <span
class="hljs-string">"echo 7"</span>
+ },
+ <span class="hljs-attr">"desc"</span>: <span
class="hljs-string">""</span>,
+ <span class="hljs-attr">"runFlag"</span>:
<span class="hljs-string">"NORMAL"</span>,
+ <span
class="hljs-attr">"conditionResult"</span>: {
+ <span
class="hljs-attr">"successNode"</span>: [
+ <span
class="hljs-string">""</span>
+ ],
+ <span
class="hljs-attr">"failedNode"</span>: [
+ <span
class="hljs-string">""</span>
+ ]
+ },
+ <span class="hljs-attr">"dependence"</span>:
{},
+ <span
class="hljs-attr">"maxRetryTimes"</span>: <span
class="hljs-string">"0"</span>,
+ <span
class="hljs-attr">"retryInterval"</span>: <span
class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"delayTime"</span>:
<span class="hljs-string">"0"</span>,
+ <span class="hljs-attr">"timeout"</span>: {
+ <span
class="hljs-attr">"strategy"</span>: <span
class="hljs-string">""</span>,
+ <span
class="hljs-attr">"interval"</span>: <span
class="hljs-literal">null</span>,
+ <span
class="hljs-attr">"enable"</span>: <span
class="hljs-literal">false</span>
+ },
+ <span
class="hljs-attr">"waitStartTimeout"</span>: {},
+ <span
class="hljs-attr">"taskInstancePriority"</span>: <span
class="hljs-string">"MEDIUM"</span>,
+ <span class="hljs-attr">"workerGroup"</span>:
<span class="hljs-string">"hadoop"</span>,
+ <span class="hljs-attr">"preTasks"</span>: [
+ <span class="hljs-string">"def"</span>
+ ],
+ <span class="hljs-attr">"depList"</span>:
<span class="hljs-literal">null</span>
+ },
+ {
+ <span class="hljs-attr">"type"</span>: <span
class="hljs-string">"CONDITIONS"</span>,
+ <span class="hljs-attr">"id"</span>: <span
class="hljs-string">"tasks-67387"</span>,
+ <span class="hljs-attr">"name"</span>: <span
class="hljs-string">"def"</span>,
+ <span class="hljs-attr">"code"</span>: <span
class="hljs-string">""</span>,
+ <span class="hljs-attr">"params"</span>: {},
+ <span class="hljs-attr">"desc"</span>: <span
class="hljs-string">""</span>,
+ <span class="hljs-attr">"runFlag"</span>:
<span class="hljs-string">"NORMAL"</span>,
+ <span
class="hljs-attr">"conditionResult"</span>: {
+ <span
class="hljs-attr">"successNode"</span>: [
+ <span
class="hljs-string">"e"</span>
+ ],
+ <span
class="hljs-attr">"failedNode"</span>: [
+ <span
class="hljs-string">"f"</span>
+ ]
+ },
+ <span class="hljs-attr">"dependence"</span>: {
+ <span
class="hljs-attr">"relation"</span>: <span
class="hljs-string">"AND"</span>,
+ <span
class="hljs-attr">"dependTaskList"</span>: [{
+ <span
class="hljs-attr">"relation"</span>: <span
class="hljs-string">"AND"</span>,
+ <span
class="hljs-attr">"dependItemList"</span>: [{
+ <span
class="hljs-attr">"depTasks"</span>: <span
class="hljs-string">"d"</span>,
+ <span
class="hljs-attr">"status"</span>: <span
class="hljs-string">"SUCCESS"</span>
+ },
+ {
+ <span
class="hljs-attr">"depTasks"</span>: <span
class="hljs-string">"d"</span>,
+ <span
class="hljs-attr">"status"</span>: <span
class="hljs-string">"FAILURE"</span>
+ }
+ ]
+ }]
+ },
+ <span
class="hljs-attr">"maxRetryTimes"</span>: <span
class="hljs-string">"0"</span>,
+ <span
class="hljs-attr">"retryInterval"</span>: <span
class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"delayTime"</span>:
<span class="hljs-string">"0"</span>,
+ <span class="hljs-attr">"timeout"</span>: {
+ <span
class="hljs-attr">"strategy"</span>: <span
class="hljs-string">""</span>,
+ <span
class="hljs-attr">"interval"</span>: <span
class="hljs-literal">null</span>,
+ <span
class="hljs-attr">"enable"</span>: <span
class="hljs-literal">false</span>
+ },
+ <span
class="hljs-attr">"waitStartTimeout"</span>: {},
+ <span
class="hljs-attr">"taskInstancePriority"</span>: <span
class="hljs-string">"MEDIUM"</span>,
+ <span class="hljs-attr">"workerGroup"</span>:
<span class="hljs-string">"hadoop"</span>,
+ <span class="hljs-attr">"preTasks"</span>: [
+ <span class="hljs-string">"d"</span>
+ ],
+ <span class="hljs-attr">"depList"</span>:
<span class="hljs-literal">null</span>
+ }
+ ],
+ <span class="hljs-attr">"tenantId"</span>: <span
class="hljs-number">1</span>,
+ <span class="hljs-attr">"timeout"</span>: <span
class="hljs-number">0</span>
+}
+</code></pre>
+<h4>任务关系表</h4>
+<p>preTasks标识前置依赖节点,当前节点在关系表中使用postTask标识。由于当前节点肯定存在而前置节点不一定存在,所以post不可能为空,而preTask有可能为空</p>
+<pre><code class="language-mysql"><span class="hljs-keyword">CREATE</span>
<span class="hljs-keyword">TABLE</span> <span
class="hljs-string">`t_ds_process_task_relation`</span> (
+ <span class="hljs-string">`id`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>
AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'self-increasing id'</span>,
+ <span class="hljs-string">`name`</span> <span
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>)
<span class="hljs-keyword">DEFAULT</span> <span
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'relation name'</span>,
+ <span class="hljs-string">`process_definition_version`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'process version'</span>,
+ <span class="hljs-string">`project_code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'project
code'</span>,
+ <span class="hljs-string">`process_definition_code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'process
code'</span>,
+ <span class="hljs-string">`pre_task_code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'pre task
code'</span>,
+ <span class="hljs-string">`pre_task_version`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'pre task
version'</span>,
+ <span class="hljs-string">`post_task_code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'post task
code'</span>,
+ <span class="hljs-string">`post_task_version`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'post task
version'</span>,
+ <span class="hljs-string">`condition_type`</span> <span
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'condition type : 0 none, 1 judge 2 delay'</span>,
+ <span class="hljs-string">`condition_params`</span> <span
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'condition params(json)'</span>,
+ <span class="hljs-string">`create_time`</span> datetime <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'create
time'</span>,
+ <span class="hljs-string">`update_time`</span> datetime <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'update time'</span>,
+ PRIMARY <span class="hljs-keyword">KEY</span> (<span
class="hljs-string">`id`</span>)
+) <span class="hljs-keyword">ENGINE</span>=<span
class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span>
<span class="hljs-keyword">CHARSET</span>=utf8;
+
+<span class="hljs-keyword">CREATE</span> <span
class="hljs-keyword">TABLE</span> <span
class="hljs-string">`t_ds_process_task_relation_log`</span> (
+ <span class="hljs-string">`id`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>
AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'self-increasing id'</span>,
+ <span class="hljs-string">`name`</span> <span
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>)
<span class="hljs-keyword">DEFAULT</span> <span
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'relation name'</span>,
+ <span class="hljs-string">`process_definition_version`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'process version'</span>,
+ <span class="hljs-string">`project_code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'project
code'</span>,
+ <span class="hljs-string">`process_definition_code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'process
code'</span>,
+ <span class="hljs-string">`pre_task_code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'pre task
code'</span>,
+ <span class="hljs-string">`pre_task_version`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'pre task
version'</span>,
+ <span class="hljs-string">`post_task_code`</span> <span
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'post task
code'</span>,
+ <span class="hljs-string">`post_task_version`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'post task
version'</span>,
+ <span class="hljs-string">`condition_type`</span> <span
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'condition type : 0 none, 1 judge 2 delay'</span>,
+ <span class="hljs-string">`condition_params`</span> <span
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span>
<span class="hljs-string">'condition params(json)'</span>,
+ <span class="hljs-string">`operator`</span> <span
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'operator user id'</span>,
+ <span class="hljs-string">`operate_time`</span> datetime <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'operate time'</span>,
+ <span class="hljs-string">`create_time`</span> datetime <span
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span
class="hljs-keyword">COMMENT</span> <span class="hljs-string">'create
time'</span>,
+ <span class="hljs-string">`update_time`</span> datetime <span
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>
<span class="hljs-keyword">COMMENT</span> <span
class="hljs-string">'update time'</span>,
+ PRIMARY <span class="hljs-keyword">KEY</span> (<span
class="hljs-string">`id`</span>)
+) <span class="hljs-keyword">ENGINE</span>=<span
class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span>
<span class="hljs-keyword">CHARSET</span>=utf8;
+</code></pre>
+<p>对于依赖关系复杂的场景</p>
+<p><img src="/img/dolphinscheduler_json_20210601/image-20210524144950185.png"
alt="image-20210524144950185"></p>
+<h2>3、API模块如何改造</h2>
+<p><img
src="/img/dolphinscheduler_json_20210601/1620304011852-1621754591271.png"
alt="拆分方案-1620304011852"></p>
+<ul>
+<li>[ ] api模块进行save操作时</li>
+</ul>
+<ol>
+<li>通过雪花算法生成13位的数字作为process_definition_code,工作流定义保存至process_definition(主表)和process_definition_log(日志表),这两个表保存的是同样的数据,工作流定义版本为1</li>
+<li>通过雪花算法生成13位的数字作为task_definition_code,任务定义表保存至task_definition(主表)和task_definition_log(日志表),也是保存同样的数据,任务定义版本为1</li>
+<li>工作流任务关系保存在
process_task_relation(主表)和process_task_relation_log(日志表),该表保存的code和version是工作流的code和version,因为任务是通过工作流进行组织,以工作流来画dag。也是通过post_task_code和post_task_version标识dag的当前节点,这个节点的前置依赖通过pre_task_code和pre_task_version来标识,如果没有依赖,pre_task_code和pre_task_version为0</li>
+</ol>
+<ul>
+<li>
+<p>[ ]
api模块进行update操作时,工作流定义和任务定义直接更新主表数据,更新后的数据insert到日志表。关系表主表先删除然后再插入新的关系,关系表日志表直接插入新的关系</p>
+</li>
+<li>
+<p>[ ] api模块进行delete操作时,工作流定义、任务定义和关系表直接删除主表数据,日志表数据不变动</p>
+</li>
+<li>
+<p>[ ] api模块进行switch操作时,直接将日志表中对应version数据覆盖到主表</p>
+</li>
+</ul>
+<h2>4、数据交互如何改造</h2>
+<p><img src="/img/dolphinscheduler_json_20210601/json.png" alt="json"></p>
+<ul>
+<li>
+<p>[ ]
在json拆分一期api模块controller层整体未变动,传入的大json还是在service层映射为ProcessData对象。insert或update操作在公共Service模块通过ProcessService.saveProcessDefiniton()入口完成保存数据库操作,按照task_definition、process_task_relation、process_definition的顺序保存。保存时,如果该任务已经存在并且关联的工作流未上线,则更改任务;如果任务关联的工作流已上线,则不允许更改任务</p>
+</li>
+<li>
+<p>[ ]
api查询操作时,当前还是通过工作流id来查询,在公共Service模块通过ProcessService.genTaskNodeList()入口完成数据组装,还是组装为ProcessData对象,进而生成json返回</p>
+</li>
+<li>
+<p>[ ]
Server模块(Master)也是通过公共Service模块ProcessService.genTaskNodeList()获得TaskNodeList生成调度dag,把当前任务所有信息放到
MasterExecThread.readyToSubmitTaskQueue队列,以便生成taskInstance,dispatch给worker</p>
+</li>
+</ul>
+<h2>5、当前json还需做什么</h2>
+<ul>
+<li>controller对外restAPI接口改造</li>
+<li>ui模块dag改造</li>
+<li>ui模块新增task操作页面</li>
+</ul>
+<p><strong>processDefinition</strong></p>
+<table>
+<thead>
+<tr>
+<th>接口名称</th>
+<th>参数名称</th>
+<th style="text-align:center">参数说明</th>
+<th>数据类型</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td></td>
+<td>projectName</td>
+<td style="text-align:center">项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>name</td>
+<td style="text-align:center">流程定义名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>description</td>
+<td style="text-align:center">流程定义描述信息</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>globalParams</td>
+<td style="text-align:center">全局参数</td>
+<td>string</td>
+</tr>
+<tr>
+<td>save</td>
+<td>connects</td>
+<td style="text-align:center">流程定义节点图标连接信息(json格式)</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>locations</td>
+<td style="text-align:center">流程定义节点坐标位置信息(json格式)</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td><strong>timeout</strong></td>
+<td style="text-align:center"><strong>超时分钟数</strong></td>
+<td><strong>int</strong></td>
+</tr>
+<tr>
+<td></td>
+<td><strong>tenantId</strong></td>
+<td style="text-align:center"><strong>租户id</strong></td>
+<td><strong>int</strong></td>
+</tr>
+<tr>
+<td></td>
+<td><strong>taskRelationJson</strong></td>
+<td style="text-align:center"><strong>任务关系(json格式)</strong></td>
+<td><strong>string</strong></td>
+</tr>
+<tr>
+<td>--</td>
+<td>--</td>
+<td style="text-align:center">--</td>
+<td>--</td>
+</tr>
+<tr>
+<td></td>
+<td>projectName</td>
+<td style="text-align:center">项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td><strong>code</strong></td>
+<td style="text-align:center"><strong>流程定义code</strong></td>
+<td><strong>long</strong></td>
+</tr>
+<tr>
+<td></td>
+<td>name</td>
+<td style="text-align:center">流程定义名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>description</td>
+<td style="text-align:center">流程定义描述信息</td>
+<td>string</td>
+</tr>
+<tr>
+<td>update</td>
+<td>releaseState</td>
+<td style="text-align:center">发布流程定义,可用值:OFFLINE,ONLINE</td>
+<td>ref</td>
+</tr>
+<tr>
+<td></td>
+<td>connects</td>
+<td style="text-align:center">流程定义节点图标连接信息(json格式)</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>locations</td>
+<td style="text-align:center">流程定义节点坐标位置信息(json格式)</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td><strong>timeout</strong></td>
+<td style="text-align:center"><strong>超时分钟数</strong></td>
+<td><strong>int</strong></td>
+</tr>
+<tr>
+<td></td>
+<td><strong>tenantId</strong></td>
+<td style="text-align:center"><strong>租户id</strong></td>
+<td><strong>int</strong></td>
+</tr>
+<tr>
+<td></td>
+<td><strong>taskRelationJson</strong></td>
+<td style="text-align:center"><strong>任务关系(json格式)</strong></td>
+<td><strong>string</strong></td>
+</tr>
+<tr>
+<td></td>
+<td>--</td>
+<td style="text-align:center">--</td>
+<td>--</td>
+</tr>
+<tr>
+<td></td>
+<td><strong>code</strong></td>
+<td style="text-align:center"><strong>流程定义code</strong></td>
+<td><strong>long</strong></td>
+</tr>
+<tr>
+<td>switch/deleteCode</td>
+<td>projectName</td>
+<td style="text-align:center">项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>version</td>
+<td style="text-align:center">版本号</td>
+<td>string</td>
+</tr>
+</tbody>
+</table>
+<p>备注:taskRelationJson格式:[{"name":"","pre_task_code":0,"pre_task_version":0,"post_task_code":123456789,"post_task_version":1,"condition_type":0,"condition_params":{}},{"name":"","pre_task_code":123456789,"pre_task_version":1,"post_task_code":123451234,"post_task_version":1,"condition_type":0,"condition_params":{}}]</p>
+<p>同理其他接口请求参数processDefinitionId换成code</p>
+<p><strong>schedule</strong></p>
+<table>
+<thead>
+<tr>
+<th style="text-align:center">接口名称</th>
+<th style="text-align:left">参数名称</th>
+<th>参数说明</th>
+<th>数据类型</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left"><strong>code</strong></td>
+<td><strong>流程定义code</strong></td>
+<td><strong>long</strong></td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">projectName</td>
+<td>项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">failureStrategy</td>
+<td>失败策略,可用值:END,CONTINUE</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center">createSchedule</td>
+<td style="text-align:left">processInstancePriority</td>
+<td>流程实例优先级,可用值:HIGHEST,HIGH,MEDIUM,LOW,LOWEST</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">schedule</td>
+<td>定时</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">warningGroupId</td>
+<td>发送组ID</td>
+<td>int</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">warningType</td>
+<td>发送策略,可用值:NONE,SUCCESS,FAILURE,ALL</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">workerGroup</td>
+<td>workerGroup</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center">--</td>
+<td style="text-align:left">--</td>
+<td>--</td>
+<td>--</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left"><strong>code</strong></td>
+<td><strong>流程定义code</strong></td>
+<td><strong>long</strong></td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">projectName</td>
+<td>项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center">queryScheduleListPaging</td>
+<td style="text-align:left">pageNo</td>
+<td>页码号</td>
+<td>int</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">pageSize</td>
+<td>页大小</td>
+<td>int</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">searchVal</td>
+<td>搜索值</td>
+<td>string</td>
+</tr>
+</tbody>
+</table>
+<p><strong>taskDefinition</strong>(新增)</p>
+<table>
+<thead>
+<tr>
+<th>接口名称</th>
+<th>参数名称</th>
+<th>参数说明</th>
+<th>数据类型</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>save</td>
+<td>projectName</td>
+<td>项目名称</td>
+<td></td>
+</tr>
+<tr>
+<td></td>
+<td>taskDefinitionJson</td>
+<td>task信息</td>
+<td>string</td>
+</tr>
+<tr>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+</tr>
+<tr>
+<td></td>
+<td>projectName</td>
+<td>项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td>update</td>
+<td>code</td>
+<td>task code</td>
+<td>long</td>
+</tr>
+<tr>
+<td></td>
+<td>taskDefinitionJson</td>
+<td>task信息</td>
+<td>string</td>
+</tr>
+<tr>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+</tr>
+<tr>
+<td></td>
+<td>projectName</td>
+<td>项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td>switch/deleteCode</td>
+<td>task_code</td>
+<td>taskCode</td>
+<td>long</td>
+</tr>
+<tr>
+<td></td>
+<td>version</td>
+<td>版本号</td>
+<td>int</td>
+</tr>
+<tr>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+</tr>
+<tr>
+<td>query/delete</td>
+<td>projectName</td>
+<td>项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>task_code</td>
+<td>task code</td>
+<td>long</td>
+</tr>
+<tr>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+</tr>
+<tr>
+<td>queryTaskListPaging</td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+</tbody>
+</table>
+<p>taskDefinitionJson:[{"name":"test","description":"","task_type":"SHELL","task_params":[],"flag":0,"task_priority":0,"worker_group":"default","fail_retry_times":0,"fail_retry_interval":0,"timeout_flag":0,"timeout_notify_strategy":0,"timeout":0,"delay_time":0,"resource_ids":""}]</p>
+<p>对应需求issue</p>
+<pre><code>[Feature][JsonSplit-api] api module controller design #5498
+1. [Feature][JsonSplit-api]processDefinition save/update interface #5499
+2. [Feature][JsonSplit-api]processDefinition switch interface #5501
+3. [Feature][JsonSplit-api]processDefinition delete interface #5502
+4. [Feature][JsonSplit-api]processDefinition copy interface #5503
+5. [Feature][JsonSplit-api]processDefinition export interface #5504
+6. [Feature][JsonSplit-api]processDefinition list-paging interface #5505
+7. [Feature][JsonSplit-api]processDefinition move interface #5506
+8. [Feature][JsonSplit-api]processDefinition
queryProcessDefinitionAllByProjectId interface #5507
+9. [Feature][JsonSplit-api]processDefinition select-by-id interface #5508
+10. [Feature][JsonSplit-api]processDefinition view-tree interface #5509
+11. [Feature][JsonSplit-api]schedule create interface #5510
+12. [Feature][JsonSplit-api]schedule list-paging interface #5511
+13. [Feature][JsonSplit-api]schedule update interface #5512
+14. [Feature][JsonSplit-api]taskDefinition save interface #5513
+15. [Feature][JsonSplit-api]taskDefinition update interface #5514
+16. [Feature][JsonSplit-api]taskDefinition switch interface #5515
+17. [Feature][JsonSplit-api]taskDefinition query interface #5516
+18. [Feature][JsonSplit-api]taskDefinition delete interface #5517
+19. [Feature][JsonSplit-api]WorkFlowLineage interface #5518
+20. [Feature][JsonSplit-api]analysis interface #5519
+21. [Feature][JsonSplit-api]executors interface #5520
+22. [Feature][JsonSplit-api]processInstance interface #5521
+23. [Feature][JsonSplit-api]project interface #5522
+</code></pre>
+</section><footer class="footer-container"><div
class="footer-body"><div><h3>联系我们</h3><h4>有问题需要反馈?请通过以下方式联系我们。</h4></div><div
class="contact-container"><ul><li><img class="img-base"
src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><a
href="/zh-cn/community/development/subscribe.html"><p>邮件列表</p></a></li><li><img
class="img-base" src="/img/twittergray.png"/><img class="img-change"
src="/img/twitterblue.png"/><a
href="https://twitter.com/dolphinschedule"><p>Twitt [...]
+ <script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-with-addons.min.js"></script>
+ <script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
+ <script>window.rootPath = '';</script>
+ <script src="/build/vendor.98926a5.js"></script>
+ <script src="/build/blog.md.57874be.js"></script>
+ <script>
+ var _hmt = _hmt || [];
+ (function() {
+ var hm = document.createElement("script");
+ hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+ var s = document.getElementsByTagName("script")[0];
+ s.parentNode.insertBefore(hm, s);
+ })();
+ </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/zh-cn/blog/dolphinscheduler_json.json
b/zh-cn/blog/dolphinscheduler_json.json
new file mode 100644
index 0000000..acee196
--- /dev/null
+++ b/zh-cn/blog/dolphinscheduler_json.json
@@ -0,0 +1,6 @@
+{
+ "filename": "dolphinscheduler_json.md",
+ "__html": "<h2>dolphinscheduler
json拆解</h2>\n<h2>1、为什么拆解json</h2>\n<p>在dolphinscheduler
1.3.x及以前的工作流中的任务及任务关系保存时是以大json的方式保存到数据库中process_definiton表的process_definition_json字段,如果某个工作流很大比如有100或者1000个任务,这个json字段也就非常大,在使用时需要解析json,非常耗费性能,且任务没法重用;基于大json,在工作流版本及任务版本上也没有好的实现方案,否则会导致数据大量冗余。</p>\n<p>故社区计划启动json拆解项目,实现的需求目标:</p>\n<ul>\n<li>大json完全拆分</li>\n<li>新增工作流及任务版本</li>\n<li>引入全局唯一键(code)</li>\n</ul>\n<h2>2、如何设计拆解后的表</h2>\n<h3>1、1.3.6版本工作流</h3>\n<p>1、比如在当前1.3.6版本创建个a-->b的工作流</p>\n<p><img
[...]
+ "link": "/dist/zh-cn/blog/dolphinscheduler_json.html",
+ "meta": {}
+}
\ No newline at end of file
diff --git a/zh-cn/blog/index.html b/zh-cn/blog/index.html
index e86af16..59f4813 100644
--- a/zh-cn/blog/index.html
+++ b/zh-cn/blog/index.html
@@ -11,12 +11,12 @@
<link rel="stylesheet" href="/build/blog.acc2955.css">
</head>
<body>
- <div id="root"><div class="blog-list-page" data-reactroot=""><header
class="header-container header-container-dark"><div class="header-body"><a
href="/zh-cn/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div
class="search search-dark"><span class="icon-search"></span></div><span
class="language-switch language-switch-dark">En</span><div
class="header-menu"><img class="header-menu-toggle"
src="/img/system/menu_white.png"/><div><ul class="ant-menu whiteClass
ant-menu-ligh [...]
+ <div id="root"><div class="blog-list-page" data-reactroot=""><header
class="header-container header-container-dark"><div class="header-body"><a
href="/zh-cn/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div
class="search search-dark"><span class="icon-search"></span></div><span
class="language-switch language-switch-dark">En</span><div
class="header-menu"><img class="header-menu-toggle"
src="/img/system/menu_white.png"/><div><ul class="ant-menu whiteClass
ant-menu-ligh [...]
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-with-addons.min.js"></script>
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.98926a5.js"></script>
- <script src="/build/blog.e648da6.js"></script>
+ <script src="/build/blog.cfdb16c.js"></script>
<script>
var _hmt = _hmt || [];
(function() {