Public bug reported:

Our environment has a high amount of ephemeral instances (spawn -> do a
task -> deleted) therefore to keep the Nova DB clean we run periodically
"nova-manage db archive_deleted_rows" to archive and purge old DB
entries, even with a small "--max_rows" it causes occasional DB
deadlocks and leave us with instances stuck forever with BUILD status
and "scheduling" task state.

The nova-conductor error related to such instances:
{'code': 500, 'created': '2025-05-15T05:10:15Z', 'message': 'RemoteError', 
'details': 'Traceback (most recent call last):\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/compute/manager.py", line 
207, in decorated_function\n    return function(self, context, *args, 
**kwargs)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/compute/manager.py", line 
2145, in _do_build_and_run_instance\n    (task_states.SCHEDULING, None))\n  
File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_versionedobjects/base.py",
 line 210, in wrapper\n    ctxt, self, fn.__name__, args, kwargs)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/conductor/rpcapi.py", 
line 246, in object_action\n    objmethod=objmethod, args=args, 
kwargs=kwargs)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_messaging/rpc/client.py", 
line 181, in call\n    transport_options=self.transport_options)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_messaging/trans
 port.py", line 129, in _send\n    transport_options=transport_options)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_messaging/_drivers/amqpdriver.py",
 line 674, in send\n    transport_options=transport_options)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_messaging/_drivers/amqpdriver.py",
 line 664, in _send\n    raise result\noslo_messaging.rpc.client.RemoteError: 
Remote error: DBDeadlock (pymysql.err.OperationalError) (1213, \'Deadlock found 
when trying to get lock; try restarting transaction\')\n[SQL: UPDATE 
instance_extra SET updated_at=%(updated_at)s, numa_topology=%(numa_topology)s, 
pci_requests=%(pci_requests)s, flavor=%(flavor)s, vcpu_model=%(vcpu_model)s 
WHERE instance_extra.deleted = %(deleted_1)s AND instance_extra.instance_uuid = 
%(instance_uuid_1)s]\n[parameters: {\'updated_at\': datetime.datetime(2025, 5, 
15, 5, 10, 15, 769294), \'numa_topology\': \'{"nova_object.name":               
       "InstanceNUMATopology", "nova_object.namespac
 e": "nova", "nova_object.version": "1.3", "nova_object.data": {"cells": 
[{"nova_obj ... (731 characters truncated) ... set_reserved", "id", 
"cpu_pinning_raw", "pagesize"]}], "emulator_threads_policy": null}, 
"nova_object.changes": ["cells", "emulator_threads_policy"]}\', 
\'pci_requests\': \'[{"count": 1, "spec": [{"vendor_id": "10de", "product_id": 
"1e07", "dev_type": "type-PCI"}], "alias_name": "RTX_2080ti_revA", "is_new": 
false, "numa_ ... (538 characters truncated) ... "1ad7", "dev_type": 
"type-PCI"}], "alias_name": "RTX_2080tiex2", "is_new": false, "numa_policy": 
"legacy", "request_id": null, "requester_id": null}]\', \'flavor\': \'{"cur": 
{"nova_object.name": "Flavor", "nova_object.namespace": "nova",    
"nova_object.version": "1.2", "nova_object.data": {"id": 651, "name": "ux4-g1 
... (547 characters truncated) ... "2025-02-18T20:01:16Z", "updated_at": null, 
"deleted_at": null, "deleted": false}, "nova_object.changes": ["extra_specs"]}, 
"old": null, "new": null}\', \'vcpu_model
 \': \'{"nova_object.name": "VirtCPUModel", "nova_object.namespace": "nova", 
"nova_object.version": "1.0", "nova_object.data": {"arch": null, "vendor": null 
... (462 characters truncated) ... ": "host-passthrough", "model": null, 
"match": "exact"}, "nova_object.changes": ["features", "topology", "match", 
"model", "mode", "arch", "vendor"]}\', \'deleted_1\': 0, \'instance_uuid_1\': 
\'42288ebb-279c-483e-ad00-993ed453f823\'}]\n(Background on this error at: 
http://sqlalche.me/e/e3q8)\n[\'Traceback (most recent call last):\\n\', \'  
File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", 
line 1249, in _execute_context\\n    cursor, statement, parameters, 
context\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/default.py", 
line 552, in do_execute\\n    cursor.execute(statement, parameters)\\n\', \'  
File  "/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/cursors.py", 
line 170, in execute\\n    result = self._query(query)\\n
 \', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/cursors.py", line 328, 
