091edb0631
Adds a database retry decorator to capture and retry exceptions rooted in SQLite locking. These locking errors are rooted in the fact that essentially, we can only have one distinct writer at a time. This writer becomes transaction oriented as well. Unfortunately with our green threads and API surface, we run into cases where we have background operations (mainly, periodic tasks...) and API surface transacations which need to operate against the DB as well. Because we can't say one task or another (realistically speaking) can have exclusive control and access, then we run into database locking errors. So when we encounter a lock error, we retry. Adds two additional configuration parameters to the database configuration section, to allow this capability to be further tuned, as file IO performance is *surely* a contributing factor to our locking issues as we mostly see them with a loaded CI system where other issues begin to crop up. The new parameters are as follows: * sqlite_retries, a boolean value allowing the retry logic to be disabled. This can largely be ignored, but is available as it was logical to include. * sqlite_max_wait_for_retry, a integer value, default 30 seconds as to how long to wait for retrying SQLite database operations which are failing due to a "database is locked" error. The retry logic uses the tenacity library, and performs an expoential backoff. Setting the amount of time to a very large number is not advisable, as such the default of 30 seconds was deemed reasonable. Change-Id: Ifeb92e9f23a94f2d96bb495fe63a71df9865fef3 |
||
---|---|---|
api-ref | ||
devstack | ||
doc | ||
etc | ||
ironic | ||
playbooks | ||
redfish-interop-profiles | ||
releasenotes | ||
tools | ||
zuul.d | ||
.gitignore | ||
.gitreview | ||
.mailmap | ||
.stestr.conf | ||
bindep.txt | ||
CONTRIBUTING.rst | ||
driver-requirements.txt | ||
LICENSE | ||
README.rst | ||
requirements.txt | ||
setup.cfg | ||
setup.py | ||
test-requirements.txt | ||
tox.ini |
Ironic
Team and repository tags
Overview
Ironic consists of an API and plug-ins for managing and provisioning physical machines in a security-aware and fault-tolerant manner. It can be used with nova as a hypervisor driver, or standalone service using bifrost. By default, it will use PXE and IPMI to interact with bare metal machines. Ironic also supports vendor-specific plug-ins which may implement additional functionality.
Ironic is distributed under the terms of the Apache License, Version 2.0. The full terms and conditions of this license are detailed in the LICENSE file.
Project resources
- Documentation: https://docs.openstack.org/ironic/latest
- Source: https://opendev.org/openstack/ironic
- Bugs: https://bugs.launchpad.net/ironic/+bugs
- Wiki: https://wiki.openstack.org/wiki/Ironic
- APIs: https://docs.openstack.org/api-ref/baremetal/index.html
- Release Notes: https://docs.openstack.org/releasenotes/ironic/
- Design Specifications: https://specs.openstack.org/openstack/ironic-specs/
Project status, bugs, and requests for feature enhancements (RFEs) are tracked in StoryBoard: https://storyboard.openstack.org/#!/project/943
For information on how to contribute to ironic, see https://docs.openstack.org/ironic/latest/contributor