<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif;">
<div>Thanks, that helps explain those.</div>
<div><br>
</div>
<div>Let's see where the conditional evaluation logic goes. Likely it won't be python conditions directly.</div>
<div><br>
</div>
<div>I think though we should be able to work with other condition logic. I started
<a href="https://review.openstack.org/#/c/87417">https://review.openstack.org/#/c/87417</a>/ today, hopefully can flush it out more in the days to come.</div>
<div><br>
</div>
<div>The differences I can see so far are around how a taskflow engine activates this conditional (and what results when the switch chooses a path). In taskflow the whole workflow is analyzed before execution (and translated into a directed graph) as to what
 is provided and what is required by each task in the workflow. Conditionals change this since its not known ahead of time which path will be selected. For now (in the above review) I am making it so that each path that could be switched to will have to have
 the same requirements and the same outputs (so that the analysis logic still works correctly). I'm thinking that a switch 'task' will return which choice it made, then this will affect the further path that will be followed (basically all other path choices
 will be 'abandoned'). This fits pretty well I think into how typically this is done in dataflow-like way and won't affect the state-transitions or ability to resume and such (btw found some neat papers at [1],[2] that show some past history that I didn't know
 about).</div>
<div><br>
</div>
<div>Of course I'm trying to make the above not be its own micro-language as much as possible (a switch object starts to act like one, sadly).</div>
<div><br>
</div>
<div>Comments welcome. Code welcome even more :-P</div>
<div><br>
</div>
<div>[1] http://www.cs.cmu.edu/~aldrich/papers/onward2009-concurrency.pdf</div>
<div>[2] http://www.cs.ucf.edu/~dcm/Teaching/COT4810-Spring2011/Literature/DataFlowProgrammingLanguages.pdf</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>Kirill Izotov <<a href="mailto:enykeev@stackstorm.com">enykeev@stackstorm.com</a>><br>
<span style="font-weight:bold">Reply-To: </span>"OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>><br>
<span style="font-weight:bold">Date: </span>Monday, April 14, 2014 at 8:31 PM<br>
<span style="font-weight:bold">To: </span>"OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>><br>
<span style="font-weight:bold">Subject: </span>Re: [openstack-dev] [Mistral][TaskFlow] Mistral-TaskFlow Summary<br>
</div>
<div><br>
</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>
<div>
<div style="font-family: Helvetica; font-size: 13px;">They are all parts of conditional transitions: every task should have a number of possible transitions; each transition consist of a reference to the task we want to transit to and the condition that should
 evaluate to true for transition to start. 
<div><br>
</div>
<div>At that point, I'd say that it perfectly fine for TaskFlow to evaluate python conditions rather than implementing YAQL, though there should be a place for us to pass the condition evaluation logic we are using.</div>
</div>
<div>
<div><br>
</div>
<div>-- </div>
<div>Kirill Izotov<br>
</div>
<div><br>
</div>
</div>
<p style="color: #A0A0A8;">вторник, 15 апреля 2014 г. в 8:02, Joshua Harlow написал:</p>
<blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
<span>
<div>
<div>
<div>Can we describe exactly what references, direct transition, expression evaluation are doing in #2.</div>
<div><br>
</div>
<div>Expression evaluation especially seems to be an odd one, what's wrong with pythons expression evaluation? I can't quite see why that would/should exist in taskflow.</div>
<div><br>
</div>
<div>I can see it being implemented in mistral, where mistral converts whatever DSL it wants into taskflow primitives and then taskflow runs the code; this decoupling ensures that taskflow does not force a DSL on people that want to use taskflow as a python
 library (this kind of restriction imho isn't acceptable for a library to do,  and limits taskflows own usage and integration).</div>
<div><br>
</div>
<div>Thanks,</div>
<div><br>
</div>
<div>Josh</div>
<div><br>
</div>
<span>
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>Dmitri Zimine <<a href="mailto:dz@stackstorm.com">dz@stackstorm.com</a>><br>
<span style="font-weight:bold">Reply-To: </span>"OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>><br>
<span style="font-weight:bold">Date: </span>Friday, April 11, 2014 at 9:55 AM<br>
<span style="font-weight:bold">To: </span>"OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>><br>
<span style="font-weight:bold">Subject: </span>[openstack-dev] [Mistral][TaskFlow] Mistral-TaskFlow Summary<br>
</div>
<div><br>
</div>
<blockquote style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">We prototyped Mistral / TaskFlow integration and have a follow-up discussions. </span></font></div>
<div style="margin: 0px; padding: 0px; "><br>
</div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><b>SUMMARY: </b>Mistral (Workflow Service) can embed TaskFlow as a workflow library, with some required modifications to function resliently as a service,
 and for smooth integration. However, the TaskFlow flow controls are insufficient for Mistral use cases. </span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><br>
</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px;">Details discussed on other thirds. </span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">The prototype scope - [</span></font><a href="https://etherpad.openstack.org/p/mistral-taskflow-prototype">0</a><font face="Arial,sans-serif"><span style="line-height: 16px; ">];
 code and discussion - [</span></font><a href="https://github.com/enykeev/mistral/pull/1">1</a><font face="Arial,sans-serif"><span style="line-height: 16px; ">] and techical highlights - [</span></font><a href="http://lists.openstack.org/pipermail/openstack-dev/2014-April/032461.html">2</a><font face="Arial,sans-serif"><span style="line-height: 16px; ">].</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><br>
</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><b>DETAILS: </b></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><b><br>
</b></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><b>1) Embedding TaskFlow inside Mistral:</b></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Required: make the engine "lazy" [</span></font><a href="http://lists.openstack.org/pipermail/openstack-dev/2014-March/031134.html">3</a><font face="Arial,sans-serif"><span style="line-height: 16px; ">],
 [</span></font><a href="http://paste.openstack.org/show/75389/">4</a><font face="Arial,sans-serif"><span style="line-height: 16px; ">].</span></font><span style="line-height: 16px; font-family: Arial, sans-serif;">This is required to support long-running delegates
 and not loose tasks when engine manager process restarts.</span></div>