in _query\\n    conn.query(q)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
517, in query\\n self._affected_rows = 
self._read_query_result(unbuffered=unbuffered)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
732, in _read_query_result\\n result.read()\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
1075, in read\\n    first_packet = self.connection._read_packet()\\n\', \'  
File "/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", 
line 684, in _read_packet\\n    packet.check_error()\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/protocol.py", line 
220, in check_error\\n    err.raise_mysql_exception(self._data)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/err.py", line 109, in 
raise
 _mysql_exception\\n    raise errorclass(errno, errval)\\n\', 
"pymysql.err.OperationalError: (1213, \'Deadlock found when trying to get lock; 
try restarting transaction\')\\n", \'\\nThe above exception was the direct 
cause of the following exception:\\n\\n\', \'Traceback (most recent call 
last):\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/conductor/manager.py", 
line 135, in _object_dispatch\\n    return getattr(target, method)(*args, 
**kwargs)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_versionedobjects/base.py",
 line 226, in wrapper\\n return fn(self, *args, **kwargs)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/objects/instance.py", 
line 801, in save\\n    self._extra_values_to_save)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/db/api.py", line 979, in 
instance_extra_update_by_uuid\\n    updates)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/db/sqlalchemy/api.py"
 , line 224, in wrapped\\n    return f(context, *args, **kwargs)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/db/sqlalchemy/api.py", 
line 3072, in instance_extra_update_by_uuid\\n    update(values)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 
3835, in update\\n    update_op.exec_()\\n\', \' File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/orm/persistence.py",
 line 1694, in exec_\\n    self._do_exec()\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-            
packages/sqlalchemy/orm/persistence.py", line 1887, in _do_exec\\n    
self._execute_stmt(update_stmt)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/orm/persistence.py",
 line  1699, in _execute_stmt\\n    self.result = 
self.query._execute_crud(stmt, self.mapper)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 
3367, in _execute_crud\\n    return conn.execute(st
 mt, self._params)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", 
line 988, in execute\\n    return meth(self,  multiparams, params)\\n\', \'  
File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", 
line 287, in _execute_on_connection\\n    return 
connection._execute_clauseelement(self, multiparams, params)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", 
line 1107, in _execute_clauseelement\\n    distilled_params,\\n\', \'  File  
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", 
line 1253, in _execute_context\\n    e, statement, parameters, cursor, 
context\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", 
line 1471, in _handle_dbapi_exception\\n    util.raise_from_cause(newraise, 
exc_info)\\n\', \'  File  
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/util/compat.py", 
line 398, in raise_fr
 om_cause\\n    reraise(type(exception), exception, tb=exc_tb, 
cause=cause)\\n\', \'  File  
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/util/compat.py", 
line 152, in reraise\\n    raise value.with_traceback(tb)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site- packages/sqlalchemy/engine/base.py", 
line 1249, in _execute_context\\n    cursor, statement, parameters, 
context\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/default.py", 
line 552, in do_execute\\n    cursor.execute(statement, parameters)\\n\', \'  
File "/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/cursors.py", line 
170, in execute\\n    result = self._query(query)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/cursors.py", line 328, 
in _query\\n    conn.query(q)\\n\', \'  File  
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
517, in query\\n    self._affected_rows = self._read_query_result(unbuffered=un
 buffered)\\n\', \'  File           
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
732, in _read_query_result\\n    result.read()\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
1075, in read\\n    first_packet = self.connection._read_packet()\\n\', \'  
File "/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", 
line 684, in _read_packet\\n    packet.check_error()\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/protocol.py", line 
220, in check_error\\n err.raise_mysql_exception(self._data)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/err.py", line 109, in 
raise_mysql_exception\\n    raise errorclass(errno, 
errval)\\n\',\'oslo_db.exception.DBDeadlock: (pymysql.err.OperationalError) 
(1213, \\\'Deadlock found when trying to get lock; try restarting 
transaction\\\')\\n[SQL: UPDATE instance_extra SET updated_at=%(updated_at)s, 
numa_topology=%(
 numa_topology)s, pci_requests=%(pci_requests)s, flavor=%(flavor)s, 
vcpu_model=%(vcpu_model)s WHERE instance_extra.deleted = %(deleted_1)s AND 
instance_extra.instance_uuid = %(instance_uuid_1)s]\\n[parameters: 
{\\\'updated_at\\\': datetime.datetime(2025, 5, 15, 5, 10, 15, 769294), 
\\\'numa_topology\\\': \\\'{"nova_object.name": "InstanceNUMATopology", 
"nova_object.namespace": "nova", "nova_object.version": "1.3", 
"nova_object.data": {"cells": [{"nova_obj ... (731 characters truncated) ... 
set_reserved", "id", "cpu_pinning_raw", "pagesize"]}], 
"emulator_threads_policy": null}, "nova_object.changes": ["cells", 
"emulator_threads_policy"]}\\\', \\\'pci_requests\\\': \\\'[{"count": 1, 
"spec": [{"vendor_id":  "10de", "product_id": "1e07", "dev_type": "type-PCI"}], 
"alias_name": "RTX_2080ti_revA", "is_new": false, "numa_ ... (538 characters 
truncated) ... "1ad7", "dev_type": "type-PCI"}], "alias_name":  
"RTX_2080tiex2", "is_new": false, "numa_policy": "legacy", "request_id": null, 
"requeste
 r_id": null}]\\\', \\\'flavor\\\': \\\'{"cur": {"nova_object.name": "Flavor", 
