nova/nova/db
Matt Riedemann 9ce94844fa Restore soft-deleted compute node with same uuid
There is a unique index on the compute_nodes.uuid column which
means we can't have more than one compute_nodes record in the
same DB with the same UUID even if one is soft deleted because
the deleted column is not part of that unique index constraint.

This is a problem with ironic nodes where the node is 1:1 with
the compute node record, and when a node is undergoing maintenance
the driver doesn't return it from get_available_nodes() so the
ComputeManager.update_available_resource periodic task (soft)
deletes the compute node record, but when the node is no longer
under maintenance in ironic and the driver reports it, the
ResourceTracker._init_compute_node code will fail to create the
ComputeNode record again because of the duplicate uuid.

This change handles the DBDuplicateEntry error in compute_node_create
by finding the soft-deleted compute node with the same uuid and
simply updating it to no longer be (soft) deleted.

Closes-Bug: #1839560

Change-Id: Iafba419fe86446ffe636721f523fb619f8f787b3
(cherry picked from commit 8b007266f4)
(cherry picked from commit 1b02166528)
2019-08-15 12:09:54 -04:00
..
sqlalchemy Restore soft-deleted compute node with same uuid 2019-08-15 12:09:54 -04:00
__init__.py Use nova.db.api directly 2018-07-10 14:56:27 +00:00
api.py Remove remaining legacy DB API instance_group* methods 2018-06-27 13:24:42 -04:00
base.py Use nova.db.api directly 2018-07-10 14:56:27 +00:00
constants.py Move db MAX constants to own file 2018-03-01 11:09:29 +00:00
migration.py Manage db sync command for cell0 2016-08-22 18:53:45 +03:00