<div style="margin: 0px; padding: 0px; "><span style="line-height: 16px; font-family: Arial, sans-serif;"><br>
</span></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Persistence: need clarity how to replace or mix-in TaskFlow persistence with Mistral persistence. <i>Renat is taking a look.</i></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><i><br>
</i></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Declaring Flows in YAML DSL: done for simplest flow. Need to prototype for data flow. Rich flow controls are missing in TaskFlow for a representative
 prototype.</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><br>
</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* ActionRunners vs Taskflow Workers - not prototyped. Not a risk: both Mistral and TaskFlow implementations work. But we shall resolve the overlap. </span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><br>
</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Ignored for now - unlikely any risks: Keystone integration, Mistral event scheduler, Mistral declarative services and action definition.</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><br>
</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><b>2) TaskFlow library features</b></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Must: flow control - conditional transitions, references, expression evaluation, to express real-life workflows [</span></font><a href="https://github.com/dzimine/mistral-workflows/tree/add-usecases">5</a><font face="Arial,sans-serif"><span style="line-height: 16px; ">].
 The required flow control primitives are 1) repeater 2) flow in flow 3) direct transition 4) conditional transition 5) multiple data. TaskFlow has 1) and 2), need to add 3/4/5. </span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><br>
</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Other details and smaller requests are in the discussion </span></font><font face="Arial,sans-serif"><span style="line-height: 16px; ">[</span></font><a href="https://github.com/enykeev/mistral/pull/1">1</a><font face="Arial,sans-serif"><span style="line-height: 16px; ">]</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><br>
</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><b>3) Next Steps proposed:</b></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Mistal team: summarize the requirements discussed and agreed on </span></font><font face="Arial,sans-serif"><span style="line-height: 16px; ">[</span></font><a href="http://lists.openstack.org/pipermail/openstack-dev/2014-April/032461.html">2</a><font face="Arial,sans-serif"><span style="line-height: 16px; ">]</span></font><font face="Arial,sans-serif"><span style="line-height: 16px; "> and </span></font><font face="Arial,sans-serif"><span style="line-height: 16px; ">[</span></font><a href="http://lists.openstack.org/pipermail/openstack-dev/2014-March/031134.html">3</a><font face="Arial,sans-serif"><span style="line-height: 16px; ">]</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Mistral team: code sample (tests?) on how Mistral would like to consume TaskFlow lazy engine </span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Taskflow team: Provide a design for alternative TaskExecutor approach (prototypes, boxes, arrows, crayons :)) </span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Decide on lazy engine</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">* Move the discussion on other elements on integration.</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><br>
</span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; "><b>References:</b></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">[0] The scope of the prototype: <a href="https://etherpad.openstack.org/p/mistral-taskflow-prototype">https://etherpad.openstack.org/p/mistral-taskflow-prototype</a></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">[1] Prototype code and discussion <a href="https://github.com/enykeev/mistral/pull/1">https://github.com/enykeev/mistral/pull/1</a></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">[2] Techical summary <a href="http://lists.openstack.org/pipermail/openstack-dev/2014-April/032461.html">http://lists.openstack.org/pipermail/openstack-dev/2014-April/032461.html</a></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">[3] Email discussion on TaskFlow lazy eninge <a href="http://lists.openstack.org/pipermail/openstack-dev/2014-March/031134.html">http://lists.openstack.org/pipermail/openstack-dev/2014-March/031134.html</a></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">[4] IRC discussion Mistral/Taskflow <a href="http://paste.openstack.org/show/75389/">http://paste.openstack.org/show/75389/</a></span></font></div>
<div style="margin: 0px; padding: 0px; "><font face="Arial,sans-serif"><span style="line-height: 16px; ">[5] Use cases <a href="https://github.com/dzimine/mistral-workflows/tree/add-usecases">https://github.com/dzimine/mistral-workflows/tree/add-usecases</a></span></font></div>
</div>
</div>
</blockquote>
</span></div>
<div>
<div>_______________________________________________</div>
<div>OpenStack-dev mailing list</div>
<div><a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a></div>
<div><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></div>
</div>
</div>
</span></blockquote>
<div><br>
</div>
</div>
</div>
</blockquote>
</span>
</body>
</html>