Dbapi method _reserve_node_place_lock is a bit of a special method. It has both a decorator to retry sqlite "database is locked" issues, and an outer synchronized process fair lock (from oslo.concurrency.lockutils), which ensures only *one* thread is working on locks at a time. Thing is, we can build contention when a stack of heartbeats come in, because they are forced to execute in serialized fashion. And whil investigating some metal3 logs, we could see some lock interactions are basically instant, and when things begin to get backed up, we start seeing 10+ second gaps where we are trying to get ahold of the database, and can't lock the node. And looking at the code for the method, I realized we were *always* re-querying the node, but never returning it after updating the node. Apparently, so we can just log *if* there was an issue. Instead, just consult the result set and then re-query if we must to determine *who* holds the lock, we now only do so *if* we are operating without SQLite, because if we are then we can safely assume the lock came from another thread. Change-Id: Ie606439670be21cf267eb541ce864711d2097207
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