Currently ODIM does not support handling of tasks returned by the plugin layer. Due to this plugins cannot return task URLs for operations that take a long time to complete. An example is reset needed after volume creation, the current behavior is for ODIM to wait for the reset to complete for a long time before being able to respond to north bound clients with the final response. This time delay can result in the RPC/HTTPS time outs. This also means that the client cannot receive/query task status before the successful/unsuccessful completion of the long standing task.

Here we propose that ODIM is modified to be able 

  1.  receive HTTP 201 (accepted replies) from the plugin along with task URI.
  2.  create a task that maps to the task passed on by the plugin 
  3. send this new (ODIM) task to the client on the north side.
  4.  Allow the client to query the status for such tasks  
  5.  Alternately allow the client to subscribe for such task updates without having to poll
  6. Update plugin implementation guide to handle BMCs or south end entities that generate task themselves(provide links to redfish task schema)
  7. create a task in ODIM even if the plugin does not do so.  

Note #3 and #4 above is already available for task created by ODIM itself as per the redfish Task schema. #3  above will allow the client to query and find the current status of the task.  #7 is needed as it will avoid timeouts in client calls. The list task status supported by redfish are

"Cancelled": "Task has been cancelled by an operator or internal process.",
"Cancelling": "Task is in the process of being cancelled.",
"Completed": "Task has completed.",
"Exception": "Task has stopped due to an exception condition.",
"Interrupted": "Task has been interrupted.",
"Killed": "Task was terminated.",
"New": "A new task.",
"Pending": "Task is pending and has not started.",
"Running": "Task is running normally.",
"Service": "Task is running as a service.",
"Starting": "Task is starting.",
"Stopping": "Task is in the process of stopping.",
"Suspended": "Task has been suspended."