Jump to: navigation, search

Difference between revisions of "TaskFlow/Inputs and Outputs"

(Storage)
(Replaced content with "'''Revised on:''' {{REVISIONMONTH1}}/{{REVISIONDAY}}/{{REVISIONYEAR}} by {{REVISIONUSER}} The page was moved to developers documentation: http://docs.openstack.org/develo...")
 
(27 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
'''Revised on:''' {{REVISIONMONTH1}}/{{REVISIONDAY}}/{{REVISIONYEAR}} by {{REVISIONUSER}}
 
'''Revised on:''' {{REVISIONMONTH1}}/{{REVISIONDAY}}/{{REVISIONYEAR}} by {{REVISIONUSER}}
  
== Overview ==
+
The page was moved to developers documentation: http://docs.openstack.org/developer/taskflow/inputs_and_outputs.html
 
 
In taskflow there are multiple ways to design how your tasks/flows and engines get inputs  and produce outputs. This document will help you understand what those ways are and how to use those ways to accomplish your desired taskflow usage pattern as well as include examples that show common ways of providing input and getting output.
 
 
 
=== Task & Flow Inputs and Outputs ===
 
 
 
'''See:''' [[TaskFlow/Task_Arguments_and_Results|Task & Flow Arguments and Results]]
 
 
 
=== Engine Inputs and Outputs ===
 
 
 
==== Storage ====
 
 
 
The storage layer is how an engine persists flow and task details.
 
 
 
For more in-depth design details: [[TaskFlow/Persistence|persistence]].
 
 
 
To initially prepopulate your engine with arguments (so that dependent tasks can immediately start running) you can directly interact with the engine <code>load</code> or <code>run</code> to provide these needed inputs.
 
 
 
'''The problem:'''
 
         
 
    >>> from taskflow import task
 
    >>> from taskflow import engines
 
    >>> from taskflow.patterns import linear_flow as lf
 
    >>>
 
  >>> class CatTalk(task.Task):
 
    ...  def execute(self, meow):
 
    ...    print meow
 
    ...    return "cat"
 
    ...
 
    >>> class DogTalk(task.Task):
 
    ...  def execute(self, woof):
 
    ...    print woof
 
    ...    return "dog"
 
    ...
 
    >>> flo = lf.Flow("cat-dog")
 
    >>> flo.add(CatTalk(), DogTalk(provides="dog"))
 
    >>> engines.run(flo)
 
    Traceback (most recent call last):
 
      File "<stdin>", line 1, in <module>
 
      File "/usr/lib/python2.6/site-packages/taskflow/engines/helpers.py", line 110, in run
 
        engine.run()
 
      File "/usr/lib/python2.6/site-packages/taskflow/utils/lock_utils.py", line 51, in wrapper
 
        return f(*args, **kwargs)
 
      File "/usr/lib/python2.6/site-packages/taskflow/engines/action_engine/engine.py", line 104, in run
 
        raise exc.MissingDependencies(self._flow, sorted(missing))
 
    taskflow.exceptions.MissingDependencies: taskflow.patterns.linear_flow.Flow: cat-dog;
 
    2 requires ['meow', 'woof'] but no other entity produces said requirements
 
 
 
'''To solve this you would want to do the following to make your flow run smoothly:'''
 
 
 
    >>> from taskflow import task
 
    >>> from taskflow import engines
 
    >>> from taskflow.patterns import linear_flow as lf
 
    >>>
 
    >>> class CatTalk(task.Task):
 
    ...  def execute(self, meow):
 
    ...    print meow
 
    ...    return "cat"
 
    ...
 
    >>> class DogTalk(task.Task):
 
    ...  def execute(self, woof):
 
    ...    print woof
 
    ...    return "dog"
 
    ...
 
    >>> flo = lf.Flow("cat-dog")
 
    >>> flo.add(CatTalk(), DogTalk(provides="dog"))
 
    >>> engines.run(flo, store={'meow': 'meow', 'woof': 'woof'})
 
    meow
 
    woof
 
    {'meow': 'meow', 'woof': 'woof', 'dog': 'dog'}
 
 
 
As you can see the result of the <code>run</code> method is the results of all tasks that have ran.
 
 
 
'''This same data can be fetched in a more precise manner by doing the following:'''
 
 
 
    >>> eng = engines.load(flo, store={'meow': 'meow', 'woof': 'woof'})
 
    >>> eng.run()
 
    meow
 
    woof
 
    >>> print(eng.storage.fetch_all())
 
    {'meow': 'meow', 'woof': 'woof', 'dog': 'dog'}
 
    >>> print(eng.storage.fetch("dog"))
 
    dog
 
 
 
==== Notifications ====
 

Latest revision as of 10:10, 28 March 2014

Revised on: 3/28/2014 by Akarpinska

The page was moved to developers documentation: http://docs.openstack.org/developer/taskflow/inputs_and_outputs.html