Hi All,
After looking at the current design and doing some trial and error I
thought of implementing the cancellation as follows.
- Cancellation of an experiment requested by a gateway requires
cancellation request to go through several layers. (Orchestrator > GFac >
GFac Provider)
- Each layer is responsible for handling cancellation relevant for that
layer (Orchestration cancels experiment, GFac cancels Task, GFac Provider
cancels Job)
- What I thought is, each layer will listen to cancellation request made
to the layer above and perform its cancellation actions accordingly. (GFac
will see the experiment is having the status "canceling" for an experiment
id and it will perform cancellation of the tasks relevant for that
experiment)
- Effectively the Orchestrator will be
- updating the status of the experiment in registry with the status
"canceling"
- publish a message which will be caught by GFac instance which
handles its Tasks.
- GFac will perform the same and the correct GFac Provider
instance will catch the message and perform the actual job cancellation.
- Once the job cancellation is done the statuses at each layer will be
updated (to "canceled") in similar fashion.
- We allow the API call of cancellation to be asynchronous
- I'm hoping to use the MonitorPublisher implemented by Lahiru to
publish the messages.
wdyt?
Thanks,
Saminda