summaryrefslogtreecommitdiff
path: root/neutron/db/migration/alembic_migrations/versions/2023.2/expand/93f394357a27_remove_in_use_on_subnets.py
diff options
context:
space:
mode:
authorFelix Huettner <felix.huettner@mail.schwarz>2023-03-01 16:14:18 +0100
committerTobias Fischer <tobias.fischer@cloudandheat.com>2023-05-05 17:01:43 +0200
commitc0af5b3b5ea89d3147adf1054625f29d5b01b309 (patch)
tree74deb9f99efa12b5629044b3fd550d5cf63c182c /neutron/db/migration/alembic_migrations/versions/2023.2/expand/93f394357a27_remove_in_use_on_subnets.py
parent97aa84b69aed792033f8930736a7b7d6ed10834b (diff)
downloadneutron-c0af5b3b5ea89d3147adf1054625f29d5b01b309.tar.gz
Reduce lock contention on subnets
in [1] a lock was introduced with the goal of preventing subnets from being deleted while ports are being created in them in parallel. This was acheived by aquiring an exclusive lock on the row of the subnet in the Subnet table when adding/modifying a port or deleting the subnet. However as this was a exclusive lock it also prevented concurrent port modifications on the same subnet from happening. This can cause performance issues on environment with large shared subnets (e.g. a large external subnet). To reduce the lock contention for this case we split the lock in two parts: * For normal port operations we will aquire a shared lock on the row of the subnet. This allows multiple such operations to happen in parallel. * For deleting a subnet we will aquire an exclusive lock on the row of the subnet. This lock can not be aquired when there is any shared lock currently on the row. With this we maintain the same locking level as before, but reduce the amount of lock contention happening and thereby improve throughput. The performance improvement can be measured using rally test [2]. (improving from 21 to 18 seconds). Alternatively it can be tested using 250 parallel curl calls to create a port in the same network. This improves from 113s to 42s. [1]: https://review.opendev.org/c/openstack/neutron/+/713045 [2]: https://github.com/openstack/rally-openstack/blob/master/samples/tasks/scenarios/neutron/create-and-delete-ports.json Closes-Bug: #2009055 Change-Id: I31b1a9c2f986f59fee0da265acebbd88d2f8e4f8
Diffstat (limited to 'neutron/db/migration/alembic_migrations/versions/2023.2/expand/93f394357a27_remove_in_use_on_subnets.py')
-rw-r--r--neutron/db/migration/alembic_migrations/versions/2023.2/expand/93f394357a27_remove_in_use_on_subnets.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/neutron/db/migration/alembic_migrations/versions/2023.2/expand/93f394357a27_remove_in_use_on_subnets.py b/neutron/db/migration/alembic_migrations/versions/2023.2/expand/93f394357a27_remove_in_use_on_subnets.py
new file mode 100644
index 0000000000..0e9ceb6071
--- /dev/null
+++ b/neutron/db/migration/alembic_migrations/versions/2023.2/expand/93f394357a27_remove_in_use_on_subnets.py
@@ -0,0 +1,42 @@
+# Copyright 2023 OpenStack Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+from alembic import op
+import sqlalchemy as sa
+
+
+"""remove in_use from subnet
+
+Revision ID: 93f394357a27
+Revises: fc153938cdc1
+Create Date: 2023-03-07 14:48:15.763633
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '93f394357a27'
+down_revision = 'fc153938cdc1'
+
+
+def upgrade():
+ op.drop_column('subnets', 'in_use')
+
+
+def expand_drop_exceptions():
+ """Support dropping 'in_use' column in table 'subnets'"""
+
+ return {
+ sa.Column: ['subnets.in_use']
+ }