browbeat/ansible/install/roles/rally/files/create_lock_table.py
venkata anil cf541956e8 implement locking mechanism in rally
Rally is not having locking mechanism to control rally processes
simultaneous access to the same OSP resource. For example, we
don't want two different rally processes to delete the same
floating ip.

In this implementation we create a "RallyLock" table in rally DB
which can store a unique UUID. When a user wants only one process
to modify a OSP resource at a time, take a lock by inserting
resource's (for example floating ip) uuid into this table. If
another process wants to take lock, it will get error as table
won't allow duplicate values for uuid.

Sqlalchemy is throwing errors when this DB code is implemented
as a rally plugin. So we needed to find the alternate option
i.e python package to make this DB changes working.

To acquire and release a lock, rally scenario has to call the
api like

from browbeat_rally.db import api as db_api
from oslo_db import exception as db_exc

net_id = net['network']['id']
try:
    db_api.acquire_lock(net_id)
except db_exc.DBDuplicateEntry:
    LOG.info("This uuid {} is already in use".format(net_id))

db_api.release_lock(net_id)

Change-Id: I0c14a3c0ddb3e2d4e3478e763d2ee4066440b9ac
2021-08-10 17:14:10 +05:30

17 lines
651 B
Python

# 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 browbeat_rally.db import schema
if __name__ == "__main__":
schema.schema_create()