"nova_object.namespace": "nova",  "nova_object.version": "1.2", 
"nova_object.data": {"id": 651, "name": "ux4-g1 ... (547 characters truncated) 
... "2025-02-18T20:01:16Z", "updated_at": null, "deleted_at": null, "deleted": 
false},  "nova_object.changes": ["extra_specs"]}, "old": null, "new": 
null}\\\', \\\'vcpu_model\\\': \\\'{"nova_object.name": "VirtCPUModel", 
"nova_object.namespace": "nova", "nova_object.version": "1.0",  
"nova_object.data": {"arch": null, "vendor": null ... (462 characters 
truncated) ... ": "host-passthrough", "model": null, "match": "exact"}, 
"nova_object.changes": ["features", "topology", "match", "model", "mode", 
"arch", "vendor"]}\\\', \\\'deleted_1\\\': 0, \\\'instance_uuid_1\\\': 
\\\'42288ebb-279c-483e-ad00-993ed453f823\\\'}]\\n(Background on this error at: 
http://sqlalche.me/e/e3q8)\\n\'].\n'}


ENGINE INNODB STATUS:

------------------------
LATEST DETECTED DEADLOCK
------------------------
2025-05-15 13:02:46 0x7fda0b6c7700
*** (1) TRANSACTION:
TRANSACTION 33097244744, ACTIVE 0 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 56380264, OS thread handle 140573857470208, query id 3909877498 
10.9.64.13 nova_v1 Updating
UPDATE instance_extra SET updated_at='2025-05-15 13:02:46.460570', 
numa_topology='{\"nova_object.name\": \"InstanceNUMATopology\", 
\"nova_object.namespace\": \"nova\", \"nova_object.version\": \"1.3\", 
\"nova_object.data\": {\"cells\": [{\"nova
_object.name\": \"InstanceNUMACell\", \"nova_object.namespace\": \"nova\", 
\"nova_object.version\": \"1.4\", \"nova_object.data\": {\"id\": 0, \"cpuset\": 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 
22, 23, 24
, 25, 26, 27, 28, 29, 30, 31], \"memory\": 122880, \"pagesize\": null, 
\"cpu_topology\": {\"nova_object.name\": \"VirtCPUTopology\", 
\"nova_object.namespace\": \"nova\", \"nova_object.version\": \"1.0\", 
\"nova_object.data\": {\"sockets\": 1, \
"cores\": 16, \"threads\": 2}, \"nova_object.changes\": [\"cores\", 
\"sockets\", \"threads\"]}, \"cpu_pinning_raw\": {\"0\": 40, \"1\": 88, \"2\": 
18, \"3\": 66, \"4\": 42, \"5\": 90,
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 1178 page no 51132 n bits 72 index PRIMARY of table 
`nova`.`instance_extra` trx id 33097244744 lock_mode X locks rec but not gap 
waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 18; compact format; info bits 0
...

