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