Potential deadlock in check_quota_met during the first call of a tenant
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
octavia |
In Progress
|
Medium
|
Gregory Thiemonge |
Bug Description
There's deadlock in check_quota_met that can occur under the following conditions:
- the Quota entry of the project doesn't exist yet (first POST call to the Octavia API by a tenant)
- 2 resources are created at the same time
It may not impact production environments as the deadlock may occur only in the 2 first (simultaneous) API calls to Octavia in a project.
But it may happen in CI as the tests are executed in parallel in a newly created project.
After the first API call to Octavia, the Quota entry exists in the DB, and deadlock is not reproducible
To reproduce it, I run a loop with:
- delete the quota entry from the DB
- create 8 load balancers simultaneously
- if the deadlock occurs, an exception is raised
- delete the load balancers
It needs only a few iterations of the loop to reproduce it.
[..]
Oct 08 10:28:51 gthiemon-devstack <email address hidden>[2890367]: DEBUG octavia.
Oct 08 10:28:51 gthiemon-devstack <email address hidden>[2890366]: DEBUG octavia.
Oct 08 10:28:51 gthiemon-devstack <email address hidden>[2890366]: DEBUG oslo_db.api [None req-bbe9492f-
Oct 08 10:28:51 gthiemon-devstack <email address hidden>[2890366]: [SQL: INSERT INTO quotas (project_id, health_monitor, listener, load_balancer, member, pool, l7policy, l7rule, in_use_
Oct 08 10:28:51 gthiemon-devstack <email address hidden>[2890366]: [parameters: {'project_id': '0758ab98a0d945
Oct 08 10:28:51 gthiemon-devstack <email address hidden>[2890366]: (Background on this error at: https:/
Oct 08 10:28:51 gthiemon-devstack <email address hidden>[2890366]: DEBUG oslo_db.api [None req-bbe9492f-
[..]
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890367]: INFO octavia.
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890367]: INFO octavia.
Oct 08 10:28:52 gthiemon-devstack octavia-
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890367]: [pid: 2890367|app: 0|req: 16/35] 192.168.1.101 () {66 vars in 1335 bytes} [Sun Oct 8 10:28:51 2023] POST /load-balancer/
Oct 08 10:28:52 gthiemon-devstack octavia-
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890367]: DEBUG octavia.
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890367]: INFO octavia.
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890367]: INFO octavia.
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890367]: [pid: 2890367|app: 0|req: 17/36] 192.168.1.101 () {66 vars in 1335 bytes} [Sun Oct 8 10:28:52 2023] POST /load-balancer/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: ERROR wsme.api [None req-bbe9492f-
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: [SQL: INSERT INTO quotas (project_id, health_monitor, listener, load_balancer, member, pool, l7policy, l7rule, in_use_
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: [parameters: {'project_id': '0758ab98a0d945
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: (Background on this error at: https:/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: Traceback (most recent call last):
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: result = f(self, *args, **kwargs)
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/opt/stack/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: lock_session.
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: self.force_
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: raise self.value
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/opt/stack/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: if self.repositori
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/opt/stack/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: self.quotas.update(
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: ectxt.value = e.inner_exc
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: self.force_
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: raise self.value
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: return f(*args, **kwargs)
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/opt/stack/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: session.
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: return self.limit(
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: result = self.session.
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: conn = self._connectio
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: return self._transacti
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: self._assert_
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: File "/usr/local/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: raise sa_exc.
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: sqlalchemy.
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: [SQL: INSERT INTO quotas (project_id, health_monitor, listener, load_balancer, member, pool, l7policy, l7rule, in_use_
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: [parameters: {'project_id': '0758ab98a0d945
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: (Background on this error at: https:/
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: : sqlalchemy.
Oct 08 10:28:52 gthiemon-devstack <email address hidden>[2890366]: [pid: 2890366|app: 0|req: 20/37] 192.168.1.101 () {66 vars in 1335 bytes} [Sun Oct 8 10:28:51 2023] POST /load-balancer/
Changed in octavia: | |
status: | New → In Progress |
Changed in octavia: | |
assignee: | nobody → Gregory Thiemonge (gthiemonge) |
status: | In Progress → New |
status: | New → In Progress |
importance: | Undecided → Medium |
Note: it happened in the CI in octavia- v2-dsvm- scenario- non-traffic- ops
https:/ /review. opendev. org/c/openstack /octavia/ +/897519/ 4
https:/ /zuul.opendev. org/t/openstack /build/ 5753eeeb674f435 98e9b0e5cf87145 20