*** (2) TRANSACTION:
TRANSACTION 33097244739, ACTIVE 0 sec fetching rows
mysql tables in use 3, locked 3
4450 lock struct(s), heap size 532688, 11991 row lock(s)
MySQL thread id 56380887, OS thread handle 140574471255808, query id 3909877431 
10.9.64.13 nova_v1 Sending data
DELETE FROM instance_extra WHERE instance_extra.id in (SELECT T1.id FROM 
(SELECT instance_extra.created_at, instance_extra.updated_at, 
instance_extra.deleted_at, instance_extra.deleted, instance_extra.id, 
instance_extra.instance_uuid, instance_
extra.device_metadata, instance_extra.numa_topology, 
instance_extra.pci_requests, instance_extra.flavor, instance_extra.vcpu_model, 
instance_extra.migration_context, instance_extra.keypairs, 
instance_extra.trusted_certs, instance_extra.resource
s
FROM instance_extra, instances
WHERE instances.deleted != 0 AND instances.uuid = instance_extra.instance_uuid 
ORDER BY instance_extra.id
 LIMIT 200) as T1)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 1178 page no 51132 n bits 72 index PRIMARY of table 
`nova`.`instance_extra` trx id 33097244739 lock mode S


The deadlocks happen in nova.instance_extra and triggered by colliding 
"nova-manage db archive_deleted_rows" and "instance_extra_update_by_uuid" 
function from nova.db.main.api which does not have any retry logic implemented

** Affects: nova
     Importance: Undecided
     Assignee: Stanislav Dmitriev (sdmitriev1)
         Status: New

** Changed in: nova
     Assignee: (unassigned) => Stanislav Dmitriev (sdmitriev1)

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/2111108

Title:
  DBDeadlock in nova.instance_extra

Status in OpenStack Compute (nova):
  New

Bug description:
  Our environment has a high amount of ephemeral instances (spawn -> do
  a task -> deleted) therefore to keep the Nova DB clean we run
  periodically "nova-manage db archive_deleted_rows" to archive and
  purge old DB entries, even with a small "--max_rows" it causes
  occasional DB deadlocks and leave us with instances stuck forever with
  BUILD status and "scheduling" task state.

  The nova-conductor error related to such instances:
  {'code': 500, 'created': '2025-05-15T05:10:15Z', 'message': 'RemoteError', 
'details': 'Traceback (most recent call last):\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/compute/manager.py", line 
207, in decorated_function\n    return function(self, context, *args, 
**kwargs)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/compute/manager.py", line 
2145, in _do_build_and_run_instance\n    (task_states.SCHEDULING, None))\n  
File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_versionedobjects/base.py",
 line 210, in wrapper\n    ctxt, self, fn.__name__, args, kwargs)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/conductor/rpcapi.py", 
line 246, in object_action\n    objmethod=objmethod, args=args, 
kwargs=kwargs)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_messaging/rpc/client.py", 
line 181, in call\n    transport_options=self.transport_options)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_messaging/tra
 nsport.py", line 129, in _send\n    transport_options=transport_options)\n  
File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_messaging/_drivers/amqpdriver.py",
 line 674, in send\n    transport_options=transport_options)\n  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_messaging/_drivers/amqpdriver.py",
 line 664, in _send\n    raise result\noslo_messaging.rpc.client.RemoteError: 
