Public bug reported: During concurent allocation/deallocation/update multiple ips in ipam_pluggable_backend deadlock can be raised [1]. It causes rollback actions to be performed in [2], but because of raising deadlock exception database is not in operatable state unless full transaction restart. So it cause rollback action to fail and raise another exception 'InternalError'. As a result original exception DeadLock was replaced with InternalError and db_retry wrapper does not restart transaction in this case.
Resulting exception as seen in logs[3]: 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters [req-15281429-cfa8-4b9f-a904-0105fc947933 admin -] DBAPIError exception wrapped from (pymysql.err.InternalError) (1305, u'SAVEPOINT sa_savepoint_3 does not exist') [SQL: u'ROLLBACK TO SAVEPOINT sa_savepoint_3'] 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters Traceback (most recent call last): 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters context) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters cursor.execute(statement, parameters) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 158, in execute 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters result = self._query(query) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 308, in _query 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters conn.query(q) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 820, in query 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters self._affected_rows = self._read_query_result(unbuffered=unbuffered) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1002, in _read_query_result 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters result.read() 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1285, in read 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters first_packet = self.connection._read_packet() 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 966, in _read_packet 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters packet.check_error() 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 394, in check_error 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters err.raise_mysql_exception(self._data) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 120, in raise_mysql_exception 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters _check_mysql_exception(errinfo) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 115, in _check_mysql_exception 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters raise InternalError(errno, errorvalue) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters InternalError: (1305, u'SAVEPOINT sa_savepoint_3 does not exist') 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters 2016-04-13 12:15:04.687 18294 DEBUG oslo_messaging._drivers.amqpdriver [req-56495b4e-29c9-4360-8609-f5b3ded6ed8f - -] sending reply msg_id: ee2f4dd536fb48e79bee32a668e3cc1d reply queue: reply_d2a1789c66c141888838b059e322350c time elapsed: 0.006736069s _send_reply /usr/local/lib/python2.7/dist-packages/oslo_messaging/_drivers/amqpdriver.py:74 /usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py:68: SAWarning: An exception has occurred during handling of a previous exception. The previous exception is: <class 'oslo_db.exception.DBDeadlock'> (pymysql.err.InternalError) (1213, u'Deadlock found when trying to get lock; try restarting transaction') [SQL: u'INSERT INTO ipamallocations (ip_address, status, ipam_subnet_id) VALUES (%(ip_address)s, %(status)s, %(ipam_subnet_id)s)'] [parameters: {'status': 'ALLOCATED', 'ip_address': u'2001:db8::4e', 'ipam_subnet_id': u'1c084441-cec0-4865-848a-a75f01711e36'}] "is:\n %s %s\n" % (self._exc_info[0], self._exc_info[1])) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters [req-15281429-cfa8-4b9f-a904-0105fc947933 admin -] DBAPIError exception wrapped from (pymysql.err.InternalError) (1305, u'SAVEPOINT sa_savepoint_3 does not exist') [SQL: u'ROLLBACK TO SAVEPOINT sa_savepoint_3'] 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters Traceback (most recent call last): 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters context) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters cursor.execute(statement, parameters) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 158, in execute 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters result = self._query(query) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 308, in _query 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters conn.query(q) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 820, in query 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters self._affected_rows = self._read_query_result(unbuffered=unbuffered) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1002, in _read_query_result 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters result.read() 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1285, in read 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters first_packet = self.connection._read_packet() 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 966, in _read_packet 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters packet.check_error() 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 394, in check_error 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters err.raise_mysql_exception(self._data) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 120, in raise_mysql_exception 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters _check_mysql_exception(errinfo) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 115, in _check_mysql_exception 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters raise InternalError(errno, errorvalue) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters InternalError: (1305, u'SAVEPOINT sa_savepoint_3 does not exist') 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters [1] https://github.com/openstack/neutron/blob/2a305c563073a3066aac3f07aab3c895ec2cd2fb/neutron/db/ipam_pluggable_backend.py#L59 [2] https://github.com/openstack/neutron/blob/2a305c563073a3066aac3f07aab3c895ec2cd2fb/neutron/db/ipam_pluggable_backend.py#L69 [3] http://logs.openstack.org/23/181023/64/check/gate-tempest-dsvm-neutron-dvr/f503538/logs/screen-q-svc.txt.gz#_2016-04-13_12_15_04_685 ** Affects: neutron Importance: Undecided Assignee: Pavel Bondar (pasha117) Status: New ** Tags: l3-ipam-dhcp ** Changed in: neutron Assignee: (unassigned) => Pavel Bondar (pasha117) ** Tags added: l3-ipam-dhcp -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to neutron. https://bugs.launchpad.net/bugs/1571666 Title: [Pluggable IPAM] Original exception is replaced on rollback failure Status in neutron: New Bug description: During concurent allocation/deallocation/update multiple ips in ipam_pluggable_backend deadlock can be raised [1]. It causes rollback actions to be performed in [2], but because of raising deadlock exception database is not in operatable state unless full transaction restart. So it cause rollback action to fail and raise another exception 'InternalError'. As a result original exception DeadLock was replaced with InternalError and db_retry wrapper does not restart transaction in this case. Resulting exception as seen in logs[3]: 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters [req-15281429-cfa8-4b9f-a904-0105fc947933 admin -] DBAPIError exception wrapped from (pymysql.err.InternalError) (1305, u'SAVEPOINT sa_savepoint_3 does not exist') [SQL: u'ROLLBACK TO SAVEPOINT sa_savepoint_3'] 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters Traceback (most recent call last): 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters context) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters cursor.execute(statement, parameters) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 158, in execute 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters result = self._query(query) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 308, in _query 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters conn.query(q) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 820, in query 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters self._affected_rows = self._read_query_result(unbuffered=unbuffered) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1002, in _read_query_result 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters result.read() 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1285, in read 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters first_packet = self.connection._read_packet() 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 966, in _read_packet 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters packet.check_error() 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 394, in check_error 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters err.raise_mysql_exception(self._data) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 120, in raise_mysql_exception 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters _check_mysql_exception(errinfo) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 115, in _check_mysql_exception 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters raise InternalError(errno, errorvalue) 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters InternalError: (1305, u'SAVEPOINT sa_savepoint_3 does not exist') 2016-04-13 12:15:04.685 18292 ERROR oslo_db.sqlalchemy.exc_filters 2016-04-13 12:15:04.687 18294 DEBUG oslo_messaging._drivers.amqpdriver [req-56495b4e-29c9-4360-8609-f5b3ded6ed8f - -] sending reply msg_id: ee2f4dd536fb48e79bee32a668e3cc1d reply queue: reply_d2a1789c66c141888838b059e322350c time elapsed: 0.006736069s _send_reply /usr/local/lib/python2.7/dist-packages/oslo_messaging/_drivers/amqpdriver.py:74 /usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py:68: SAWarning: An exception has occurred during handling of a previous exception. The previous exception is: <class 'oslo_db.exception.DBDeadlock'> (pymysql.err.InternalError) (1213, u'Deadlock found when trying to get lock; try restarting transaction') [SQL: u'INSERT INTO ipamallocations (ip_address, status, ipam_subnet_id) VALUES (%(ip_address)s, %(status)s, %(ipam_subnet_id)s)'] [parameters: {'status': 'ALLOCATED', 'ip_address': u'2001:db8::4e', 'ipam_subnet_id': u'1c084441-cec0-4865-848a-a75f01711e36'}] "is:\n %s %s\n" % (self._exc_info[0], self._exc_info[1])) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters [req-15281429-cfa8-4b9f-a904-0105fc947933 admin -] DBAPIError exception wrapped from (pymysql.err.InternalError) (1305, u'SAVEPOINT sa_savepoint_3 does not exist') [SQL: u'ROLLBACK TO SAVEPOINT sa_savepoint_3'] 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters Traceback (most recent call last): 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters context) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters cursor.execute(statement, parameters) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 158, in execute 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters result = self._query(query) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 308, in _query 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters conn.query(q) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 820, in query 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters self._affected_rows = self._read_query_result(unbuffered=unbuffered) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1002, in _read_query_result 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters result.read() 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1285, in read 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters first_packet = self.connection._read_packet() 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 966, in _read_packet 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters packet.check_error() 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 394, in check_error 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters err.raise_mysql_exception(self._data) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 120, in raise_mysql_exception 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters _check_mysql_exception(errinfo) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 115, in _check_mysql_exception 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters raise InternalError(errno, errorvalue) 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters InternalError: (1305, u'SAVEPOINT sa_savepoint_3 does not exist') 2016-04-13 12:15:04.688 18292 ERROR oslo_db.sqlalchemy.exc_filters [1] https://github.com/openstack/neutron/blob/2a305c563073a3066aac3f07aab3c895ec2cd2fb/neutron/db/ipam_pluggable_backend.py#L59 [2] https://github.com/openstack/neutron/blob/2a305c563073a3066aac3f07aab3c895ec2cd2fb/neutron/db/ipam_pluggable_backend.py#L69 [3] http://logs.openstack.org/23/181023/64/check/gate-tempest-dsvm-neutron-dvr/f503538/logs/screen-q-svc.txt.gz#_2016-04-13_12_15_04_685 To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/1571666/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp