good job, What you said makes sense, I agree with your solution 2. BTW, I really like your communication skills and your detailed and clear issue description, you are a smart guy
Best Regards --------------- Apache DolphinScheduler PMC Chair David [email protected] Linkedin: https://www.linkedin.com/in/dailidong Twitter: @WorkflowEasy <https://twitter.com/WorkflowEasy> --------------- On Thu, Jul 8, 2021 at 11:10 PM 黄智远 <[email protected]> wrote: > First of all, I express my deep gratitude to @simsicon, @dailidong, > @Jave-Chen and @shaojwu. Thank you for your interest in this feature and > your advice! > > So for, the feedback received is more in favor of Solution I (modified > based on existing nodes), but **I think Solution II (adding new node type) > would be more suitable for DS**. I will discuss why I think the second > solution is more suitable from the following two aspects. > > - Functionality (From basic functions and long-term plans) > - Cost (From users and developers) > > ## Functionality > > ### Basic Functions > > In order to choose a solution properly, in my opinion, the baseline is > reaching the basic functions. The goal of blocking task is that in the > execution process in a workflow, **if encountered blocking task and the > task met blocking requirements, the whole workflow should have been paused, > otherwise, continued.** > > Obviously, **two of solutions will reach that goal.** In addition, in some > sicuation, solution II will be better than solution I. Let me show you. > > > Suppose your boss have a demond. There is a blocking task in workflow. > And there are three independent sub_processes in front of the blocking > task. Now, your boss tells you that if any two of the three sub_processes > run successfully, the workflow continue, or else, pause. > > If I choose solution I, I will use condition node. In the current version > of condition node, I must have two branches, one for success, one for > failure, and two branch must be different. For completing the blocking > task, **I must have a useless branch** (echo helloword in shell for example > ) to meet my boss requirement. Maybe you will consider to modify current > condition node, but I think it is not suitable. Because you **break the > condition node function** which is used to turn the workflow into the user > expected direction. > > If I choose solution II, everything becomes easy. As for this new type of > node (Let me call it blocking node), we do not have limitations. This node > has logic judgement function and it can support one successor branch or > multi-successors branchs. In this way, **it does not destroy the > functionality of existing nodes and accomplishes our blocking goal.** > > ### Long-term plans > > In solution I, blocking task is **used as a special node attribute**. If > one day, Apache releases a new bigdata component and DS wants to support > it, we still need to add the blocking option when coding related web pages. > But in solution II, put things right once and for all. > > ## Cost > > ### User > > To be honest, the user cost is similar in both solutions. User will know > what blocking task is and how to setup. @simsicon says that solution II > will cause the modification of DAG. Actually, neithor solution I or > solution II needs to modify the DAG, but the degree is different. > > ### Developer > > Coding in solution II maybe harder. But I believe that is worthy. Beacuse > solution II is more flexiable and competent than solution I, just like I > menthoned in the above sicuation. For another instance, Apple releases > iPad Air 4 and iPad Pro 2021. iPad Air 4 (256GB) sales 749 dollars and iPad > Pro (128GB, 11 inch) sales 749 dollars. They differ by $50. But with that > extra money you can enjoy the ultimate iPad experience while meeting your > daily needs, why not pay that extra price? Blocking task is the same. > > In conclution, I think solution II is better. > > Welcome to express your opinion! > > =================== > Stay Hungry, Stay Foolish > Martin Huang > [email protected] > Sent with a Spark > =================== >
