Driver validation should not be synchronous and blocking
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Ironic |
Opinion
|
Wishlist
|
Unassigned |
Bug Description
The validation of node.driver_info and each driver interface is currently a synchronous request -- the client must wait for the call through the API to the conductor, to each driver interface, some of which block while waiting for the physical node to respond to network requests.
This API call's synchronicity was initially reasonable because it only checked the reasonableness of the node.driver_info properties. Now, it is unreasonable, because validate() establishes connectivity to the node. This is the case for both IPMITool and SSH Power power drivers, and will reasonably be the case for the iLO driver as well. It may also be the case for management and console interface drivers, too (and if not yet, it would be soon).
==============
Proposed solution
* validate and store results as (time, status) of each node's driver's interfaces in the DB (separate "node_driver_
* Clear last-time when ever driver_info is changed (check each driver's list of options to see if that driver was affected. Depends on Ruby's patch)
* Periodic task which calls driver.validate for nodes with no last-check-time (task sets check-status to "in progress", locks the node, etc...)
* Expose these results in the REST API, as part of the complete node result
* make the "node-validate" update the db record for that node's node_driver_status entries to a "check requested" state (but only do this if no checks are in progress, node is not locked, etc)
Changed in ironic: | |
status: | New → Triaged |
importance: | Undecided → High |
Changed in ironic: | |
assignee: | nobody → Imre Farkas (ifarkas) |
Changed in ironic: | |
status: | Triaged → In Progress |
Changed in ironic: | |
importance: | Medium → Wishlist |
Fix proposed to branch: master /review. openstack. org/97789
Review: https:/