[Kimchi-devel] [Wok] [RFC] Issue #122: Make AsyncTask stoppable.

Paulo Ricardo Paz Vital pvital at linux.vnet.ibm.com
Mon Aug 15 12:48:08 UTC 2016


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/
> > >
> > > _______________________________________________

-- 
Paulo Ricardo Paz Vital
Linux Technology Center, IBM Systems
http://www.ibm.com/linux/ltc/




More information about the Kimchi-devel mailing list