Remote error: DBDeadlock (pymysql.err.OperationalError) (1213, \'Deadlock found 
when trying to get lock; try restarting transaction\')\n[SQL: UPDATE 
instance_extra SET updated_at=%(updated_at)s, numa_topology=%(numa_topology)s, 
pci_requests=%(pci_requests)s, flavor=%(flavor)s, vcpu_model=%(vcpu_model)s 
WHERE instance_extra.deleted = %(deleted_1)s AND instance_extra.instance_uuid = 
%(instance_uuid_1)s]\n[parameters: {\'updated_at\': datetime.datetime(2025, 5, 
15, 5, 10, 15, 769294), \'numa_topology\': \'{"nova_object.name":               
       "InstanceNUMATopology", "nova_object.namesp
 ace": "nova", "nova_object.version": "1.3", "nova_object.data": {"cells": 
[{"nova_obj ... (731 characters truncated) ... set_reserved", "id", 
"cpu_pinning_raw", "pagesize"]}], "emulator_threads_policy": null}, 
"nova_object.changes": ["cells", "emulator_threads_policy"]}\', 
\'pci_requests\': \'[{"count": 1, "spec": [{"vendor_id": "10de", "product_id": 
"1e07", "dev_type": "type-PCI"}], "alias_name": "RTX_2080ti_revA", "is_new": 
false, "numa_ ... (538 characters truncated) ... "1ad7", "dev_type": 
"type-PCI"}], "alias_name": "RTX_2080tiex2", "is_new": false, "numa_policy": 
"legacy", "request_id": null, "requester_id": null}]\', \'flavor\': \'{"cur": 
{"nova_object.name": "Flavor", "nova_object.namespace": "nova",    
"nova_object.version": "1.2", "nova_object.data": {"id": 651, "name": "ux4-g1 
... (547 characters truncated) ... "2025-02-18T20:01:16Z", "updated_at": null, 
"deleted_at": null, "deleted": false}, "nova_object.changes": ["extra_specs"]}, 
"old": null, "new": null}\', \'vcpu_mod
 el\': \'{"nova_object.name": "VirtCPUModel", "nova_object.namespace": "nova", 
"nova_object.version": "1.0", "nova_object.data": {"arch": null, "vendor": null 
... (462 characters truncated) ... ": "host-passthrough", "model": null, 
"match": "exact"}, "nova_object.changes": ["features", "topology", "match", 
"model", "mode", "arch", "vendor"]}\', \'deleted_1\': 0, \'instance_uuid_1\': 
\'42288ebb-279c-483e-ad00-993ed453f823\'}]\n(Background on this error at: 
http://sqlalche.me/e/e3q8)\n[\'Traceback (most recent call last):\\n\', \'  
File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", 
line 1249, in _execute_context\\n    cursor, statement, parameters, 
context\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/default.py", 
line 552, in do_execute\\n    cursor.execute(statement, parameters)\\n\', \'  
File  "/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/cursors.py", 
line 170, in execute\\n    result = self._query(query)\
 \n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/cursors.py", line 328, 
in _query\\n    conn.query(q)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
517, in query\\n self._affected_rows = 
self._read_query_result(unbuffered=unbuffered)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
732, in _read_query_result\\n result.read()\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
1075, in read\\n    first_packet = self.connection._read_packet()\\n\', \'  
File "/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", 
line 684, in _read_packet\\n    packet.check_error()\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/protocol.py", line 
220, in check_error\\n    err.raise_mysql_exception(self._data)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/err.py", line 109, in 
rai
 se_mysql_exception\\n    raise errorclass(errno, errval)\\n\', 
"pymysql.err.OperationalError: (1213, \'Deadlock found when trying to get lock; 
try restarting transaction\')\\n", \'\\nThe above exception was the direct 
cause of the following exception:\\n\\n\', \'Traceback (most recent call 
last):\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/conductor/manager.py", 
line 135, in _object_dispatch\\n    return getattr(target, method)(*args, 
**kwargs)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/oslo_versionedobjects/base.py",
 line 226, in wrapper\\n return fn(self, *args, **kwargs)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/objects/instance.py", 
line 801, in save\\n    self._extra_values_to_save)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/db/api.py", line 979, in 
instance_extra_update_by_uuid\\n    updates)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/db/sqlalchemy/api.p
 y", line 224, in wrapped\\n    return f(context, *args, **kwargs)\\n\', \'  
File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/nova/db/sqlalchemy/api.py", 
line 3072, in instance_extra_update_by_uuid\\n    update(values)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 
3835, in update\\n    update_op.exec_()\\n\', \' File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/orm/persistence.py",
 line 1694, in exec_\\n    self._do_exec()\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-            
packages/sqlalchemy/orm/persistence.py", line 1887, in _do_exec\\n    
self._execute_stmt(update_stmt)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/orm/persistence.py",
 line  1699, in _execute_stmt\\n    self.result = 
self.query._execute_crud(stmt, self.mapper)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 
3367, in _execute_crud\\n    return conn.execute(
 stmt, self._params)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", 
