Ironic's REST API blocks while waiting on the BMC when getting or setting the boot device.
This is because ironic/api/controllers/v1/node.py BootDeviceController is making , both for PUT or GET requests, is calling the conductor, and the conductor's set_boot_device and get_boot_device methods are directly calling the driver's management interface.
I've said it before, but we should never have synchronous calls from the REST API to a BMC, because BMC's are slow and tend to break.
ConductorManager.set_boot_device should use a worker_thread(), and the API should probably return 202 instead of 204 for this.
ConductorManager.get_boot_device should be handled by a periodic task, and the result cached on the node somewhere, so the API request just fetches from the database. Or it should do something else that makes it asynchronous.
@Deva, Are you working on this bug? otherwise I could get started on it.