Refreshing the memory and waiting for new comments. If no new comments, I'll
submit a patch with this proposal until the end of this week.
Best regards, Paulo.
On Jun 09 01:07PM, Paulo Ricardo Paz Vital wrote:
On Jun 08 03:38PM, Aline Manera wrote:
> Hi Paulo,
>
> On 06/06/2016 11:21 AM, Paulo Ricardo Paz Vital wrote:
> > This is an RFC for "Make AsyncTask stoppable" in Wok (and any other
plugin). The
> > main idea is give to user a way to stop a Task that is still running, cleaning
> > all references and processes and setting the Task status to
"killed".
> >
> > To do this, the Task API need to be modified, by implementing the DELETE
method
> > in Task Resource. Said that, the API will look like:
> >
> > ### Resource: Task
> >
> > **URI:** /tasks/*:id*
> >
> > A task represents an asynchronous operation that is being performed by the
> > server.
> >
> > **Methods:**
> >
> > * **GET**: Retrieve the full description of the Task
> > * id: The Task ID is used to identify this Task in the API.
> > * status: The current status of the Task
> > * running: The task is running
> > * finished: The task has finished successfully
> > * failed: The task failed
> > + * killed: The task was killed by user
> > * message: Human-readable details about the Task status
> > * target_uri: Resource URI related to the Task
>
> > +* **DELETE**: Delete the Task
>
> It is good to mention that this action will put the Task in the 'killed'
> status.
>
Ok.
> > * **POST**: *See Task Actions*
> >
> > **Actions (POST):**
> >
> > *No actions defined*
> >
> > Since an AsyncTask is basic a thread running in the system and this thread can
> > execute a pure Python method or a background command (by using run_command()
> > from wok.utils), the developer must pass as argument to the add_task() a
method
> > to be executed by the DELETE operation, called here as 'kill_cb'. With
this
> > idea, the add_task() method and also the AsyncTask constructor will be like:
> >
> > def add_task(target_uri, fn, objstore, kill_cb=None, opaque=None):
>
> I am not sure it is a good idea to change the parameters order.
> Some plugins may have using the opaque parameter as the third value so it
> will cause issues.
> So unless, you check all references to make sure it will not be a problem,
> I'd recommend to move the kill_cb as the last parameter.
>
I already was expecting this, so this is not a problem to me to check and change
the sequence of parameters. Will not do this only if the modifications are too
many to do ;-)
> > class AsyncTask(object):
> > def __init__(self, id, target_uri, fn, objstore, kill_cb=None,
opaque=None):
>
> Same I commented above.
>
> > If none kill_cb is passed, the task will not be able to stopped and an error
(or
> > warning) message will be raised to user if DELETE operation is executed.
> > Otherwise, the kill_cb method will be executed by kill() method (responsible
to
> > execute the DELETE operation) of AsyncTask class and its status set to
'killed'.
>
> Go for it! =)
>
> Don't forget to add tests to test/exemplify how it will really work.
>
For sure.
> > If you have any comments or suggestions, please feel free to reply to ML.
> >
> > Thanks and bestr regards,
> > --
> > Paulo Ricardo Paz Vital
> > Linux Technology Center, IBM Systems
> >
http://www.ibm.com/linux/ltc/
> >
> > _______________________________________________