<div dir="ltr"><div>Hi Joshua,</div><div><br></div>Yes, sure will do that once I get some window out of my work.<div><br><div>One last query(hopefully :) ) , can the factory method be an instance method of a class?</div><div><br></div><div>I tried giving it as "FlowFactory().flow_factory", where FlowFactory is my class name. It failed with below error:</div><div>ValueError: Flow factory <bound method FlowFactory.flow_factory of <__main__.FlowFactory instance at 0x2b43b48>> is not reimportable by name __builtin__.instance.flow_factory<br></div></div><div><br></div><div>Thanks again</div><div>-Kanthi</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 28, 2016 at 12:29 AM, Joshua Harlow <span dir="ltr"><<a href="mailto:harlowja@fastmail.com" target="_blank">harlowja@fastmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">pn kk wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
Thanks for the responses. Putting it in a small example<br>
<br>
def flow_factory(tmp):<br>
     return lf.Flow('resume from backend example').add(<br>
         TestTask(name='first', test=tmp),<br>
         InterruptTask(name='boom'),<br>
         TestTask(name='second', test="second task"))<br>
<br>
<br>
class TestTask(task.Task):<br>
     def __init__(self, name, provides=None, test, **kwargs):<br>
         self.test=test<br>
         super(TestTask, self).__init__(name, provides, **kwargs)<br>
     def execute(self, *args, **kwargs):<br>
         print('executing %s' % self)<br>
         return 'ok'<br>
<br>
class InterruptTask(task.Task):<br>
     def execute(self, *args, **kwargs):<br>
         # DO NOT TRY THIS AT HOME<br>
         engine.suspend()<br>
<br>
I was searching for a way in which I can reload the flow after crash<br>
without passing the parameter "tmp" shown above<br>
Looks like "load_from_factory" gives this provision.<br>
</blockquote>
<br></span>
Thanks for the example, ya, this is one such way to do this that u have found, there are a few other ways, but that is the main one that people should be using.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
engine = taskflow.engines.load_from_factory(flow_factory=flow_factory,<br>
factory_kwargs={"tmp":"test_data"}, book=book, backend=backend)<br>
engine.run()<br>
<br>
Now it suspends after running interrupt task, I can now reload the flow<br>
from the saved factory method without passing parameter again.<br>
for flow_detail_2 in book:<br>
     engine2 = taskflow.engines.load_from_detail(flow_detail_2,<br>
backend=backend)<br>
<br>
engine2.run()<br>
<br>
Let me know if this is ok or is there a better approach to achieve this?<br>
</blockquote>
<br></span>
There are a few other ways, but this one should be the currently recommended one.<br>
<br>
An idea, do u want to maybe update (submit a review to update) the docs, if u didn't find this very easy to figure out so that others can more easily figure it out. I'm sure that would be appreciated by all.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<br>
-Thanks<br>
<br>
<br>
On Wed, Jan 27, 2016 at 12:03 AM, Joshua Harlow <<a href="mailto:harlowja@fastmail.com" target="_blank">harlowja@fastmail.com</a><br></span><div><div class="h5">
<mailto:<a href="mailto:harlowja@fastmail.com" target="_blank">harlowja@fastmail.com</a>>> wrote:<br>
<br>
    Hi there,<br>
<br>
    Michał is correct, it should be saved.<br>
<br>
    Do u have a small example of what u are trying to do because that<br>
    will help determine if what u are doing will be saved or whether it<br>
    will not be.<br>
<br>
    Or even possibly explaining what is being done would be fine to<br>
    (more data/info for me to reason about what should be stored in your<br>
    case).<br>
<br>
    Thanks,<br>
<br>
    Josh<br>
<br>
<br>
    Michał Dulko wrote:<br>
<br>
        On 01/26/2016 10:23 AM, pn kk wrote:<br>
<br>
            Hi,<br>
<br>
            I use taskflow for job management and now trying to persist<br>
            the state<br>
            of flows/tasks in mysql to recover incase of process crashes.<br>
<br>
            I could see the state and the task results stored in the<br>
            database.<br>
<br>
            Now I am looking for some way to store the input parameters<br>
            of the tasks.<br>
<br>
            Please share your inputs to achieve this.<br>
<br>
            -Thanks<br>
<br>
        I've played with that some time ago and if I recall correctly input<br>
        parameters should be available in the flow's storage, which<br>
        means these<br>
        are also saved to the DB. Take a look on resume_workflows method<br>
        on my<br>
        old PoC [1] (hopefully TaskFlow haven't changed much since then).<br>
<br>
        [1]<br>
        <a href="https://review.openstack.org/#/c/152200/4/cinder/scheduler/manager.py" rel="noreferrer" target="_blank">https://review.openstack.org/#/c/152200/4/cinder/scheduler/manager.py</a><br>
<br>
        __________________________________________________________________________<br>
        OpenStack Development Mailing List (not for usage questions)<br>
        Unsubscribe:<br>
        <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br></div></div>
        <<a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a>><span class=""><br>
        <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
<br>
    __________________________________________________________________________<br>
    OpenStack Development Mailing List (not for usage questions)<br>
    Unsubscribe:<br>
    <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br></span>
    <<a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a>><span class=""><br>
    <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
<br>
__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</span></blockquote><div class="HOEnZb"><div class="h5">
<br>
__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</div></div></blockquote></div><br></div>