ironic-specs/specs/approved/futurist.rst

172 lines
3.6 KiB
ReStructuredText

..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
==================================================
Switch periodic tasks to the Futurist library
==================================================
https://bugs.launchpad.net/ironic/+bug/1526277
Futurist_ is a new Oslo library providing tools for writing asynchronous code.
This spec suggests switching our periodic task implementation to Futurist_ to
solve some long-standing problems.
Problem description
===================
The main problem with our current implementation is that we run all periodic
tasks in one thread. Any task that blocks for a while would block all other
tasks from executing, and it happens pretty often with tasks checking power
states via IPMI.
Switch to Futurist_ will allow executing all tasks in parallel.
Proposed change
===============
* Modify conductor to use Futurist_ library instead of implementation from
oslo incubator.
`Existing worker pool
<https://github.com/openstack/ironic/blob/master/ironic/conductor/manager.py#L238>`_
will be reused for periodic tasks. So, existing option ``workers_pool_size``
will set maximum number of tasks to run in parallel at every moment of time.
* Switch all use cases of ``ironic.openstack.common.periodic_task`` to
Futurist_ decorators, and drop this module.
* Switch ``ironic.drivers.base.driver_periodic_task`` to using Futurist_
decorators internally and deprecate it.
Alternatives
------------
* We could fix existing implementation. That's not actually easier, as it
requires essentially rewriting it.
Data model impact
-----------------
None
State Machine Impact
--------------------
None
REST API impact
---------------
None
Client (CLI) impact
-------------------
None
RPC API impact
--------------
None
Driver API impact
-----------------
* Old way of creating driver periodic tasks will be deprecated, drivers should
eventually switch to using Futurist_ decorators.
Nova driver impact
------------------
None
Ramdisk impact
--------------
N/A
.. NOTE: This section was not present at the time this spec was approved.
Security impact
---------------
None
Other end user impact
---------------------
None
Scalability impact
------------------
* Overall positive impact on scalability expected, as every Ironic conductor
will be able (at least theoretically) to manage more IPMI nodes.
Performance Impact
------------------
* A periodic tasks performance will no longer affect timing of other periodic
tasks.
Other deployer impact
---------------------
None
Developer impact
----------------
None
Implementation
==============
Assignee(s)
-----------
Primary assignee:
Dmitry Tantsur (irc: dtantsur, lp: divius)
Work Items
----------
* Change conductor manager to use Futurist_
* Modify ``driver_periodic_task`` to use Futurist_ internally
Dependencies
============
The only big dependency is Futurist_ itself. At the moment of writing it
didn't see an official release yet, but is moving pretty fast and all required
code already landed in git master.
Testing
=======
Unit tests should already cover this functionality. Specific tests ensuring
parallelization will be added.
Upgrades and Backwards Compatibility
====================================
None
Documentation Impact
====================
Documentation of driver periodic tasks should be updated to mention Futurist_
instead of ad-hoc implementation.
References
==========
* `Futurist periodic task documentation
<http://docs.openstack.org/developer/futurist/api.html#periodics>`_
.. _Futurist: https://github.com/openstack/futurist