line 988, in execute\\n    return meth(self,  multiparams, params)\\n\', \'  
File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", 
line 287, in _execute_on_connection\\n    return 
connection._execute_clauseelement(self, multiparams, params)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", 
line 1107, in _execute_clauseelement\\n    distilled_params,\\n\', \'  File  
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", 
line 1253, in _execute_context\\n    e, statement, parameters, cursor, 
context\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", 
line 1471, in _handle_dbapi_exception\\n    util.raise_from_cause(newraise, 
exc_info)\\n\', \'  File  
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/util/compat.py", 
line 398, in raise_
 from_cause\\n    reraise(type(exception), exception, tb=exc_tb, 
cause=cause)\\n\', \'  File  
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/util/compat.py", 
line 152, in reraise\\n    raise value.with_traceback(tb)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site- packages/sqlalchemy/engine/base.py", 
line 1249, in _execute_context\\n    cursor, statement, parameters, 
context\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/sqlalchemy/engine/default.py", 
line 552, in do_execute\\n    cursor.execute(statement, parameters)\\n\', \'  
File "/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/cursors.py", line 
170, in execute\\n    result = self._query(query)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/cursors.py", line 328, 
in _query\\n    conn.query(q)\\n\', \'  File  
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
517, in query\\n    self._affected_rows = self._read_query_result(unbuffered=
 unbuffered)\\n\', \'  File           
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
732, in _read_query_result\\n    result.read()\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", line 
1075, in read\\n    first_packet = self.connection._read_packet()\\n\', \'  
File "/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/connections.py", 
line 684, in _read_packet\\n    packet.check_error()\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/protocol.py", line 
220, in check_error\\n err.raise_mysql_exception(self._data)\\n\', \'  File 
"/var/lib/kolla/venv/lib/python3.6/site-packages/pymysql/err.py", line 109, in 
raise_mysql_exception\\n    raise errorclass(errno, 
errval)\\n\',\'oslo_db.exception.DBDeadlock: (pymysql.err.OperationalError) 
(1213, \\\'Deadlock found when trying to get lock; try restarting 
transaction\\\')\\n[SQL: UPDATE instance_extra SET updated_at=%(updated_at)s, 
numa_topology=
 %(numa_topology)s, pci_requests=%(pci_requests)s, flavor=%(flavor)s, 
vcpu_model=%(vcpu_model)s WHERE instance_extra.deleted = %(deleted_1)s AND 
instance_extra.instance_uuid = %(instance_uuid_1)s]\\n[parameters: 
{\\\'updated_at\\\': datetime.datetime(2025, 5, 15, 5, 10, 15, 769294), 
\\\'numa_topology\\\': \\\'{"nova_object.name": "InstanceNUMATopology", 
"nova_object.namespace": "nova", "nova_object.version": "1.3", 
"nova_object.data": {"cells": [{"nova_obj ... (731 characters truncated) ... 
set_reserved", "id", "cpu_pinning_raw", "pagesize"]}], 
"emulator_threads_policy": null}, "nova_object.changes": ["cells", 
"emulator_threads_policy"]}\\\', \\\'pci_requests\\\': \\\'[{"count": 1, 
"spec": [{"vendor_id":  "10de", "product_id": "1e07", "dev_type": "type-PCI"}], 
"alias_name": "RTX_2080ti_revA", "is_new": false, "numa_ ... (538 characters 
truncated) ... "1ad7", "dev_type": "type-PCI"}], "alias_name":  
"RTX_2080tiex2", "is_new": false, "numa_policy": "legacy", "request_id": null, 
"reques
 ter_id": null}]\\\', \\\'flavor\\\': \\\'{"cur": {"nova_object.name": 
