)]}'
{"specs/juno/taskflow-conditional-execution.rst":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"d588ec03dbc909f7611e2f07319cfda664cd3e77","unresolved":false,"context_lines":[{"line_number":27,"context_line":"or will not execute (since it is not known until runtime whether the atom"},{"line_number":28,"context_line":"actually will) so we need to address this to provide at least a *basic* level"},{"line_number":29,"context_line":"of support to accomplish a type of conditional execution."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Proposed change"},{"line_number":32,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1ae5cdf2_75c41540","line":30,"updated":"2014-06-10 22:53:44.000000000","message":"I think there is an implied statement here, which is that the graph is always executed in total or an error is thrown?","commit_id":"96e8ffcf7e49db5045bdeba3f6ab1ca592dda400"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"707367dc3028427bd758de7473128bc2d18169bd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"or will not execute (since it is not known until runtime whether the atom"},{"line_number":28,"context_line":"actually will) so we need to address this to provide at least a *basic* level"},{"line_number":29,"context_line":"of support to accomplish a type of conditional execution."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Proposed change"},{"line_number":32,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1ae5cdf2_15483186","line":30,"in_reply_to":"1ae5cdf2_75c41540","updated":"2014-06-10 23:11:58.000000000","message":"Agreed, let me make that more clear.","commit_id":"96e8ffcf7e49db5045bdeba3f6ab1ca592dda400"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"d588ec03dbc909f7611e2f07319cfda664cd3e77","unresolved":false,"context_lines":[{"line_number":87,"context_line":"conditional when a retry resets a conditional object (and causes it to be"},{"line_number":88,"context_line":"executed again), this will allow the most natural integration with the"},{"line_number":89,"context_line":"existing codebase (and is likely what users would expect to happen)."},{"line_number":90,"context_line":"  "},{"line_number":91,"context_line":"Alternatives"},{"line_number":92,"context_line":"------------"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1ae5cdf2_95bfe1a9","line":90,"updated":"2014-06-10 22:53:44.000000000","message":"So this seems fine but described really awkwardly :).\n\nI think reframing it as a direct description of what to do (not how to derive it) might help; keep the reasoning as a \u0027more detail\u0027 subsection or something.\n\n\nE.g. \n\nWe will add the ability for a workflow to be complete without all nodes of the DAG executing. A new input type will be added called \u0027condition\u0027. A condition is a simple boolean test against the input value using a condition value that is part of the input definition. If the condition value matches the input value, the node can run, otherwise it cannot. To grant flexible usage, the values are compared thusly::\n\n  condition value type  operator\n   Strings               \u003d\u003d\n   Boolean               truthy/falsy\n   Numbers               \u003d\u003d\n\nFor clarity, truthy/falsy tests are the \u0027if foo then:\u0027 logic in Python - 0, False, (), {}, [] and \u0027\u0027 are all falsy, and anything else is truthy.\n\nSecondly, since retrying may choose different paths through the graph, any node reachable solely via a conditional input will have its \u0027executed\u0027 state reset should a retry start from higher up in the graph than it. XXX This bit seems incorrect but I\u0027m hopefully just paraphrasing what you had above.\n\nThirdly, for convenience, when a node has finished running, any condition inputs that the next node(s) need that are missing are defaulted to False, similar to how a Python function with no return returns None.\n\nThese three things combined allow taskflow users to write simple conditions: e.g. to do \u0027if-else\u0027 create two child nodes with a common input \u0027run\u0027. Make one test for True, and the other False, then to trigger the if side output run\u003dTrue.","commit_id":"96e8ffcf7e49db5045bdeba3f6ab1ca592dda400"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"707367dc3028427bd758de7473128bc2d18169bd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"conditional when a retry resets a conditional object (and causes it to be"},{"line_number":88,"context_line":"executed again), this will allow the most natural integration with the"},{"line_number":89,"context_line":"existing codebase (and is likely what users would expect to happen)."},{"line_number":90,"context_line":"  "},{"line_number":91,"context_line":"Alternatives"},{"line_number":92,"context_line":"------------"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1ae5cdf2_f53bc5e8","line":90,"in_reply_to":"1ae5cdf2_95bfe1a9","updated":"2014-06-10 23:11:58.000000000","message":"Agreed 150%, I moved it into a separate section in a followup, to hopefully make it more clear. Will adjust with some of your other ideas, thanks much!","commit_id":"96e8ffcf7e49db5045bdeba3f6ab1ca592dda400"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Mistral and cinder (and others?) would like to be able to conditionally have"},{"line_number":21,"context_line":"a task (or subflow) execute based on some type of selection made by either a"},{"line_number":22,"context_line":"prior atom or by an error or by a function (for example). This kind of"},{"line_number":23,"context_line":"conditional execution right now is difficult currently in taskflow since the"},{"line_number":24,"context_line":"current model is more of a declaratively *fixed* pipeline that is verified"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_9a87eab4","line":21,"updated":"2014-06-12 00:02:05.000000000","message":"I suggest removing the parenthesis here and just saying \"... have a task or subflow ...\"","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Mistral and cinder (and others?) would like to be able to conditionally have"},{"line_number":21,"context_line":"a task (or subflow) execute based on some type of selection made by either a"},{"line_number":22,"context_line":"prior atom or by an error or by a function (for example). This kind of"},{"line_number":23,"context_line":"conditional execution right now is difficult currently in taskflow since the"},{"line_number":24,"context_line":"current model is more of a declaratively *fixed* pipeline that is verified"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_583e408c","line":21,"in_reply_to":"1ae5cdf2_9a87eab4","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Mistral and cinder (and others?) would like to be able to conditionally have"},{"line_number":21,"context_line":"a task (or subflow) execute based on some type of selection made by either a"},{"line_number":22,"context_line":"prior atom or by an error or by a function (for example). This kind of"},{"line_number":23,"context_line":"conditional execution right now is difficult currently in taskflow since the"},{"line_number":24,"context_line":"current model is more of a declaratively *fixed* pipeline that is verified"},{"line_number":25,"context_line":"before execution and only completes execution when all atoms have ``EXECUTED``,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_5ab9e277","line":22,"updated":"2014-06-12 00:02:05.000000000","message":"There\u0027s no need to repeat the word \"by\".\n\n\"...made by either a prior atom, an error, or a function\".","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Mistral and cinder (and others?) would like to be able to conditionally have"},{"line_number":21,"context_line":"a task (or subflow) execute based on some type of selection made by either a"},{"line_number":22,"context_line":"prior atom or by an error or by a function (for example). This kind of"},{"line_number":23,"context_line":"conditional execution right now is difficult currently in taskflow since the"},{"line_number":24,"context_line":"current model is more of a declaratively *fixed* pipeline that is verified"},{"line_number":25,"context_line":"before execution and only completes execution when all atoms have ``EXECUTED``,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_984b682a","line":22,"in_reply_to":"1ae5cdf2_5ab9e277","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":23,"context_line":"conditional execution right now is difficult currently in taskflow since the"},{"line_number":24,"context_line":"current model is more of a declaratively *fixed* pipeline that is verified"},{"line_number":25,"context_line":"before execution and only completes execution when all atoms have ``EXECUTED``,"},{"line_number":26,"context_line":"``FAILED`` or ``REVERTED`` (when retries are involved a atom or group of"},{"line_number":27,"context_line":"atoms can flip between ``FAILED``, ``REVERTING`` and ``RUNNING`` as"},{"line_number":28,"context_line":"the associated `retry`_ controller tries to resolve the execution"},{"line_number":29,"context_line":"state). Conditional execution alters this since now we can not at compile time"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_1af59a56","line":26,"updated":"2014-06-12 00:02:05.000000000","message":"s/a atom/an atom/","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"conditional execution right now is difficult currently in taskflow since the"},{"line_number":24,"context_line":"current model is more of a declaratively *fixed* pipeline that is verified"},{"line_number":25,"context_line":"before execution and only completes execution when all atoms have ``EXECUTED``,"},{"line_number":26,"context_line":"``FAILED`` or ``REVERTED`` (when retries are involved a atom or group of"},{"line_number":27,"context_line":"atoms can flip between ``FAILED``, ``REVERTING`` and ``RUNNING`` as"},{"line_number":28,"context_line":"the associated `retry`_ controller tries to resolve the execution"},{"line_number":29,"context_line":"state). Conditional execution alters this since now we can not at compile time"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_f8138cfe","line":26,"in_reply_to":"1ae5cdf2_1af59a56","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":26,"context_line":"``FAILED`` or ``REVERTED`` (when retries are involved a atom or group of"},{"line_number":27,"context_line":"atoms can flip between ``FAILED``, ``REVERTING`` and ``RUNNING`` as"},{"line_number":28,"context_line":"the associated `retry`_ controller tries to resolve the execution"},{"line_number":29,"context_line":"state). Conditional execution alters this since now we can not at compile time"},{"line_number":30,"context_line":"make a descision about whether a atom will or will not execute (since it is not"},{"line_number":31,"context_line":"known until runtime whether the atom actually will) and we will be required"},{"line_number":32,"context_line":"skip parts of the pipeline based on a conditional outcome (these pieces of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_9ad9aaf5","line":29,"updated":"2014-06-12 00:02:05.000000000","message":"s/can not/cannot/\n\nAlso, it will help to improve readability to pause around the preposition, so I suggest\n\n\"...now we cannot, at compile time, make a decision...\"","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"``FAILED`` or ``REVERTED`` (when retries are involved a atom or group of"},{"line_number":27,"context_line":"atoms can flip between ``FAILED``, ``REVERTING`` and ``RUNNING`` as"},{"line_number":28,"context_line":"the associated `retry`_ controller tries to resolve the execution"},{"line_number":29,"context_line":"state). Conditional execution alters this since now we can not at compile time"},{"line_number":30,"context_line":"make a descision about whether a atom will or will not execute (since it is not"},{"line_number":31,"context_line":"known until runtime whether the atom actually will) and we will be required"},{"line_number":32,"context_line":"skip parts of the pipeline based on a conditional outcome (these pieces of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_f8eaacd6","line":29,"in_reply_to":"1ae5cdf2_9ad9aaf5","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":27,"context_line":"atoms can flip between ``FAILED``, ``REVERTING`` and ``RUNNING`` as"},{"line_number":28,"context_line":"the associated `retry`_ controller tries to resolve the execution"},{"line_number":29,"context_line":"state). Conditional execution alters this since now we can not at compile time"},{"line_number":30,"context_line":"make a descision about whether a atom will or will not execute (since it is not"},{"line_number":31,"context_line":"known until runtime whether the atom actually will) and we will be required"},{"line_number":32,"context_line":"skip parts of the pipeline based on a conditional outcome (these pieces of"},{"line_number":33,"context_line":"the pipeline will not have ``EXECUTED`` or ``REVERTED`` but are in a new"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_7af93e7f","line":30,"updated":"2014-06-12 00:02:05.000000000","message":"s/a atom/an atom/","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"the associated `retry`_ controller tries to resolve the execution"},{"line_number":29,"context_line":"state). Conditional execution alters this since now we can not at compile time"},{"line_number":30,"context_line":"make a descision about whether a atom will or will not execute (since it is not"},{"line_number":31,"context_line":"known until runtime whether the atom actually will) and we will be required"},{"line_number":32,"context_line":"skip parts of the pipeline based on a conditional outcome (these pieces of"},{"line_number":33,"context_line":"the pipeline will not have ``EXECUTED`` or ``REVERTED`` but are in a new"},{"line_number":34,"context_line":"state ``IGNORED``)."}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_3a589689","line":31,"updated":"2014-06-12 00:02:05.000000000","message":"This dangling verb is ambiguous. \"... whether the atom will ???\". I suggest \"... whether the atom will execute\".","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"the associated `retry`_ controller tries to resolve the execution"},{"line_number":29,"context_line":"state). Conditional execution alters this since now we can not at compile time"},{"line_number":30,"context_line":"make a descision about whether a atom will or will not execute (since it is not"},{"line_number":31,"context_line":"known until runtime whether the atom actually will) and we will be required"},{"line_number":32,"context_line":"skip parts of the pipeline based on a conditional outcome (these pieces of"},{"line_number":33,"context_line":"the pipeline will not have ``EXECUTED`` or ``REVERTED`` but are in a new"},{"line_number":34,"context_line":"state ``IGNORED``)."}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_18891826","line":31,"in_reply_to":"1ae5cdf2_3a589689","updated":"2014-06-12 02:24:23.000000000","message":"Good point, never thought of it like that.","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":29,"context_line":"state). Conditional execution alters this since now we can not at compile time"},{"line_number":30,"context_line":"make a descision about whether a atom will or will not execute (since it is not"},{"line_number":31,"context_line":"known until runtime whether the atom actually will) and we will be required"},{"line_number":32,"context_line":"skip parts of the pipeline based on a conditional outcome (these pieces of"},{"line_number":33,"context_line":"the pipeline will not have ``EXECUTED`` or ``REVERTED`` but are in a new"},{"line_number":34,"context_line":"state ``IGNORED``)."},{"line_number":35,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_daf6d25c","line":32,"updated":"2014-06-12 00:02:05.000000000","message":"I suggest dropping these parenthesis and just making that the final sentence of the paragraph.","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"state). Conditional execution alters this since now we can not at compile time"},{"line_number":30,"context_line":"make a descision about whether a atom will or will not execute (since it is not"},{"line_number":31,"context_line":"known until runtime whether the atom actually will) and we will be required"},{"line_number":32,"context_line":"skip parts of the pipeline based on a conditional outcome (these pieces of"},{"line_number":33,"context_line":"the pipeline will not have ``EXECUTED`` or ``REVERTED`` but are in a new"},{"line_number":34,"context_line":"state ``IGNORED``)."},{"line_number":35,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_18903842","line":32,"in_reply_to":"1ae5cdf2_daf6d25c","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"To accomodate this feature we will try to adjust taskflow to provide at least"},{"line_number":37,"context_line":"a *basic* level of support to accomplish a *type* of conditional"},{"line_number":38,"context_line":"execution (the support can be expanded as the idea and implementation matures)."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Proposed change"},{"line_number":41,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_baa7464f","line":38,"updated":"2014-06-12 00:02:05.000000000","message":"Suggest removing parenthesis above and making that the final sentence.","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"To accomodate this feature we will try to adjust taskflow to provide at least"},{"line_number":37,"context_line":"a *basic* level of support to accomplish a *type* of conditional"},{"line_number":38,"context_line":"execution (the support can be expanded as the idea and implementation matures)."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Proposed change"},{"line_number":41,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_3895f432","line":38,"in_reply_to":"1ae5cdf2_baa7464f","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"In order to support conditionals we first need to determine what a conditional"},{"line_number":44,"context_line":"means in a workflow, what it looks like and how it would be incorporated into"},{"line_number":45,"context_line":"a users workflow."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The following is an example of how this could look when a user decides to add a"},{"line_number":48,"context_line":"conditional choice into a workflow (this workflow they will hand-off to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_5a7002dc","line":45,"updated":"2014-06-12 00:02:05.000000000","message":"s/users/user\u0027s/","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"In order to support conditionals we first need to determine what a conditional"},{"line_number":44,"context_line":"means in a workflow, what it looks like and how it would be incorporated into"},{"line_number":45,"context_line":"a users workflow."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The following is an example of how this could look when a user decides to add a"},{"line_number":48,"context_line":"conditional choice into a workflow (this workflow they will hand-off to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_d8a9707d","line":45,"in_reply_to":"1ae5cdf2_5a7002dc","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":47,"context_line":"The following is an example of how this could look when a user decides to add a"},{"line_number":48,"context_line":"conditional choice into a workflow (this workflow they will hand-off to"},{"line_number":49,"context_line":"taskflow for execution using one of the supported `engines`_ types, parallel,"},{"line_number":50,"context_line":"threaded or other):"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"::"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_da525234","line":50,"updated":"2014-06-12 00:02:05.000000000","message":"Suggest removing parenthesis above and making that a sentence (check the needle, I think this record is broken.. ;)","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"The following is an example of how this could look when a user decides to add a"},{"line_number":48,"context_line":"conditional choice into a workflow (this workflow they will hand-off to"},{"line_number":49,"context_line":"taskflow for execution using one of the supported `engines`_ types, parallel,"},{"line_number":50,"context_line":"threaded or other):"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"::"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_f8a62caa","line":50,"in_reply_to":"1ae5cdf2_da525234","updated":"2014-06-12 02:24:23.000000000","message":"I will buy u a new needle (why are u still using a record player, jeez).","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The next thing a conditional then needs a mechanism to influence"},{"line_number":101,"context_line":"the *outcome* which should be executed to one of the X subgraphs at runtime."},{"line_number":102,"context_line":"To accomplish this the gate needs the ability firstly to know what"},{"line_number":103,"context_line":"those potential outcomes are to decide what it can choose from."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"A solution that comes to mind that work (but there could be other solutions"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_7eb12900","line":102,"updated":"2014-06-12 00:02:05.000000000","message":"Since there is no secondly, you can drop the word firstly.","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The next thing a conditional then needs a mechanism to influence"},{"line_number":101,"context_line":"the *outcome* which should be executed to one of the X subgraphs at runtime."},{"line_number":102,"context_line":"To accomplish this the gate needs the ability firstly to know what"},{"line_number":103,"context_line":"those potential outcomes are to decide what it can choose from."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"A solution that comes to mind that work (but there could be other solutions"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_f8eb8ca1","line":102,"in_reply_to":"1ae5cdf2_7eb12900","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":100,"context_line":"The next thing a conditional then needs a mechanism to influence"},{"line_number":101,"context_line":"the *outcome* which should be executed to one of the X subgraphs at runtime."},{"line_number":102,"context_line":"To accomplish this the gate needs the ability firstly to know what"},{"line_number":103,"context_line":"those potential outcomes are to decide what it can choose from."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"A solution that comes to mind that work (but there could be other solutions"},{"line_number":106,"context_line":"that also work):"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_fec45961","line":103,"updated":"2014-06-12 00:02:05.000000000","message":"Dangling preposition, also which is more appropriate: \"... to decide from which it can choose.\"","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":100,"context_line":"The next thing a conditional then needs a mechanism to influence"},{"line_number":101,"context_line":"the *outcome* which should be executed to one of the X subgraphs at runtime."},{"line_number":102,"context_line":"To accomplish this the gate needs the ability firstly to know what"},{"line_number":103,"context_line":"those potential outcomes are to decide what it can choose from."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"A solution that comes to mind that work (but there could be other solutions"},{"line_number":106,"context_line":"that also work):"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_182cb801","line":103,"in_reply_to":"1ae5cdf2_fec45961","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":102,"context_line":"To accomplish this the gate needs the ability firstly to know what"},{"line_number":103,"context_line":"those potential outcomes are to decide what it can choose from."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"A solution that comes to mind that work (but there could be other solutions"},{"line_number":106,"context_line":"that also work):"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"When a conditional is encountered while executing (assume there is some way"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_7ea8498c","line":105,"updated":"2014-06-12 00:02:05.000000000","message":"s/that work/that works/","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":102,"context_line":"To accomplish this the gate needs the ability firstly to know what"},{"line_number":103,"context_line":"those potential outcomes are to decide what it can choose from."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"A solution that comes to mind that work (but there could be other solutions"},{"line_number":106,"context_line":"that also work):"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"When a conditional is encountered while executing (assume there is some way"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_3831745a","line":105,"in_reply_to":"1ae5cdf2_7ea8498c","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":112,"context_line":"*not* mean that a subgraph executing that is not connected to this conditional"},{"line_number":113,"context_line":"will have to be stopped (its execution is not dependent on this outcome"},{"line_number":114,"context_line":"decision). So assuming we can freeze dependent execution (which we currently"},{"line_number":115,"context_line":"can do) we now need to provide the gate a way to make a decision (usually"},{"line_number":116,"context_line":"the decision will be based on some prior execution or other external"},{"line_number":117,"context_line":"state). We have a mechanism for doing this already so we will continue using"},{"line_number":118,"context_line":"the existing `inputs and outputs`_ mechanism to communicate any state (local"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_be7c9121","line":115,"updated":"2014-06-12 00:02:05.000000000","message":"I would change this parenthetical to a semi-colon, since the text in the parenthsis is directly related to the previous text and the parenthetical bit balances the primary sentence out by filling in details left unanswered, which is a common case for semi-colon usage.","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":112,"context_line":"*not* mean that a subgraph executing that is not connected to this conditional"},{"line_number":113,"context_line":"will have to be stopped (its execution is not dependent on this outcome"},{"line_number":114,"context_line":"decision). So assuming we can freeze dependent execution (which we currently"},{"line_number":115,"context_line":"can do) we now need to provide the gate a way to make a decision (usually"},{"line_number":116,"context_line":"the decision will be based on some prior execution or other external"},{"line_number":117,"context_line":"state). We have a mechanism for doing this already so we will continue using"},{"line_number":118,"context_line":"the existing `inputs and outputs`_ mechanism to communicate any state (local"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_5832c05e","line":115,"in_reply_to":"1ae5cdf2_be7c9121","updated":"2014-06-12 02:24:23.000000000","message":"U da bomb :)","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":119,"context_line":"or otherwise) to the gate. Now the gate just needs to be able to pick which"},{"line_number":120,"context_line":"outcome should be executed so that the runtime can continue down"},{"line_number":121,"context_line":"that execution path. The concept of a *selector* will be introduced here to"},{"line_number":122,"context_line":"accomplish this. A selector would contain/have two key attributes, one"},{"line_number":123,"context_line":"being a predicate function/object that would take an input and make a boolean"},{"line_number":124,"context_line":"decision (to be activated or not to be) and the second attribute would be the"},{"line_number":125,"context_line":"associated flow or task to execute when the predicate returns true. A gate"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_de795d30","line":122,"updated":"2014-06-12 00:02:05.000000000","message":"Let\u0027s just say \"have\", I don\u0027t think \"contain\" adds anything.","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":119,"context_line":"or otherwise) to the gate. Now the gate just needs to be able to pick which"},{"line_number":120,"context_line":"outcome should be executed so that the runtime can continue down"},{"line_number":121,"context_line":"that execution path. The concept of a *selector* will be introduced here to"},{"line_number":122,"context_line":"accomplish this. A selector would contain/have two key attributes, one"},{"line_number":123,"context_line":"being a predicate function/object that would take an input and make a boolean"},{"line_number":124,"context_line":"decision (to be activated or not to be) and the second attribute would be the"},{"line_number":125,"context_line":"associated flow or task to execute when the predicate returns true. A gate"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_1813d8b8","line":122,"in_reply_to":"1ae5cdf2_de795d30","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":120,"context_line":"outcome should be executed so that the runtime can continue down"},{"line_number":121,"context_line":"that execution path. The concept of a *selector* will be introduced here to"},{"line_number":122,"context_line":"accomplish this. A selector would contain/have two key attributes, one"},{"line_number":123,"context_line":"being a predicate function/object that would take an input and make a boolean"},{"line_number":124,"context_line":"decision (to be activated or not to be) and the second attribute would be the"},{"line_number":125,"context_line":"associated flow or task to execute when the predicate returns true. A gate"},{"line_number":126,"context_line":"would then iterate over its selectors and the first selector to have a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_5ebc6dbb","line":123,"updated":"2014-06-12 00:02:05.000000000","message":"a function is an object, and really what you want is a \"callable object\"\n\nhttps://docs.python.org/2/library/functions.html#callable\n\nAlso I would say \"and return a boolean decision\" since that is more to the point of how it will actually work.","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":120,"context_line":"outcome should be executed so that the runtime can continue down"},{"line_number":121,"context_line":"that execution path. The concept of a *selector* will be introduced here to"},{"line_number":122,"context_line":"accomplish this. A selector would contain/have two key attributes, one"},{"line_number":123,"context_line":"being a predicate function/object that would take an input and make a boolean"},{"line_number":124,"context_line":"decision (to be activated or not to be) and the second attribute would be the"},{"line_number":125,"context_line":"associated flow or task to execute when the predicate returns true. A gate"},{"line_number":126,"context_line":"would then iterate over its selectors and the first selector to have a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_780e9c8d","line":123,"in_reply_to":"1ae5cdf2_5ebc6dbb","updated":"2014-06-12 02:24:23.000000000","message":"Agreed, good point. Adjusting, Thx!","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"200c8cc91fbd8f460970a7e29c8f80dd33889cfc","unresolved":false,"context_lines":[{"line_number":126,"context_line":"would then iterate over its selectors and the first selector to have a"},{"line_number":127,"context_line":"predicate satisified (aka the predicate returns a `truthy`_ value) would then"},{"line_number":128,"context_line":"have its associated flow and tasks (a subgraph) be applicable for"},{"line_number":129,"context_line":"scheduling. The selectors which were not chosen would have all there flows"},{"line_number":130,"context_line":"and tasks (there subgraphs) put into the ``IGNORE`` state (this would cause"},{"line_number":131,"context_line":"those nodes not to be executed in current \u0026 future scheduling decisions)."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_5ee38dd8","line":129,"updated":"2014-06-12 00:02:05.000000000","message":"s/there/their/","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"175115fa7da9fe0dadc054bff55e3d1225dca53f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"would then iterate over its selectors and the first selector to have a"},{"line_number":127,"context_line":"predicate satisified (aka the predicate returns a `truthy`_ value) would then"},{"line_number":128,"context_line":"have its associated flow and tasks (a subgraph) be applicable for"},{"line_number":129,"context_line":"scheduling. The selectors which were not chosen would have all there flows"},{"line_number":130,"context_line":"and tasks (there subgraphs) put into the ``IGNORE`` state (this would cause"},{"line_number":131,"context_line":"those nodes not to be executed in current \u0026 future scheduling decisions)."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ae5cdf2_f88c6cd9","line":129,"in_reply_to":"1ae5cdf2_5ee38dd8","updated":"2014-06-12 02:24:23.000000000","message":"Done","commit_id":"36df7e42cef515d471e9e81e187d589f5706803a"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"fad5cc5c06ca726d7df6185b1e08df8e9e527ff1","unresolved":false,"context_lines":[{"line_number":98,"context_line":"outcome can provide *equivalent* outputs that satisify downstream dependent"},{"line_number":99,"context_line":"inputs that some other atom requires (we could set inputs required"},{"line_number":100,"context_line":"by successors of the outcome to defaults when it is not provided, for now"},{"line_number":101,"context_line":"though we will continue being strict)."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The next thing a conditional then needs a mechanism to influence"},{"line_number":104,"context_line":"the *outcome* which should be executed to one of the X subgraphs at runtime."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ae5cdf2_2172cab0","line":101,"updated":"2014-06-15 20:37:12.000000000","message":"So I don\u0027t think the IGNORE x-1 subgraphs thing is needed at all. I think it arbitrarily limits expressiveness (e.g. to run either subgraphs A,B or B,C I\u0027ll need to express it as\n\nsubgraph A\u0027 which has A and B under it or subgraph C\u0027 which has B and C under it. It doesn\u0027t seem to add anything to implementation ease etc, so - I think by limiting the scope, you\u0027re making the implementation larger and the system less expressive.\n\nSo instead of doing that, how about just adding the gate concept, which is all that is needed - the presence of a gate will disable a subgraph by default unless the gate can be passed, and then users can do whatever they want with them.","commit_id":"d80863142c612049117d671db333cbde9f9e5d69"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7a7bb7207c2a514ddd195bab81a41b3e14c5a8b9","unresolved":false,"context_lines":[{"line_number":98,"context_line":"outcome can provide *equivalent* outputs that satisify downstream dependent"},{"line_number":99,"context_line":"inputs that some other atom requires (we could set inputs required"},{"line_number":100,"context_line":"by successors of the outcome to defaults when it is not provided, for now"},{"line_number":101,"context_line":"though we will continue being strict)."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The next thing a conditional then needs a mechanism to influence"},{"line_number":104,"context_line":"the *outcome* which should be executed to one of the X subgraphs at runtime."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ae5cdf2_1e3d002d","line":101,"in_reply_to":"1ae5cdf2_2172cab0","updated":"2014-06-16 21:13:28.000000000","message":"Just a little explanation first, the reason to mark nodes as IGNORED is partially due to the following:\n\n* Informational usage (u can retrieve the state of a node post-execution), can be useful for post-execution introspection to know that it was IGNORED (vs just PENDING).  So I think just leaving it as PENDING will be ok, but less informational for users (which probably is fine to start with).\n\n* Reverting usage; currently the way to revert is to check the state + intention of an atom (ones that have EXECUTED are eligible for reversion/retrying). The above informational usage is also useful for internal usage, but leaving it in prior PENDING state is ok to, those don\u0027t get reverted.\n\n* Notification usage, connected into the above informational usage is the ability to emit notifications that nodes are being ignored (we also emit notifications on other state changes, aka nodes move from the PENDING state to EXECUTING).\n\nAnyways I can leave it be (aka in the PENDING state), just less information is exposed to users in all the above cases. Maybe the \u0027gate\u0027 object can have a constructor/property option that the engine can introspect to set IGNORED states and by default we can leave it off/on (?) and see what users like. I\u0027m not entirely sure what people will like (although more information is nice imho vs less info although I do see/agree with your point about complexity).\n\nThe following doc-link may help understand the above:\n\nhttp://docs.openstack.org/developer/taskflow/states.html#task\n\nThoughts?","commit_id":"d80863142c612049117d671db333cbde9f9e5d69"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"fad5cc5c06ca726d7df6185b1e08df8e9e527ff1","unresolved":false,"context_lines":[{"line_number":111,"context_line":"When a conditional is encountered while executing (assume there is some way"},{"line_number":112,"context_line":"to know that we have *hit* a conditional) we need to first freeze execution"},{"line_number":113,"context_line":"of any successors (nothing must execute in any outcomes subgraph ahead"},{"line_number":114,"context_line":"of time, this would violate the conditional constraint). Note that this does"},{"line_number":115,"context_line":"*not* mean that a subgraph executing that is not connected to this conditional"},{"line_number":116,"context_line":"will have to be stopped (its execution is not dependent on this outcome"},{"line_number":117,"context_line":"decision). So assuming we can freeze dependent execution (which we currently"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ae5cdf2_4177d69f","line":114,"updated":"2014-06-15 20:37:12.000000000","message":"For instance - this is a complexity cause by \u0027limiting the scope\u0027 - you\u0027ve made the problem bigger, not smaller.","commit_id":"d80863142c612049117d671db333cbde9f9e5d69"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7a7bb7207c2a514ddd195bab81a41b3e14c5a8b9","unresolved":false,"context_lines":[{"line_number":111,"context_line":"When a conditional is encountered while executing (assume there is some way"},{"line_number":112,"context_line":"to know that we have *hit* a conditional) we need to first freeze execution"},{"line_number":113,"context_line":"of any successors (nothing must execute in any outcomes subgraph ahead"},{"line_number":114,"context_line":"of time, this would violate the conditional constraint). Note that this does"},{"line_number":115,"context_line":"*not* mean that a subgraph executing that is not connected to this conditional"},{"line_number":116,"context_line":"will have to be stopped (its execution is not dependent on this outcome"},{"line_number":117,"context_line":"decision). So assuming we can freeze dependent execution (which we currently"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ae5cdf2_9c8e78cf","line":114,"in_reply_to":"1ae5cdf2_4177d69f","updated":"2014-06-16 21:13:28.000000000","message":"Understood, a gate though must stop successor execution until we have a decision made, by definition of being a gate. This of course is not true if/when we do speculative execution (or branch prediction), but let\u0027s avoid that for now (if not forever).\n\nLet\u0027s see if we can work out the comment from above and see if we can reduce this (which I\u0027m fine doing to start, to see how it goes and what people like and such, simpler is definitely better when we aren\u0027t yet sure).","commit_id":"d80863142c612049117d671db333cbde9f9e5d69"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"b310a2c5b145331605adac65f77cd00890243a27","unresolved":false,"context_lines":[{"line_number":2,"context_line":" Conditional execution"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Include the URL of your launchpad blueprint:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"https://blueprints.launchpad.net/taskflow/+spec/conditional-flow-choices"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"baada198_0161bba8","line":5,"updated":"2014-07-03 19:57:58.000000000","message":"Shouldn\u0027t this line be removed? I don\u0027t see it in other specs https://github.com/openstack/oslo-specs/tree/master/specs","commit_id":"29775c62ee8b851bb2f649b073bf8c7ee60459f9"}]}
