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

Aline Manera alinefm at linux.vnet.ibm.com
Wed Jun 8 18:38:33 UTC 2016


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.

> * **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.

> 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.

> 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/
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>




More information about the Kimchi-devel mailing list