From c34585737ab371126c2cdd0fe196dc23fdf68f78 Mon Sep 17 00:00:00 2001 From: Ehco Date: Fri, 25 Feb 2022 08:33:43 +0800 Subject: [PATCH] rfc(dm): add rfc doc of enhancing task manageability (#4458) ref pingcap/tiflow#4484 --- .../20220124_enhance_task_manageability.md | 131 ++++++++++++++++++ dm/docs/media/dm-new-task-lifecycle.png | Bin 0 -> 19969 bytes dm/docs/media/dm-old-task-lifecycle.png | Bin 0 -> 18225 bytes dm/docs/media/new-dmctl.svg | 109 +++++++++++++++ 4 files changed, 240 insertions(+) create mode 100644 dm/docs/RFCS/20220124_enhance_task_manageability.md create mode 100644 dm/docs/media/dm-new-task-lifecycle.png create mode 100644 dm/docs/media/dm-old-task-lifecycle.png create mode 100644 dm/docs/media/new-dmctl.svg diff --git a/dm/docs/RFCS/20220124_enhance_task_manageability.md b/dm/docs/RFCS/20220124_enhance_task_manageability.md new file mode 100644 index 00000000000..6fcf769a8cd --- /dev/null +++ b/dm/docs/RFCS/20220124_enhance_task_manageability.md @@ -0,0 +1,131 @@ +# Proposal: Enhance task manageability + +- Author(s): [ehco](https://github.com/Ehco1996) +- Last updated: 2022-01-22 + +## Background + +The main purpose of this change is to address the root cause of problems like [#3771](https://github.com/pingcap/tiflow/issues/3771), which are caused by the fact that commands about DM task do not distinguish between dynamic configuration and static resources, making it impossible for users to intuitively manage their tasks. For this reasons, we will attempt to redesign the state machine of DM task and optimize the dmctl interaction interface to provide a better user experience. + +### Current State machine of task + +![dm old task lifecycle](../media/dm-old-task-lifecycle.png) + +### New State machine of task + +![dm new task lifecycle](../media/dm-new-task-lifecycle.png) + +This is mainly achieved by adding a new command `dmctl task create`, which creates a stopped task instead of creating and starting a new task with single command `dmctl start-task`. + +## Goals + +- Organize and optimize the state machine of tasks for better management +- Unify style of commands in dmctl and optimize dmctl interaction experience +- Add/modify OpenAPI, enhance eco-tools + +## Design and Examples + +New syntax of dmctl is `dmctl [resource type] [command] [flags] [arguments]` + +where `resource type`, `command`, `flags` and `arguments` are: + +- `resource type` specifies the resource you want to control. `resource type`s are case-insensitive and limited. Currently there are only these: `task`, `source`, `relay`, `ddl-lock` and `member`. + +- `command` specifies the operation that you want to perform on one or more resources, for example `create`, `get`, `update`, `delete`, etc. + +- `flags` specifies optional flags. For example, you can use the `--master-addr` flags to specify the address and port of the DM-Master server. + +- `arguments` specifies the required arguments for this command, such as the name of the `task` and task config file. + +### dmctl commands for Task + +| Command | Full Syntax Example | Flags | Arguments | Description | +|---------|-------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|------------------------|-------------------------------------------------------------------| +| check | `dmctl task check --error-count=1 --warn-count=1 task1.yaml` | --error-count(default: 10), --warn-count(default: 10) | config-file | check the task config yaml file. | +| create | `dmctl task create task1.yaml` | | config-file | create a stopped task with config file. | +| update | `dmctl task update task1 task1.yaml` | | task-name, config-file | update a stopped task with config file. | +| delete | `dmctl task delete --yes --force task1` | --yes(default: false), --force(default: false) | task-name | delete a task and remove all meta data for this task. | +| get | `dmctl task get --output="new_task.yaml" task1` | --output | task-name | show the task config in yaml format, also support output to file. | +| list | `dmctl task list --stage="Running" --source="source1,source2"` | --source, --stage(Running/Stopped/Finished) | | list all tasks in current cluster. | +| status | `dmctl task status --source="source1,source2" task1` | --source | task-name | show task detail status. | +| start | `dmctl task start --source="source1,source2" --remove-meta --start-time="2021-01-01 00:00:00" --safe-mode-time-duration="1s" task1` | --source, --remove-meta(default: false), --start-time, --safe-mode-time-duration | task-name | start a stopped task with many flags. | +| stop | `dmctl task stop --source="source1,source2" --timeout="60s" task1` | --source, --timeout(default: "10s") | task-name | stop a running task with many flags. | + +### dmctl commands for Source + +| Command | Full Syntax Example | Flags | Arguments | Description | +|----------|----------------------------------------------------|-------------------------|--------------------------|---------------------------------------------------------------------| +| create | `dmctl source create source1.yaml` | | config-file | create source with config file. | +| update | `dmctl source update source1 source1.yaml` | | source-name, config-file | update a source with config file. | +| delete | `dmctl source delete --force source1` | --force(default: false) | source-name | delete a source. | +| get | `dmctl source get --output="source1.yaml" source1` | --output | source-name | show the source config in yaml format, also support output to file. | +| list | `dmctl source list` | | | list all sources in current cluster. | +| status | `dmctl source status source1` | | source-name | show source detail status. | +| enable | `dmctl source enable source1` | | source-name | enable a disabled source. | +| disable | `dmctl source disable source1` | | source-name | disable a source and also stop the running subtasks of this source. | +| transfer | `dmctl source transfer source1 worker1` | | source-name, worker-name | transfers a source to a free worker. | + +### dmctl commands for Relay + +| Command | Full Syntax Example | Flags | Arguments | Description | +|---------|-----------------------------------------------------------------------------------------------------|---------------|------------------------|------------------------------------------------------------------------------| +| start | `dmctl relay start --worker-name="worker1" source1` | --worker-name | source-name | start relay for a source on a worker. | +| stop | `dmctl relay stop --worker-name="worker1" source1` | --worker-name | source-name | stop relay for a source on a worker. | +| purge | `dmctl relay purge --sub-dir="2ae76434-f79f-11e8-bde2-024ac130008.000001" source1 mysql-bin.000006` | --sub-dir | source-name, file-name | purges relay log files of the DM-worker according to the specified filename. | + +### dmctl commands for DDL-LOCK + +| Command | Full Syntax Example | Flags | Arguments | Description | +|---------|-------------------------------|-------|-----------|----------------------------------------------| +| list | `dmctl ddl-lock list task1` | | task-name | show shard-ddl locks information for a task. | +| unlock | `dmctl ddl-lock unlock lock1` | | lock-id | force unlock un-resolved DDL locks. | + +### dmctl commands for member + +| Command | Full Syntax Example | Flags | Arguments | Description | +|---------------------|-------------------------------------------------------|--------------------------------------|--------------------|---------------------------------------------------| +| list | `dmctl member list --name="master-1" --role="master"` | --name, --role(master/worker/leader) | | show members of current cluster by name and role. | +| offline | `dmctl member offline master-1` | | master/worker-name | offline members of current cluster by name. | +| evict-leader | `dmctl member evict-leader master-1` | | master-name | evict leader for master node. | +| cancel-evict-leader | `dmctl member cancel-evict-leader master-1` | | master-name | cancel evict leader for master node. | + +### Optimized dmctl for interaction mode (optional) + +The current interaction of dmctl still has room for optimization, and I hope to take this opportunity to do some optimization of the interaction experience, focusing on the user can quickly select the command they want to enter through the keyboard, instead of entering commands by their memory. + +Here is a simple prototype demo: + +![dmctl](../media/new-dmctl.svg) + +## Breaking Changes for OpenAPI + +- `POST /api/v1/tasks` will be changed from creating and starting tasks to only creating tasks. +- `DELETE /api/v1/tasks/{task-name}` will be changed from stopping task to stopping task and delete the meta data. +- `POST /api/v1/tasks/{task-name}/pause` will be updated to `POST /api/v1/tasks/{task-name}/stop` +- `POST /api/v1/tasks/{task-name}/resume` will be updated to `POST /api/v1/tasks/{task-name}/start` +- `POST /api/v1/sources/{source-name}/pause-relay` will be deleted +- `POST /api/v1/sources/{source-name}/resume-relay` will be deleted + +## Milestones + +### Milestone 1 - Implementation of the modified task state machine according to the design documentation + +This phase is mainly about implementing the DM-Master/DM-Worker internal logic. + +For tasks, the DM-Master's internal scheduling module needs to support the creation of a subtask in a stopped state, in addition to adapting additional parameters like `-start-time`,`--time-out` and so on. the DM-Worker need to watch the task stage from etcd and operate the subtask according the stage. + +And for Sources, when the DM-Master receives a `disable source` request from a user, it will **synchronously** notify the DM-Worker and tell the DM-Worker to stop processing the subtask. + +Note that all changes to the internal logic at this stage do not have any effect on existing dmctl. + +### Milestone 2 - Defining the new OpenAPI Spec and implementing specific features + +This phase is used to identify and implement the new OpenAPI and to use unit and integration tests to determine whether the OpenAPI meets expectations in certain scenarios, It is important to note that changes to the code in this phase will result in the above incompatible changes to the existing OpenAPI. + +### Milestone 3 - Implementing commands in dmctl with OpenAPI and optimize the interaction experience + +This phase will focus most of the effort on implementing the commands in the dmctl and optimize the interaction experience, and completing the corresponding unit and integration tests. It is to be expected that a lot of time will be spent in this phase on modifying and testing the CI. + +### Milestone 4 - Perform corresponding testing and documentation completions + +This is the final stage of testing, including system and compatibility testing, as well as completing the documentation. diff --git a/dm/docs/media/dm-new-task-lifecycle.png b/dm/docs/media/dm-new-task-lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..048e0df7f57a2cbee1d9edd3fd9d38c3dfb71879 GIT binary patch literal 19969 zcmdqIWl$V__xCx#0E4>*cL?sm-Q8V6@L&lJgA?3?dw}5X?h=B#2X_rJI7=?M_udy< z`_#W`YoFSFHTCOrzUOnKr)7G=RFtGq5D5_h004@tjD#8h01E;Dpp8K=uPea#pP2vv z6s(GZhUCl3%hU7A>!P2ZpOceQbaeF7)03~S@BPE;_6P$5b9Z+KxxI%#Aa{2U*EhHK z_mBSm{;;sHgrlkQ!_9y=<@Q4hKA<+{M^&i6BQNp@$vcP`6)9q zv$M1F=;+AR)m2YV4;~&wKtPb4lOri5wYHpbo$5EoN`f+qHr*r1T|e3 zil>gPaoVj~OePv6B@D)_;g;#tn@ZV!PH;ssO>pYIfc#c}TZ?G8Y=gv+SxrU3T;w*3-}oS; z_#_|X*Sd@n$aX`bEB~rG(Byk@&uirCr9+ziOrq>iKX^8H@qBbP`EWFNd2%=F-P99mvNS7Z*l*^hQ%@ zET1OPaIv&xq|BFnXa|R@xVZd66tB1R>zn)QlTm=ZoH|ND1ZljQ0YRGXIJO001@qog zc(l&Tqk*Yo+->`o^Xo9Al`r#+$B5P#NY ze@I_4D%1*Z9k7_ARSgwKIb$4{=Jrn9{z+3laIZngBsH~#z(!hP?MZcj9za(C8ZA=} z$j^{hn|4nY{a9Y-n&4ielJEsW^C8vx3ameM8KXLlSC^*yi%O%(<@fW`BAkQ>#Dh|n zS5VhbAB|yTsp#udVI{4BOl5$@919n@To@IiY-}trSiui5FjYzdH$F)1=}W?E>S{8e z&|iW3ermD|A6QLT9rBC&R@(DULNAt9O_km=!Bt02nCj#qd}3q?$H<#@)rU7*kUnklNN%U? zlEYck+2=MPb@=4$;sGyF$Qmr(;&w6@if-FPRrVRJc6gS+NN-<2G{bnt1s|7KI8q6fqo!`qIB`*C?$OSNxF}_)T+avduum)`_7HQ}lw+*_v}@ z1@n)I-V~g*xWN$hou?1%DaiKnZ~1nFB=GlXx)gTQ1B|?x6;p9mf20C6+d7)Z1VsS6`W?ax47CY7^tom_U+D@C(n?EE*< z0dbi40h==yjo7hmn>dY8!gusShNqO|sX)Y2l)3i5g0hUA$mWdQl82CD+gj-qNZaR+CkM;#=+QxOB=iYnv1A3atO;e)=IL@b;H zbiAafs4R@w=F1B%y2=DGvv*_16G?$ga%S67^%k!xTAWjhJ5nJD#g_90u9Bd{z`-U{ zhG%HxbiY3DH9A3IM5E&&IlB^`!^VvGhYaSmp5l-pUclyD$bb0Y zsux6&@Pk0-jYzl;e-+#(E1WT<2$c_fP+UkYPQQHmiXFhl+siV-T?da$?<2u4|ThqDyE za%a29Sb-$nr}CbzEK-MGuoE8AT~8+$f}glwW^?BeT;fh(=r`ut^-L{Xo*g%s=EeVvH&ONfd$G1bNvv3;obR zez#DPjy;tXx@v)RHKH|nD=TQ^wHA7~v8n#orZKBbVxna|gL8T`g?UH;@WUh#e?yNqA~KiF#d|jd2TGHFbO_S z_oS!02N+cixz615*F}m?g3Ntn>>O3smxG(nw*uYYN6)~Dg2<7Y2XPFZLo?j?sUv-u zI%lUaIz8-I)gYKs$P*vOwTWW>8d{`U40UP8V1IrjTi}N_@cCA4)a1HbdkYEN#2sq! zw-AMo;sHboOjrY^t;6^jKy@}shPAfO*Q}UCa)Wf&I(5Td1{%lq7Uw&=yGL8|>8&ir zr#@hz^45}<5{GD#PD<|^Ql1xSLEQ3Fl4Oi7mGH)IO?Z{JQN4$%c-K}zaRkE~vXnwX z9>1TQe@E*TOB>GQp%BD_tqvrA16w`COaCn3SmY;?mSJooyA`YzKL6z?86f^{G8{P_ zjZ1j*FDC@3Fhl+rcMN>-cHzUKzq}B>6?fYalQKM)r+Cgt3hKq>*zOfOqMFd*jF*zQ zsK!Xu-Jrd*&2GH8tmk$(*_&=7^p3ln^XZt|Er0S((+*_$w6-)pztmQrt$b;7E;*+E zaHp64YHe+V(lO*=D{O50YArNc+Ku<_)!o+a)f$o@*lKG>fw;-~{J8f%gP^>FvrjrmA58CG>WhK;>y=s6A%{+8^pAZ|-uj9R8DNn7 zUg*o|t3!!4MOx6_B}1t1qY84;#r^}n|0{gyn%FT>1vhAX2dDbZp7!=LQFuy4`x?eX zB_Z0Yo&%MU>I#Ac2wEBlfC7n%K%tWZxR2kVf&dWF9u}c@xWt{ON`9c>kzn9 z>dHXh2aN zxq`X_G3&G{s(hs2DG{XLq=NGoU&L6lEO$Cg5bf~fP?BJcw-BiG5A1AXz^F4N`G}MG5tcJu@tfw?swqQP zWn8p6<==vW$nV92{ZjVWuG=&rJd|zz7aE7OyHt)v)#?;AJnk!QHepr#}WPW^X`$EgyD z2`*?GMv|Av+|xD|=*^=k-oh_8{&8b|=Shh9MOdu%pzaPi z{`ROmtxC5w+uvd>Yd*8(#ziQT^vWi5Ny5IVWGn{-3e1Bd}}C5J2OR-%MA{Wu77wX4{2n59UQC@go4}Etf8vdiN2Js^bq-K zEQv_-_YreNQ~Kc}r%!`?tTie3-=JT?r|V>zN@s4jBRYONics3NS%iOM-HmBg?4EgN zyhX5H-qK01ffB#^t&obbsCr1o0kBq5Hpg@!xN5F`pJM7<(BR>Gg<)oh#zf?r?=#{R z^pZ8dk;VtrJ*`H;E$7teLd-ky@$pf&#>8U53*n>CK@akui6}d7*?2H7j&OU^GTuba zIcOx)sst|lnpsq8Fk^bBIthKQ&^T2_YY1Z`%n1M5kCzM{8AjJP_lOPbQy|YN0BXcN z?l{Zb74yIWL98($;au1qPtU>LEA8Tj;up28MgD`0?}~&yK_}GKFV8K*MF@>lnF8@7 zGVn9P@;kPy@qF-T`So^`ug!}uk(oGE;s3f;9xa!5Y;mJG^W*XxdrQTq#{F{-B|i z?G?7qyFss*obSvcCb8WD`wGjQdmEBFJJx`K+wq@}KLZ3peF3K?`TSp^soQ zc@ehC32>?KQ#N9G(Gi50wQ_U7M_0Wb5Vm!9U)$we-+Obcs*QLZ78eCroMGhNBk0i5CXsWKPZcze>Ur6 zb_F0~2I}hd4*9nFutDMDo8srw?#{@t`aMoJ)^O8jiJ17lX+yPuQ_>UT-Cd_bUymk; z#m8+DH4)k{Gq8r+Meu`7oz)xkhzy3u?*rP1Z7cnj&oT-Y=x}nQZBL6*#UAuMGFg1+ z@PH5Hmi$)8sTwYEzyQic4>)_##SgPr`Bt3XN@H0y{-M%$?(-Z6UoSImjaqdzZd{cn zhfLHvw&A&FK4n?<0_|I}$4ZZ!izfUn7H>XM{|FN&09AnctW1$t{sHgQb?lN>{Oy*HtSB;Fgl)Xd>^QeK9g0c0(0lM&m!cs=Y5pP z?|b!>scpsCzi`ANFn|vgZ$74zz;GrAKKi|q^4$C#=!dPJPY%Qhmg$nvbE}-R%s$l9 zy?0>g5S`3tI`j2uk2D>?rZ#y`Fs70K`zCx9weSdU@Z=}7CteL^ycpqISw=tmSg+CE znH=*HY+ykm|&;$ey2d)|KFc`vDU zd(T^eVUY_X^UcKg-CC0b&v)Mv6K>cpMic}s#2;hav8y6tD+PQP$5FJEi@7h)o2E&` z)ULmH?SGJUWuQlyvT9^v^f(Tnc4cn4KmGPYWrZ63Qr4;VdE7%sib0SqDdjXQH)AoJ zdJ-B!nw_yRfA?i1KE8BD4qeK`2?6lBSs! zmwJ0z@J4%|>?`+(@c^CQM?V}9Bqs>r!_dV|AdljKZ>>A8YH!q*)^gcyUy_8Q#eka9 z7c7n>tU{1iyzV>;bA>VPgs3{JW0_kOH+jfXNkl zV%o27;0rKV=>;{k){-T9YhXHt|A+5{h}^?tI!*tZL72eJ8!iH3n%%n$jG7FGaGeZ8 zudiQo7u;A>DGjO_s21|ckr+k%R%}W9Yt@sdFTY}0&xQBhUC4Y;iFuR49{FpOqs}on z0P^xXHtY6r(_KCCc@k1SvOmg0J9ZNh5+i+mcgf0lqepeD`+7R6-HLiUKne8QhA1aZ zh{(hO4=XgiorwnfIUuW%zJl(mXC3DwPHj&Y*B9G7gZ;~-9l_(m0?}J>XHh;kJ27WI z*F#Ph7bhE6hsoJKHy12<@ZT2OFE^#}9DL8qdJ0+Aczrzg+P603r$N3JXUAz%p}DM& z+c@H%@R@ZA7Z_O8^HpH&n0#>PzF|kqso`9|ynJm~V6m$t;PcPYD}dY_U3R&+@k*V|l&s-Z zy}j{)_tV#--s2eeuHZ)EQDS>Rhfd^|TFS>pPYDX7UPFl{@)082RFOjYIAV zq7A(Q%H<RG(XHVFFts#@{WLH+6uVea4)-{g%bhG5%Qg(=UDu#nr4@M(n) zpH;b=ZwO@L?SKqvtar*5`dSH`^y`5Kw#u2+Bdu@q25I zhG_6>c5j7e@!ouD(B_$4)j1R7^*qFcSJP(yaX(gDlzZ@I4^~WWaDFSghcz`wJMnj% zw4nXj1Rm9o87sMR;mcFnlfkbt4}CDjl+^5o?rmP*CD^AwQ*2k-G~3jV5c7$_`y->F zoRM1;)5ql>dbR+3q?Xl3wjPU*T{v2=l?I)PRn;!aWOaWy{^XHTi*6#|2GH^(oH*!Hw@E9I&BSg5Q@hjOeMBkso2-#)T;f;{hVp7V8)*=&1q)@oD^Z1Rt>z#v zJ#k!EohDLs(IINwotb)|^@h{-*R5wqMYOj&cqy{s(`TS;3-ZW%cnr@&PdBnRaLROP zh`NVr1j_1iiVaQ@J~6F|#VA?o@>1(0*G+;1a8uCLWVTOnkTJ-O_${NpBMkLVbVEso zCR&%wEg1Q;tAGjF-7LV{DZUF-eldZH6i=&2hP+;l9ac>_DtU!?xq}%_>Fsr)A?7{u z4@g}l+>YrrKamM4P<0k#?cPDl(32`Cn}HlDmL(XVZ$&jL-OWfr>%xjIQ4`{8W9pEg z&i(2vC0+YNbu&9mC$r^C-c6m8Fnsf~T$b`!!#cq(Rc$miKDYVJj%=%WOUKJ2zN_=1 zK|2HtI18jIs>GKeFWU3=r`x;WA!%#CgmPJT^i0ndKDC}zN|tyZxTvC)KZ8&jEnfi* znIqLFuSBARUT~B;DJgYLpxwY<#ND!RED?+Noq(z24f{uJ917sP>YIE45i9Bj7b+&a zxBc%6Xs^@1%M9 z=jwqU%<>HSI$JsDK?4hDDUo>0BWa{u4>Kh*f3H)jcVw}q8B?dA<>~neo6L)hSo90n zI(gip{k@POJ+pi|OtC1Lg4D(7#m3rN0f%%fGj!dRhXBXRxPs_j6 zSA8ANgWGHE!Vf{;&ZlXYoX5)_{0m}1GB{;zVMFO;6f6k)HWGodGcPadm{2a?1ZW3w-$0VDKN7a{lX$pRm-%Lqtgvd5L_LyAgX{j8Qm)%M_f{_V>mr_ba88~3zY$IS zRtfW6qkONoekTu5D&ZG;1$CAF1|G@c^uep2CRB0;(caXJ^hDJ>T)3~DM5=65EjRn` z)sq^-1uh-;QqnA{EZ%XRdZvrm3$G*(ugI^-*2B8e*^?#G)%0+Lc^ zHili7d4(2v5inJhQpux5n7V^qOvo@3=H4PTw??bz3Q0!aLkKCVkO8x=6factOPL|O zSfTvZH#SVIe6Q{JFUXOSqnkX#@n8WTbwnbY1F4=@auB?wG~%P^raX_b7!EN@nWjyl4fK@SX)%nAXJ?N=T+A98=&^*uvnIK1H`?_>Q=eZmxL;6Di^XnpwOIBR%1{I+w)b7h-N8Ph?^N6jz$r#}@t1vRArH;H3720lou{n-4 z=@HH>AY@7~B5W+y^fba#$wj_t^Y4WE1F7xGBk5rNX3D5{tKTw} zw~UfZ3ay@A(Wmm87bAx&-Q5f`!=5}6No^N0Skio3DqNx@NT1G6^`zsIT6F?l5nxOt zu%>n1lW41eqIigLa7OLn%8q3_Mcj-TrXUIHF`U0GkTN_}T4wz1Y4-HWWy1x0y*zYsBGS1>{ zo&OFD79L|fREj{_NPK|8^`;9Nus9g;CWQP(l=@Yau{U1L2{)EI46ZuG!m)nZ#a9w? zCwJlWD)KSvHAj}0jQeCH!+(b-zpOo~5zq9R>I0#CMlqk{+1D^j(y9NEn z3A<|l@YOICRN^qk>egB%FqZY*<^3vDv}(7-**4i!S$&w>tPj40M)byv(s>A)ejZeG z993+7!VLbYA3u%;VBwC}e}l!=Oe}`H;^}siAQuAxUFD(BNx7%`!V>Q;p$i|*K0m!v zz(<%PHC9#w^6Q#AFzDErJi|a+buweFWz;5H)?$6cYI6#Ur5NB?>c~zGfDZt4k=j6a z5lzKL69GUuJ!DSEMcsj}?HRjA_x_?LulJKa&p)F$L#}vf-{bpjEu@;`ZF!t;|8Rwd zXt)O03U^@poFd*;I`M#hQ}{Xp9D9ZARXIQmw7J>AvHArW^;u}5yeR&#)?u(g%}xhW z2~t7_UI-y<2a?3Dthv`qMU_vt>`fa8DgNTGy$WZgeWLIsL*_x2k01j? z^o5bh4#o?eV%RGjwC#Pe3mljcC30i%1N@$f;^ryxb0%70W@lq2sd_y_U=a}=0O3a* z0VD5T-Ubez<2KqF)RUqj=wuaSZLK3j`vD%#2A8pPGsBn!0bmCs*P0?sx;3Q6*&36U__;* z6K)XsUya=|rj<2vJ!YiaGBB`ch2rA%>|PuttaTxjc%D>pEScNnsTwC;HKU99UGmI$ z<3`Ob0sv-B&#}gGTt_n|I);-^~I* zE9*)4*txcQew1#6^q9n1W8z(CsXgZ77b#V~=ZrMYzG}(bsqhDDe~Gl3<1%>S zUXnT98s4YM7SFqG2+D>*waA}7rHnz@ns;lrLr~Fou9G~=xqO(rLgnl1II@%XTl$vA zznlc9 zmz383qv4?VDtFYn_UlJ33?Tr34`=#pXgnah=l2a+jVQcvt#P*;((aWg8ZLe@_b}IX z-QiZrF5^VE=J_kFaSd{+2}h6GuYab0Irp&EK1|l1>wW~becjorO_0xv?a=Nps(mm6k4V?WS}gN1JCtXOiz#@unk)>~c;V^o+1ri987?4<{yCvru8 zbpS_dAsfZSZHYR+8%Mi*N38j*)1HHuR=7V$wC%QTyUaxjV#Bh zknHF7&hw42S;1+VpC^#5)$o)16pVrxC#Q!eOk78C}NBR`uVR9C&+=9mM z<8yJlb7}X~yqJ(|H<&2o`PuuoNn@7RRAm_+9;;kOl>0BRh zz!A!8ZN*Q=Pe}`J1BG8`?OnkmDnUwqIUI0~Dt0)~{zxjeO*LG#Cs1VmN1R>t@1AJs zy2G|sLtPH?UIoDCBmuMl5Y#<9Mwvu{Q^k>^zFF>hmN zp<5}|a?5Ll+}L&XaAyRBnqosZ8urbUH5$mKQmIYNl18}QA1(@FIzXs)y?;r}gUCJm z-g!}wSbyB|BLjps5PckFT)fc(gy8~yfBq$OPpMHTeqEdpSeP_2bpx18 zdd&rB6-PLhU`Wa#K)Lev+mc<>G6e?lFYnfka!jcA2U}(P;IA3t@(m3iP@tnWHD_rQ zxR2hY=NRG}1c~yNRR})0${!@a_^I6E>jY7}7P+#3Nbt?FJfdRU$GOkkqWr9Fpl;X_ zMqRldBdEmvQ-c!}5+9E_4k~nsC#{TZ+)6&wX4N7r1#d_e`MJA)FxFk3WD1fa6^~#w zSoYy3Z%dCxRheAR9+_rY1fKM)Q)mDRtLwqdMAudNR|Ooe}FHma_0xEI;7qR^un5}!+|{>l$Fj84fOLMc55>@&0YRlJ@-X|mw(ln#bN~bJzWC3Y)p|d&TnU@VYFUhB=G&Ii3Gro302z- zTvb!)Zp-@UoNLlsziHF2GZZJ3keS5#p5CB?JWX*x?%sJ1N7tL60;&$ z(M@_|#~(pC6GfujIK!TUnbxzE5A6 zz<^`%pr;2$w6Bj*srS_BImC1n8A6gl9DLq;h;ig3{#T7N6eq1=RjQ|1%9z? z?_+>#PN?HOHpZ^#U&H*r?q)(t5s6OChlN`lFGp&rkl*m-6u6;+hw+^GSNvXbhEh=_ zONx(W4B!l|fZi-=+3xn&5eocwuYModIf>buQhLiE%gA0+J@%b7s9E9#x)3h z$ov@4%xAU1Z|6Y}F*6iF&^o7Nkgw%;pSz(o;yhkt7*)X2FDPpoQzR~EJZpn(pjQyK z*9%s8!m1joJ0oS#E;T(YDUCN{fA=cTZVxO)C-=V7kCPfMTiWpJ%V!}NRbk3Us}Y|A z8Y_N@42!lUA^Jy_>p&BBGS`^NGcibs=w_tu^Dwec@72qEHte8G%~v7wt}qDSyQRy{E2H_Y;a4 z)(|Bh2?}yY!TmcDRohxn;;n!ZIlu}1$#N@R^r0X<=Oif5w*Tdo8Uz5n4bMiiC-^HX zAOh6(kf+F#P|p%JvdSjl`T_LwmB-liluR<53=!JO2hR?LSgLQ67B(vOZRI*t24yIu zGn{WzP9=n(=vn>6&PE$3fk}m}k(v_{dcm?fXqRwB=o>ht~ggV0zDViV=~dri#(@>y2{&Y z^72v`i_-_|=7?2xYn{kot=WEnV+Ji=SU2>b2uFqwB^1gj=#YV?&nyQqFo^#{awf!aiWb0)Lv zq;k+`!Vh-&&38%Lix?q`Lj1z<)oErFi?XD))xzN(F|4}(_$`YzBQ@?ZrfwBjlD_pl zyS;hf$BDp2P%;z`SugpysU0s`9FBz7NXMcU7|> zJ-8ck&Nq&KJ(i~`;9}lidiJ?4%=0d`UQ3#x+xSim{=T1wpTHmVR5p8#y-~^$o_wA+ zYvXl)y9OON?*>Wg3RXd2(YT3Ai&6Ne*u?|_%2Xa<2#e%Zr%VqKU0m;MwF2m81x?C4 zv#UMwioz$k=OQ(>o+Z8<)(L0ggG7BF^icnC9__l)?VWc!+3a1DfyoUWT9nI?)PQB`->U5@IJlNd6Ge z&^K1KrExDvT2PTnWshXjvZ%Q5KHBMiMk-4cE8nUr zLiM}$;t^hXa6CKS)uuIn4mrH?{$~JTJ%rqUg%Z`y4aR?&Kr;kso$SXP)(rTVepPLJ zFf;S(RVyyx>DSUtqo(=Z1jVRGr@+R?yHH5?+K!BWP|7E;ykT1!u#I4_)P(>-^m!w1 z_RkLa9bG$W{EWUBu793I+99dZN-8x|EAft2#8NP2hIU9quSo{y?@~_3`N+~($=}X* z#kxC$zcx(XZw+bp0=!zO0M=K=>mK3ubJDdIC{^?TBR*B*4XcAKe+8j+B^{=^rSl?7 zZDW;SUHvnc#Mq+^g`Rwpy?slxgk9_06TW)yyoe_PwO^mxG?SGi z_D@fz&rZE}X|~a)7eC$HB$?c+_2VktNay2q*T9}P;A9Qe>u{r+xUBy)IOA%BC=Yom zDy{pnzDxifFW>T$2EXfZo@4aFGT*?i9c=-%vWxSa9*wGeK_o`akWl=;2*k+2OHz9& zKXmazJjtj%qPc6#M5*#DE!)d=X2zCe7|X9m31IFkgynm8ZZ}J}Fc5@Bq4dA1sQ+pa)~~a1c2?@NF{(1bYc}q_gvbeD@` ze37LF&4!ernI$EsQRmW9ILr9P3GP>j+)X5cUXRdMV6COX1m;aHRf?clKvESNb@!`p zT@aWK!D2imhx%Atmep$j$Ye??7qG}dV}Qb} z)fKAxcjNU4X<<{+P6;!+0`oLhG;*ZIG z(X#;p5P(b(%L>!$*Y!(TO7$^>5mLY{%5gC+6wj4|*k|HLjU1=}1q=*|lfj2VvVa3t zNvMv{O@oUSClnM;dn19sq}?+n(^$p=VC=&491V?(6qzYL)bXAhlEg4e&!+EoGs_>m zVsZQ;Kf&Uk#`J(oy%=-^d~y-0EN`J_FuiDii0TN#_}_|0z0f8fn_J?rUvDJxts-nD z0c2vKe)T&hxMWn&T0U5~wLd=_+hB2GB|L<}g<6+}j6{AF#i4l`b82%d^`T!>yQ8H+^w-hMh@3lNm zskJz3DUs@&Rxa)nzv=eKIeqqH^e=BzX z$nTZpCE#dZosiIwO99K-_pXeeJ8BQ}=!DMtp9~3v&3+nwB4~Fhrni0}KmhIJ$~v_x z{8e4Hf*7W|0h2S6Upth%_BJPXKLd&9FY%461yxSue>JvL?wC!j)$m9gnn~L@pma7z zBO~o_rM<^Z{Tow`lz2WAPV=V==1KGb4vM~K$-{u41BQ_NAaJX7Cc>0VwCQVScc}4B z9(z!KB>U=LkY9zkuYjy$E7Bi%uHiU(m^=cPec)ZWXb29fZ4(x>uyih+DBi~yMvy1I zEaBAt__xaLjG0_y{c)u~b06P(G*2Itan)C`D_#X#XvE6drF!&0VZDlQ?hes z0QS$?_)X7$lKVvJHD#JlabqCZQPR9XQr0lOTpAe6dRC6E<;9iL_7EuF(p$9k}l1smx0rLcw1*u5rA?Gk#4WEm9# z)KI2%?HW*8u2m_bS^rGQV9UKGVA9{??=19c$`dbtVazOMG$w1BzecQbdwO!d3;~t>mW~C6(BrsGK#*~vB3ZFMrDiH4Z z5*ZbQH}k4O`8V2O9;0lE2kL8X|C3MNwes+suYdjp_1rgd!}nk{{lHQfPszo6ila@* zViTvnr&MMYH2WfVC7osBIe?tFA0yCx6-mG_N$L@BK)|8#P53u(n!}<b9Ca|6` z{)#|*Pf7C!QTa;x|6_qcCE|QCbRZjcxz>KFsKNdd+FRbj+aJCWdhnPf|680~{|Be| zkG4-|@4Ut@+)rE6Y^gX$e7k{B4VD(|kdd@zpF>_`@xvg`A8e_4ea`i9hB+PehN0Uxe0Mf6WLjT+^Hh!u^kzStXx z`kiUl-b3nrrlvW1qQA3niie(G@rmncV%@i#^H>7sShu# z7d1gDA4Kv;BYNX#>pJrMLTUW4nqu&%?nt~h{H3x3AV7ZT=d_(#iOxZfLeSArUz~lU)AOV z0{`sMCZJ2vQ^>5R9&qktX3H$(Y<%a!-q;{e@O?`}>g2U*r^AaS*IJcl&q8UlaB*x8 zVjOj)Dz0?X5Nel(I@heJcS>weGR0d2)(XX=e5k;@KcdE{gBovI-a?%M!Y#@2@T5iS z2q^yI(1v39Mtz054iNLmT;Hb#oNHi73>?2kfgE^E?j^pUk2*{a#C9tw1ZhYdw`=W{T&QJcQ`awyUaJ5`T{)j`n9zn1C zL|*?aSLI8e8-*;@g*pg3)lcDa#-hRot4?n@xnWH_R_2lZR@S=^{hNo)e|gBn1&r_< zB9OiK6lNU6f$Ag9g|*UiW|unZu1Nwa{Q4Ze29Q#ri=f9^Wh{+o+68FYK1|Jd;V1DW zC#jq(#$H}yadcpTWHM+7n_!PP|3gAPA$1|qtsK@7(#->!0Q3X)P-}YB}m@#aeFn11beNK*h@t^p*^P zj;-$9>V&X@Oxv4t!La_ZiM3-!=;4W=z~K7S(j{Q|+)Y6_1Yjq1ajt}#8 zXR?oUf7ti86E>8S@4xxve-Iw=vn#!n3iQn|=q2V~FS2qRmT@D473Yhu(~#r6qsEG} zh2`)|bJ*YC+grKYZH0HXx1$BY>Fy3^6+X|4G$NdvI;Q`f;-2AmxvMWXRC~GEH#NV@ zVTEzQXkkprcCl;N%BF7Xz}ihaQBQRN+L_3Zp#P#JTfN#M0aAKle)f736unG;Zw`X| zgb}OS|3u623F`DgkU*!#q42vmQ2g&;#MK=^GO-9`Dk`R(hlvunqV_#ZD{G8Pt$r!X z4vRIvGGC5M;NLjIA)QYkWy&WjWp-}wxCu(Rb_L)ugYUQ=G^td)qR)k2Z$M_F-y7HX z0Y5MttG92a=Sy`+H!Q9EB;6M)TVk2ALpy$tW*|^-hV$v7M!q`vgd=}dZQs=n4{y0Y zId?wjh2RCRGLI6sZYl0a{)u)c|EuxPEcRK}#@+St``S$w_x)H?~irbZW$prK?q z)^EoIQ8eNO`N{`&7X#e2+H&pCr06E~Gb-P@45O2L4WU4H*ek8lmjj{=;|zt~-BY|{ zH;nFBI)1&aD0l6$b z`~IFYXU=!NpWn=p*9MAKQOr3r`BhD^;(mJNEg=;tx+;ZtD$xqnar(IARe^%iB#`gN zaYS%H(@w)b2a>n{ZKwXbosuKq(Px$#(zzmX)mo1OgxclYqVDwWR|4Pp=#!`2pF}Vu zzf8ZtPUH-ptd&h{Ifm_gEdSa=MUOctKVzO=d8p{^AO8^(*;xFjyV;xGUDwcz_99z3 zX_jtyHX~ko`Rkh#S9Dl7@9wL7zn-~G;}d29Rt-k$>}6^jU#(WOVKgt zEJoIYy7%`Dz0p8;HUX@d;nmRWx_w}@(|x!=EHdHOPcPfNIDT43J^7O?6W1~Y*p^G~ zQM5MRhd}8si;gC7#TAR@+Q4DG=^y?M4B@7JCUh#aLec>ax3LNWkh`>_U)scu>@vXO z_545wpt?;+11=CIvu8d+T%Z4wL*{>)Us{ZZ?r+TK_tv?GbW z7LVeZ=$C-*(7ta&J_w^w>ww1j8?AcrRd#j}sQPy8`#-zc9opMR+eM7NRT8g>4Scs# zs1+m}FW6ihxFz1o+2sF*{2WdSO8?2^U_U&?mSX6zC7cQ%MY&`hS2R65dz-MAeaSx4 zou=mlAwSJYlyEap>`2X5n;^2)L>5zvHB5~ut#UhOq^wbW5SQxFn3szNq$vFySZowB z`<-KwM3u=s_=FH1QOrf12}*ge0B33#r-g!sMf(T8%BaoS$8?3mVP_h~eu+YvT7@gu zvFE0F?S##T6U!0m9kELq$(BTcs1^c*5xchL8y?r_T_UGWiFSI4jV?UUT<^)4wib8ZftOYN!C zuirDQAJa%5&CI(N zzJ*=EFpy!A-mCZlr{8hsSVp9J|Ah)u_^>EMq!d>{lmo7P_2T}CBnwmfPMq!Y zyw!sM7?jgB0O{2G?J#*fx*`1aVuY-G)$p;F@XWbFu3oV(NCjKiH(LD$j>RG(j!b$r zVq+sFYaB~s{U-`)PGH8jn%YWXYAf?piL=d8v8_^&>1<4 zpQED~WA+fI1lC7VN4qNd%011p2E_ASDW-05f%0zc!0lK2t|*$Vp$^OQSM_SD^vZ<~ zL$N1$ZB6urR!PAxbY&nW%vZ^Nad$~~Pp={`d7Ev-`-dU5f*!}1;*~xyODXW^o~|V_ z)TMz7U03mWMjtV6(IiBRRNpCU00X-eJ^ZO7Q7a64S2gxRu&3 z@|#PSr2uhwdJPDj4a7Vj8=PJ5Uo*Us&hti_ZZb z*U^!32}}LZDzr|>PrDx*SLo`}VAo(1IH+=!P2s*rp~f8{gyRP*Z@~hS9Q`XTA&N9|V0PCeB)LHLWlFVcgez%Grwh0K% z@(SFxL7~z-Ex|^+z_1eJd4MEv_LjIUN@hHUlp9sOFU4dDD5<#@-0Pel+^DDEV}!$R zcMEA|3O~BEAnzlU9jHjxWW%)t(ZC5IptqSXo{5=}g8unL(SVY4`l|G9z*DH8=l>&A z;@6;mV6+e1UvZG|v3$ldv7Kf5_bWX9Myqj(S{^IG;SJbJ8|13nr{U7u38I+#87Z*M zUVs(!gAl-UV<UwV=a#`xm@10_I-d(Zd|M$@#1Cbk|vWbyu=&RIE&5bIg)BTZqs z!J5X4XqxEf-!(hmaR~Yw=T)~X-juG35e;KrT&KtQGqOd@uVnk+4h`;f%)AdBaXk`$ z-Sv^~(UXRcf}Pt$%n7c7F(@|(@*}+ep4pili2)64RdDKu5>#L-{012p& A1^@s6 literal 0 HcmV?d00001 diff --git a/dm/docs/media/dm-old-task-lifecycle.png b/dm/docs/media/dm-old-task-lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..897fe9d7dcf4868129cd5d02824751a5366815f5 GIT binary patch literal 18225 zcmdSBcT`hR^e&i$0HFsEL23vcl%f>r0YaDF6a6cluEadCBZg+L&{VDS0*`RVDY zzrQ~L0l~@1$&dtru&dwGP5NK;_^YQV?&(9YT5&8c8`}Fj*nVH$<=H}0z zKQ%Qq#l^+{{{1^KF;Q7rDJ?C%x3}l%>8Yx!y1cyH)zvjOHH*Xef|11E-uc&!C`cCw79sqw6ruWE$zjN7bp~}v9WP=brplbynFZVEB0{&0HB1g zij>p$S=gNuA_EAL;>r0B=-z}>R7XOW2I-^%?!54S`#BS#2F$#1OBMw@{3UivUaP5G z0Oa@goTMP~Y9DrhI?JQ&UMvIiy9U|H_9mf}3p&Uw-lz z5Jbc(w2Le@{5Qf0w;S%lS@9y!cip;i&6!IF zY3yx)B;at19-=adFL@{WQw$I%pRgcdS%q%3Be@)OwEo0=%~o=cGV&o1h^=#}F_pP| zQU0n>w(8~Ajy;{t<+&%!=$-tZomzTfcbo~rc>9KO)=e&rQd+kh8qimOP(NH_wR8cV z$COOI2U{%ad4N2CitB?Dy23Uxi3?lni;5u6VtITBiFoRQRwHJitYaiD4my7fm^o9Abk5Qa4-bOq9sRg3nN>exuND-AdM0Rm4%w%G$)~%XG)v*e9muoMoIMGz3Si3 zV~JZdJH~YE@$@E1FE2YTo6sf%IJl4D6pKp`)Rc8+`auF3OQ%%_wjLkfFUfrRy%Nfr55o*)2a8v${5GM;P0U5$D_w0o;C-*k{{20-|vee(kF(fHNk0Cp3Xhun|{fc?e*pj5RrYflVhNhLSU1Qz^C(x z`91@J<-Z%@#p4EWOcVG3H$j-W<|5+q0j@45>B;TZ^OQDtA3*=H$S2nfv^7jy(s_7h zLiB@;&w-EEMbl|Xvm9-Wm!Rxzv!Lwe-$R^-S3r&QtZ?iPDx1#`yWYyen^l+elVHC| zi?nxTq?U6To`P={T+z8F&W|jdJsd91tU5n>yR?Ldi$!~v%;N65Tsj|AzR7ld!uW%( z{u%GRK(E)vM)+o0Y&gG!+=KC!OQR$KSza0f$`czvpU$dCqifAu0z!7zN^9D9`gx@kX;2hF*@p zuf-NJm=oHk-poJ6RN(;)E`_3bn=9~6l#ae8yx=GI*;({oe|roaJd7V7$?&TWEB+JG zEX$SX(?~l@`E-@9Rp?#DtF&0WWeEea)a$1w+r!Cag!_t?=Xcsnx_ecninOUj4zJCL zQxhguemtZlZ1-f{K0z@Qbcf^^jSpez+y6`9CqFjl@QC1Fw9xmf%r-4|zs|mZ@4r%) zUyQdLc604Ep_M~eqI72-a`)2i#@nsiM2+0XeW_9dLfHQI zPpEx017W)p4~4$_(o>9+x^I5g&Uc`T$xpoLmty2TXkF&A^;XwzblN|J$ZQ7h3wiL||Y%HK_LGn})L}K`yn&{gbR`)!4-BoX`z$qhikRv$GG`6nJAq z#<8u2!ivpH4cl`)>nRZ(|Te%?u$@a+P>rB5W6)b=qwAjr!@fU2E0K5kO%-e#K)7pGjELC$wYA8t5m@8BzzrR1|{TIo}i?weuH;sz&A5WYp zTvAZsH_}vFm;%22%L7>f|K+ZjQ3Zi!0Wsj}@oNmOM|0}vmqhBA#)Gp0@^aHDM9r5y z$5X9WKg3h=9o&!i-h4H=#MwERz}V*+W#`UOdz~zM-ahRYhX=ZXSYr9(00nyAuhzDg z(=aryUt+S<_C_y=)_&^kYDEr1K52jsp@G1*`ekp@eYQ)>)zM{e!H&q*RYhP>`Dj|S zZIytFy9_%kt7}@lf5qviKz}K8=i!3P=hw1b(}R<_1kzey3yk^el$_wFUG&xS2OCD| zqa?0Yw_Zyvfz~zJ$_8U()|gm{GB2HQ>1MIe6WjuoXT6E;c%u$II%b{wlCh`bh=54$ ztqp|@LTrP~uE^j2=bmvV=kwcESd!$0>xxqjF8TuAoxucE&Lk_->J~>vCOk zmEaD=#}{65MVSHd6@oR47c?l_a7uVnN9DCfa(2BzF9vu#;aif)c&< z;*oP+xWeeZ!QSS=;=XY{cB-)eyux-0Rd;{ho^k5Y-0C4*27S4oGdG_3lw4yh@A7>3 zbe!+YHICi+9pE#^SB_koIp%E0U+2;&_DN?Psj633+wAq%qdIg)7y(y}EUA;gM0Z8v zbMG4_rJFjU_6Ay*pYP|-N4;j=2Y)o1(Mu&!bh)Q~{0dl6R9(Pyt(Wyo60Y^1WJiPoVPwS>ztgj!#A-hI2~UC-XKW z=4&8SBmEZji{UjLkFou?dX2I4rSmRwTg6A<(JvcR^-bYdjD4o1(fsH`GqStJ>w_gr#H-9eJT?}tp2b{IN@=b9<{9$D<%N2QAP4J4cf6EP zf$jWNMN{vf3F7Jn9HDFSb;;m)UA^k!eC&ACQAJ9|X#fPoUcGojD%iO4vD-^l*5NzX zr3__uv`kTpecqcu0knBPH%kF#CKp61MQQ1u+NabOs6FJ8TjTS8hHcv)P3YvG7?|jh zv1iugL{-|e2wqR*EaAB`8+hku_8-p(VA z2w7M6*Bg(Rbx7E#=CHWz_QKW2!M6C(H+vT?E_M%(Sm8@HdA)zS73`~R&^OpfqBLo)S3^AkA23#o+M7?4(frr~;4yEk$^y7UqZD#_b#GkT@{=IGIj0KM|8e;wb&L#gH*gW$IOs(FbjdT!O8nWKem7vM z-&U0Yk@KfNFT!&qo090FKEWeKPN68Xd@2RCil{L=goEDBHErFb-@H@PLwKuj) zSIkg2b~3##oC{mVD_-_-Io*b{e)JJND51bD-2QMF#YO(`O;GS+0V|f9@4?wtP;R_+ z&aeMee+Q553Z^{j&N8D=t+azk+5aT7zdh|?4l>=tH8XJe-04UTrw_V?4AIL>edSce z=;*s?N3%@!iwr8BY<#r2`jFaPShn_V{RG346-jm{Aj<77ELqE!VQyEf=Ur{QGkP|hB91j0 z3H8P}{bW3=Snrm^idvIj8MtGZe6k-C-js`D$=fwD@q(ureF&FJhC{pT$=mT<^wPx2 zz#zy!IX*A|88Q7Ml!XfbCc-kFg&?3d)&q?CAP9IlUOGs+bBnr7l>CZYN?8UTR%JYj z5bUmmW`SXc8o_vU z(-BNiKyA)I7{o|*R@ko&Yc+JD?e18Y%t&SR)@FEfonY4h5_Kph$mp^E)15#KrDQHX zrnNhP>~c80Hbk|{#rc>$EIL`26U$~%+fLv7cy{p=TL@(e$w@9s7j-(NZ@*BRQA=uz zjfzW7@mq2jhrzxcOuJ%!u&$EM@v8dW+AVqWDXr%xH+Lj^1f7~gxAtD2+=+<*1L2zM zy8l4SYRTedub(<53O`qb`SAq=GM>fGZM)MonQc55|3@G~^*rd|?~Pav5F~H@POrc! zY$Vz!dD3A+yw>79-IS7=M5_XpbC6dYn_idGMWH|<;8DrgBKATO+mfD=;?ZS=#J(_P zCA@hY6toz>@OquAwTdn?{O1@)z~nmw`xV1~HV88&OFr#3dGVM~1Z3L2Cvw(=d==q6 zp+6AX^}bf}#FWr{*jUw##e*0i|3Nt284*Gna%;UM>+fC5AVRA6`b-wrc=%q9K5;j) zc=QXO7yb!{&+W$R6v{}lFdyD#&+8HHA*9Z}EBl6oufq)BRtiLccAue`RO|Wo?s&9^ zjZ!A(qk5?eH%dhD=zbOO#+Tc<1G`1pV3yNyC#r%dv z+oGA6;Y)E?28Xh3@Tg&ZW~#AUosePtGAZj9hpPmmDR&qYSeK6SF?wD-EP^2AWDQlC z9r4mZzcU!VCtb& z#d8P;&kMEv+qBAv)Z)*X^}e&E&E(9Tr$0NGPAFDJpbW93FRW6F3<^>}qHc*l6I{%x zgq19Xo>}u`(&T%b%J#9M7p}}X% zw5MKEvH`Sw3XH?Zp(knF1bB?!+3OuB-c=p0|D#u!kyD*uuPf<$jz@m(*V5jYwTYzi zDLMA<7mPBfZT_FA{POMzRUixd;E_T1P{Nx>F!XPC_0iG?+BTsIsrtHSeZmCfGXwF~ zyR%&B&7{u;Vw66;xt&YWHkK^7W%(aXLZ9*+EkFEp?PF>&n`js{x-)I_Fu>*%qph_5 z_rpP1>++ItaOT*8y{~7U_-&xs)kdvr z;<1fo`Fo~H50XHzgd25C#KpwbHdesa+UvHS{z-q8L#VKnw~fn+Ax+q}-OgBL4oTn4 zv%}%ZI*@^WA_*FIJgv#O{juuhv-ApQq@T2l|D`lh?5|R4lid9-t3AA%yzR^D7bo=^ zQ^A)S~~m0eVS;p3>EsHo?y$&T5PyoZo$kj@qQ3xnT(^OmJEf zTN-n7UxNi3Y_xJPR-Wfn(D}#cQQK9}S8-eK|oIA^X>wa|4?nK$Q8l(!qc6H{p5pV@1D zx&BmFC3Jz`-Nj4h{rmw6h&JJJSQ-%U`crL;Zb~ScZ5nf4!GW=U`hnf2*SIE7k!_Y9 z1OhIT)sbBnvzzD2m+}@LHucv76PhUstH%)wn>bHop!3_^NHnD{9`vPU^ROn)c|2(q zSKfUTW7>939+kBmlD(?M{_=i}?XbT=cia3wq36v42o;n z{g{vH)b5eQ&l~j_8BA9p?J*xB5#o8y4mqAXh46#rHxKnGnhRXom@h%e$W1h%YW{xy z56QL%e#V|CTZjNKi5O6R^X*EfO9J~`I#lEGQ7^4B=(~v-Xrz@BS}&s`D&6#+j+v#v zxtX%BbXA0i7iN~q7l?OetwT0%q!MuKWx8RO3gg-}Z)r-$>*>sKb#&ncs%Y-AMl`I2 zTa6vbd;BRHs@DGgvTk+e<~__0;3HiwgE60}0duP+g#dK(!6CeINOtza@zSDr08}3g zgFvMOW!s3h*DP}}tT|A>H8@iJg*?q<5?jpst_0+kfsO_dOTivj|dC{ zObr>dLs8qAUUKYmD%X+ce}YW*A#%@JfU$))<@Gf*QpCdBCcO6H{Y|pV{gGYeb7uEY z_jZ`$B(y?UG$R5*wZA#O-A%WGqk;mz(s>;6yS$8tQ6h%;Pxo*c4Prht@YcFNPgpSn zW`7zt_`+_yv4P#P73rsZt!LGMG*~(vy47C94wfT*|px!Kh))C zEsMvEIo5n}2!46>_DRcE!E>)1Ffe_;n;N5T$c_sGm&)jM_`LboJM!(@+Q=F`7w+%c z+S<>&u0htBJ&`0x*dzbfZq|QmMw6_@N)tW)eBL0^4&sq1GF%5v5eBeeS0;uGu|O*o z$aWbVK?R4wC?`6~2(`76AXGYpAS4aE$c5P0hfcW!$_-)Gr8KVN*oFa-2QJ@soY$m@ z#%8e5YzO%N(M`6E8rmbE-u<*ff^#1seJw_jHcLu_C4t$!ZP_Y}&hydKUeUy5USiZK z&`Lj~R)_#|3EcF)g4K@-i$M)4%C_0AH$^G<#i+v_hdPHETR6g?Ek%;IZ**OV9vfun z_ddNzr6{4P%-1ZeoHk^(a2xN&`kELDmZyNSAC~NVG#ap7q3scbKtU3YmoJ@IS6FkfKuBKOM3YUyflialU z*aS!fm;^@)iz@v|WA96ja=x-!K^E8#<869oMzd;ng&pACNcxF)N0&wD2G@F*m^d-Y z-MiT*GuVHS_?((8e1!9xeZ60gPmcrR>S=IpMiQ7^e3arD)j85z>E5rUUkY-kdjN_wcba%;DoOU zrh_U9=-nvD!Wu35%vobZ7?fnrT*k$6?|FOw?idnS9gs=S?QD{c7Dwl0c+L|g zCG2Gx_K>WHFZ*A}c)>U%4AyYJ7gZ6zG^lU;cFP z8I|iyPA#oW;rxEPx-E5vl>JOmG(=PKpgHXt_qUx(LO`xiaL`4?V`2VH)UX2Z4}bqr zbep$S9ey;~d5yri_=5!h@FO#|hM*?t-?a5W$W#`VR98_&JIC~;?&})Xzkx2CgGx`V zBtM9t=DCXJ^e8}m?q~|4kdP{CwAmH1n`vd%GxOlSn(JY9NB}0j3_=F{O~#`HzD?NX z1IYteC-TEiEVL48n&$Y-(5AlH0qmP|M+_U${QVS7T(oMcs~@C;%w!k&g1)B>h39V6 z@2+=tyluLC`-9q&3Lx@KbFQo1#8-cJ{{m;3zR@`6asJgGJ8zxv^eZ;2dh<+O>B39O zv{6fuvlow*(s8cX=Uc*@XI-qqSU{-m&-)_E)LnDb0*eScVL_L27l*-8`|=z}ri2=<;6TDYc6W#`V45uU|8PVxVYH6&LJ346$jk{WIYZiBQrMFgX3Yk8UVH?j7)CorNG?{+L)70X85rB9jlJOF;oX z?d0`jg+?H`!AQL%SSZ~<5kZVf1mG|CGdCnwtozXxA7!nb)|`p)S7^{kYhYLyzCc34 z^%aK@S|(NEFMgO&iy9=Ih4ickY*i>5hkoKT7$dAL1@^JbZb( zgQ%%A&JM$9JK0eQODudrp)>FJBKRLqCY0=s_?1avArVcb0UKb~I{IzPy8P?i2UL3; zT}7*94^hO1>Yra(^#l)j_56LLR-HYQc}+Dnzz!EU&$x%spqef4qyfVS6av$gzhh@}wszc0VYaX?ptHgXfa8NZEzf*?)<^%_*C)MoGqK)J%DArF_TGB#^?tvMo3$$S zzTJ4t`l>&7>a!&1%SO)Y5gFN93XJDr1%*3s^2 z)LAQd(X#aM0sY>8=l-z<6cp15m8!Ru^XO0snG5n^^pN80W6)yrvCljF?o63)N5zM?bj`i_4|ThS%Zo?N1f*&DD&c3g5ASVdhR# zkHbG!BT9$Mo&I&4alTKo?_SW*hiS2QlHH> zh|jTc@&0$yMKfgaJ_S( z25tAs)WCEHd604qS;LFsf3P2a*Mmwma?#{)_G(G?@92JU*78Z$7BG>r>=?YSl>%d0 zpgD#x&$$v-36G&ZIA_}T+Goze<6n;cw)(YCZgNk9tWoCN84%D^Y``GWR;1Ffu@v`e z%%zxg#t|RZ`A$W*SHXu04EjXbbNdGZ?8BO14Wp46G`?oTS(h{B9xI}Y;Az8vs-zAHU7Q9+;vS0y5MMcBRC zA8Zo(`@Q*vlfX{lq$>KYU0#1Py&V0S_yU``mU%7pc_Euxxr5@6h>7N)_m^}V326Y9 zMa@^aYRx78HC&1ns+*q_yS@?@m5ZSUQr(5G6tukYYr z*x_A6_9+BB3HAy%|9y=ZohRjS0G@1I&QcvX2Z!N#Y2lJaDJV`OpZcUv3;NnY zL!Sn(+7MlghXq*Qt+{oN$o zF{1fqU3zWS=Ga@9GMY(l?G(zHiC}y$o8N=N5G8&UXOI8!-TT%lkQ$WIY6t)$^JSl7 zNUN#!6=DJRjH<@-{s@L5?eYuC=riS1PynjGG<%I1Xj>l`rAq!znnqV;4H>+pX+#z4 zi5kD0|II2TmmjcOeP`V5({&q4`XCl5$a+9J0bAH?{a|XuS`-wU-SMwxrvk|I!Q$-{ zgo>;@?1sl4LZ!?7K%WoDdRP9+isZ}o7%s#7D}Gr% zkvHn96T0=tzMc)a2bq!tQ6&RZpc6IJ?2~~4;fU}HhtU?3lMxc(_9EQapCOD)6o4H; zf7F3&ZhM6XDGmYrvoGNQLXaF0s34|smzo}E=8+WORyk~TdY2OAD@##S(Zz_8Nih<2 zg2_!fa3>vieR0WKEZ;dRJ($qet$kh+EO8$Q;piDj0&+)3t%a*R^0|r5q-SS;b%i77 zfNGPJ(I?%_z7UBaZ3}M%i^+=Y;itl33DdX z3FqCKT>lwDe-DiC3=|-g4@D%G<%8^zHSfg*CVOw=F?a@G6fyks{p(D1u0{wP0xAX* zL#7yo&NQ~Q{Ar|5`hGqtC$YTISz(Z`ecdMHaZf%ODyB?~=mnvadbS9E(1Z?TNtW;Bq7?E0giPCbTa zaL$TcEUCxA0j7xoNgdN&#Ydu3;f=xT3&GCBKDW1x7{&09OUj@O{=5jt zJ-$czB?&L?fq`ZABQHq=-pr~!wu7#nI~ily=`Wcd`3yX7+S~Gf64E&lL<(-8qrVzm z&J+}J!_ztQr%<;e_>=wX)o@4c;_t=3hOx(^iisHhe7yr&-`DeDF-<> z8dp8D8ZL6iD+JH`ut@s=*J9NP&6{+yXC^;Gw4X~rhxFX%=k)(Y8^AvX&!HE~eO5d9 zzcO@^GYU8zS(SQtrezUklbBRQbmG+G{6ESmK4~&#DhDFDeNb~N1j@XHgLnqJZ14WBAT6#NYXyVXa6*w7(@zFmk}VRQTH3)~G2!fV|DvDx$LIwUqQ+#9 zf7cYygIk6Ldk4B-K8*d-vFSi^OO9OIP+Yoe-W5j(489ZYakL=JU*QDLvVw`ZkAUfUhM?SvlWVRCmu zZ}C1}HE(<)8BXY5;=V`=@&Cy*`UEbkulM6v9QM=e%P*_D5QGZv-#2HF%b#o7TU)hq zU`e?hV%B2c%o&gK^OB6>BKG|EbY_fBs_)q^#mnBgTp528;MUZ}CL!9^L7A+L%=pVv z*2(=V#=psAr{zjL5Em#GD0x zTN=voP2eE=lafeCl=e3z0ZG6{zVWz$0)3Q zh>gu3f zAd0u!y&t7Zf0M4hGyPEVF^z2(jsI`HA!Ucqe_!k}K9D?AYp|Z`S{@MjlQ>-Mdzk-h z=Ok~WYjeRSL)a^SJ?-qnXOP%xn#S?HEF>fc$QbV87MlBQl>1uHCD-+b;YpCKo zWXmlvM?&u>^e_Q+#qXPwcIdrqE;NgfHCCNw8*}eOs>G;E@0LY!$Uel=McXbh1OH5UoR{ik)BKeBw-hBP+xA0%p&`jwHj7KgdrZh#g zmP9W9ONWxs5;c?rCl!cPxKUFTxE1ZXQtyxb6C_Ynnpes;J+&dM`h95_pefA=NlK8} zg`5$fMEqqYaUziQD;=iLS$9c=LGjRmT3gB$37cS*t}eYp1*Lo!l?i50jI}?RkTL(F z3)(Eke(u3Ga)pDLB6oy29keJB`0#xtY1J?X%QdEfIR^VCvEB|o)Wo;pEvtljcERiB zI7ae`&0pt{|2-f}d*nyr{O;oG>v(CSr_W#T1T?ug+^vJ|a*k2777Clu@xD)>B{pc= zSoJc*@5th2C;xsIg)Wu?52-VngcDN?I)A`6xRmsm8_SDsTmgUNVF56OmU3aWaBsJp z;PR(i#(i=u#<;_a1T9>vms_LYDviAPFZMbYwlL32cv=)^8%r_X^Ts1OqF7O(G|i>g z?6I=*gQlGi7d#QWWX>o~X#V0c8;dC3>+g>&daH>n9&*THKX6g9Vuf<>IaXAiR?dG;Ze_BN`&TO47yQ4NsRNO^|KRVENQ`F0AGLP4wPoiO zheJ4-~gX zCQR&r+6%2_VWx?;r>z}INd$FCIkFi^(f$;A4 zu}fE>t@%%GsWw@@F%u!}=8`*TfCe35&bxv5Pn%!=x%7>xl}zIFd?WUSTYqKg?>8AG zpbeon2jAMl(nHp7j&5wahg@?FVug^_da*Ygv-oRI-iZE?(MJ6KZYX^&40xB_R{W|N zT<|gATeF8HszS5L^uYobG5j{_J*=ZJwbCzbv+D~Bl+?Fu1(dfy)yK-vW37cz*J90T zB0toAXvlNMO|Ff(=Nd0V+GY2Vy_ zV6fbKyM;ek0#^F79%gEX{sM}VS&%G8E;_Z*RNBT;NPL6}zdJ;rZlAE=d}q8NE%v40 zKY};OgQYF2j{o2-9rx%u$`h+D zn`jaA^yq;tSa41;`J%rdr(D5vg4J$8;h0)gk?XQDIRJH*vD;F?Zp)77V6h?)udW}-(^C3_!nmRnx1pV5nHR=R%iV7kL|uS z1eDHrHwAVI=u13nN*5Kg-Bod#Ytl;3ftok9qEm?K>a8UWs@0(9 zu4v7huTtI2Qb3uO-fMEXY>i7fM@RAbt#*R*@N91bG__dBZnTqZ);8cArT3*K7|Gq% zwD(z4+J~Th7kA{gl>`AFR^zajrw{d&?QiFm@OK%_r^a_mT)o2VF7$lHSo&&We~iX0 zYhsa!fxSw;2P*k0FIUa>Vk!>;rXv%?@#v%5m$Qa%}t%ko80HoXYsNq^9QjUM4!a&w&&?7fLQ@@j&FsR6kh9>U zIddvt^30#c2wNuc;2iEU+Zd~{x|kANzEb^xOKu+`{GbJj23X-AXhMck3M`|?Ec zKB=TtbEyYeUY<`B?w)LU+5pOx@o-w)BUq3ER1Wk>*>94$a1-jkA;T&MpnDdo4C=S_ zwg_nQhYD@?I8pk$E+&@*TbS;1h}Up!h(%Rv{oXpEW}q1Iu7vp{sU3g0P3?F zR%p8u%0>WEkXXQOCb0n-CrQ9V{qFx=mR{pA4mQI+b}r79sW_e4{HXzg7Dl}5#Gg=1 z0QlY9N;)5`U}f0191vD(hh6R3HM`HlcGoPtQ=sF`@$&*<&@~q>A0eb0KoJnieqsgj z^CO2S=AS|$xpS%SW^`;JVfm$7zvtu8Py}#mOO8?=rlw^g$0w7+ib1pULE#6svAbe0 z80;pUxgFNIE(Nv%M7S{32lt(Mh0%tr$oH@oRNFFdji=^uYwK&Zv*Szj$p$3habsc9 zZAX(i36$V6|4X;TqPgj_Quo$`n{{r=kW&MO$}z~NGjp2>NP$^qEk7Lm#f9m}7B})7 z|22%%@;tijG}uaxI66FAUSyDy-05P1^wBk4cIdeo)~46SEWT;|=P<}7&wd15qj-Nq zDlT+IaOY(@{^f~Ae{IH*|J<&7jnJ&@6R8){;awU1H%C8&Z-w+bPsx`x&Xc-VSh5es zEEs;Sn_x(!5^HGC+M+8Ub4+MJ)m+q<^ZREYiZzFR(Ug(qZdxChIbYK!$4>mtZoG5j zIx_2{M_7F3f!TLX+}SRn0$4<+p`*fl07*b7;lIZJy($SMJrSV0gOGxb*Ln)Gxp3JJPX?oNu(KTRw?lRoqTEsAFS%VMhQVV#>D=EdYhDha`2Pn`61PVuVnGKf z#9sbQ!d6qOu+i|h=eQ(Znm_8REiy?_BFQ?(5?M(LLDux-R;6XtwCSn=vGodj_>ETD zZ+j=V1O9otI8=Kd8B)0rPHc^C2cC#~`#Kub{V_wGffD<_g zhVW}Wx!$(GJAOxT@WJr}<&>8S*z&-O4)&tUuhknT$m_lKg?yz_TMf|*7MhM}ynrK* zDGrH$2>~!oo{B zZAcY&e5h&w2)VRLpA9$F+J0 z7W^pxbL7PZ=nj0sr>n6))}^mB_NAHjv;_hf2cn&puK%9xN9V~dM(=$90K7-vJu{dm z^j^7GqpexA!4DzV&vX=Pp-A88KaS&31#Bu^lwv-(0x1AXPc`^5*H@l~- zF)Uv|2<4!I>)xA~2X{y{-0!QmW4hMw2mq~z`M+*NFOQTuR9lCSCa)AoPnwE&AU zLYDT%-xv1#P20SH&7A2t`{nqSI@cEz;w+OH|MEVjrhy_x=))SCr^Y10U&^k2Mxubi|$*0-u z)vjo}iGZLN!*UfZT^rfK49WYYDDNHo@6Nq#|Eu724&EKAc-nM7ZpQ{kKUJX-f^zyL z+?yZEQ0|@95`Tt-FRo=1fd1h`X0K<8HfZ(g`M>5>zeRuoc#6F9?dji8l7C! zKKC!&Z*SVu;Awo04x4T2;3>ZEV1iv}5-Xmvkfg|^4v7daBPzJTpIkqYb7X^H2@W)P zic1!pu=ha9@evL4uC%a_xy|OYX1o366kYpTCPINSH7Eq3{h^x@B8M2EQE{Y=*S0(@ zNzrxRd+GyXm**Z|p|D`zIFR&5q8@>?%UbT(d~We#I#ct>akDs*0EcvcG7MF_DfUPT z)#54UqsVP;;=A`=)2E%5r% zYy@wjI-kT;H@!>&cJ?+OLg(LSb?dZ$`HVmr&sHWw(Mz?T{&6^{@l1qt$41U~ zm_)npT)&0Nhau?EEfIROES@BiFl{IdIdvO?0EoSNEfao6rh+1u@#>o+TWROc<3FO2+WWY+H@qedBM!n2&4b$z#@VXc!v z<7LJq*hKkJb1xyG%w%q0rd9K;Rj?G`Ym-de(!;3pOe-}W5tvWBCUZuh%!EY_)?g%o zQ!DSqA>@0%{)IKJ%sjB&iLKqiCS7Y|DX|dWZlx?Hng8h%+ zS1u6%33>6S&+FO5{_f(NS<1Xt(yva#&Kc^4@AqL z=L7y(9aVO)1#(b2?sVR1AGW7#@9$oD-|{HSjIC?Vg}NwOF}sDWF|0490bQ20zz+1r z$*zAWAf`IhKXt3x5P4GZ`IgbA$>Re?0&DeVFF z5?j~$LY}X?#Z1bgGG^jYG-Hh!+EFoY)jc@uC}<>jzps8e<6N=B=JTXJ3w*HAP2nMi zs_5>DdsP5e%~L9h?dHNDxAFXIiVF7M#4^4&(==kDT^Y2uX#)3mpU^fo>d^LkZ_nXjiuFZ5Uf$wi z@5g1%Q-K9Q@LQjwXhnoD74qRpyNyk-%V)e`rW4fvu?OMdU)!h5IMw(*1sF)RA3k0E zW+h-5A)t9a_nym{X-`t;UO)3DUZ?bdV$#R6i{>yXo&TFO6BwSqtG#7^@Jv)lyXmLX zC39vU4~G)Ss+rBtE6<(@Gp|@}wtnW?4WZokR-MgG)6Tit^nLDJD=|>bAn+_-_QWhl z|ETw7Gt6w(mP`9c&%3spcNwq$>$_~1+m?ULYtB4;xoZ2tEe|vI-cGpnVavT-gWL*g zDZe&P_O=-hYoNd$|H&;mhZ}@76BY!>?)ZQ0PJ7w1=IJ_o77A;`_S}l2A^CdF)@34l ziqq`2)iT_>XL!6a_xs5oGjFoWX+&f{D?QEf-XcA1e=PHdch}C;+}(a$?&F>B$6ps6 zWM+L{bN2YOqT6+>av2f#`_Hh}$DY6b_ZRnHnT9pVY1d{IE1iqnoOX?YrRJQ> + + + + + + + + + + ⛵ k3s (proxy) in tiflow on  save-dmctl [$?] via 🐹 v1.17.7 via 🐍 v3.9.2 (ss) ls ls ls CODE_OF_CONDUCT.md Makefile bin deployments errors.toml go.sum pkg testsCONTRIBUTING.md README.md cdc dm examples metrics proto toolsLICENSE SECURITY.md cmd docs go.mod new-dmctl scripts ./new-dmctl ./new-dmctl ./new-dmctl ./new-dmctl ./new-dmctl Welcome to DMCTL! 3 items > 1. Task 2. Relay 3. Source ↑/k up↓/j down/ filter ↑/k up↓/j down/ filterq quit? more 1. Task > 2. Relay 2. Relay > 3. Source 3. Source > 1. Task Tasks Operations 3 items > 1. create 2. list 3. delete ↑/k up↓/j ↑/k up↓/j down/ filterq quit? more 1. create > 2. list > 3. delete task list 2 items > 1. task-1 2. task-2 1. task-1 > 2. task-2 show task status... { "enhance_online_schema_change": true, "meta_schema": "dm_meta", "name": "task-1", "on_duplicate": "error", "source_config": { "full_migrate_conf": { "data_dir": "./exported_data", "export_threads": 4, "import_threads": 16 }, "incr_migrate_conf": { "repl_batch": 200, "repl_threads": 32 "source_conf": [{"source_name": "mysql-replica-01"}]},"table_migrate_rule": [{"source": {"schema": "some_db","source_name": "mysql-replica-01","table": "*"},"target": {"schema": "new_name_db",}],"target_config": {"host": "root","password": "123456","port": 4000,"security": null,"user": "root""task_mode": "all"}⛵ k3s (proxy) in tiflow on  save-dmctl [$?] via 🐹 v1.17.7 via 🐍 v3.9.2 (ss) took 6s exit exit exit exit exit + \ No newline at end of file