"Flavor", "nova_object.namespace": "nova",  "nova_object.version": "1.2", 
"nova_object.data": {"id": 651, "name": "ux4-g1 ... (547 characters truncated) 
... "2025-02-18T20:01:16Z", "updated_at": null, "deleted_at": null, "deleted": 
false},  "nova_object.changes": ["extra_specs"]}, "old": null, "new": 
null}\\\', \\\'vcpu_model\\\': \\\'{"nova_object.name": "VirtCPUModel", 
"nova_object.namespace": "nova", "nova_object.version": "1.0",  
"nova_object.data": {"arch": null, "vendor": null ... (462 characters 
truncated) ... ": "host-passthrough", "model": null, "match": "exact"}, 
"nova_object.changes": ["features", "topology", "match", "model", "mode", 
"arch", "vendor"]}\\\', \\\'deleted_1\\\': 0, \\\'instance_uuid_1\\\': 
\\\'42288ebb-279c-483e-ad00-993ed453f823\\\'}]\\n(Background on this error at: 
http://sqlalche.me/e/e3q8)\\n\'].\n'}

  
  ENGINE INNODB STATUS:

  ------------------------
  LATEST DETECTED DEADLOCK
  ------------------------
  2025-05-15 13:02:46 0x7fda0b6c7700
  *** (1) TRANSACTION:
  TRANSACTION 33097244744, ACTIVE 0 sec starting index read
  mysql tables in use 1, locked 1
  LOCK WAIT 3 lock struct(s), heap size 1136, 2 row lock(s)
  MySQL thread id 56380264, OS thread handle 140573857470208, query id 
3909877498 10.9.64.13 nova_v1 Updating
  UPDATE instance_extra SET updated_at='2025-05-15 13:02:46.460570', 
numa_topology='{\"nova_object.name\": \"InstanceNUMATopology\", 
\"nova_object.namespace\": \"nova\", \"nova_object.version\": \"1.3\", 
\"nova_object.data\": {\"cells\": [{\"nova
  _object.name\": \"InstanceNUMACell\", \"nova_object.namespace\": \"nova\", 
\"nova_object.version\": \"1.4\", \"nova_object.data\": {\"id\": 0, \"cpuset\": 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 
22, 23, 24
  , 25, 26, 27, 28, 29, 30, 31], \"memory\": 122880, \"pagesize\": null, 
\"cpu_topology\": {\"nova_object.name\": \"VirtCPUTopology\", 
\"nova_object.namespace\": \"nova\", \"nova_object.version\": \"1.0\", 
\"nova_object.data\": {\"sockets\": 1, \
  "cores\": 16, \"threads\": 2}, \"nova_object.changes\": [\"cores\", 
\"sockets\", \"threads\"]}, \"cpu_pinning_raw\": {\"0\": 40, \"1\": 88, \"2\": 
18, \"3\": 66, \"4\": 42, \"5\": 90,
  *** (1) WAITING FOR THIS LOCK TO BE GRANTED:
  RECORD LOCKS space id 1178 page no 51132 n bits 72 index PRIMARY of table 
`nova`.`instance_extra` trx id 33097244744 lock_mode X locks rec but not gap 
waiting
  Record lock, heap no 2 PHYSICAL RECORD: n_fields 18; compact format; info 
bits 0
  ...

  *** (2) TRANSACTION:
  TRANSACTION 33097244739, ACTIVE 0 sec fetching rows
  mysql tables in use 3, locked 3
  4450 lock struct(s), heap size 532688, 11991 row lock(s)
  MySQL thread id 56380887, OS thread handle 140574471255808, query id 
3909877431 10.9.64.13 nova_v1 Sending data
  DELETE FROM instance_extra WHERE instance_extra.id in (SELECT T1.id FROM 
(SELECT instance_extra.created_at, instance_extra.updated_at, 
instance_extra.deleted_at, instance_extra.deleted, instance_extra.id, 
instance_extra.instance_uuid, instance_
  extra.device_metadata, instance_extra.numa_topology, 
instance_extra.pci_requests, instance_extra.flavor, instance_extra.vcpu_model, 
instance_extra.migration_context, instance_extra.keypairs, 
instance_extra.trusted_certs, instance_extra.resource
  s
  FROM instance_extra, instances
  WHERE instances.deleted != 0 AND instances.uuid = 
instance_extra.instance_uuid ORDER BY instance_extra.id
   LIMIT 200) as T1)
  *** (2) HOLDS THE LOCK(S):
  RECORD LOCKS space id 1178 page no 51132 n bits 72 index PRIMARY of table 
`nova`.`instance_extra` trx id 33097244739 lock mode S

  
  The deadlocks happen in nova.instance_extra and triggered by colliding 
"nova-manage db archive_deleted_rows" and "instance_extra_update_by_uuid" 
function from nova.db.main.api which does not have any retry logic implemented

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/2111108/+subscriptions


-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to