Fix concurrency issue with Python 3.4 test

We have been seeing failures in parallel Py34
tests caused by the test database being set up more
than once.
The existing mechanism is not thread-safe.
Add a lock around the database setup to ensure
the it is ever executed by only one thread.

Partially implements: blueprint trove-python3

Change-Id: I68aba50d60b912384080911a6f78283f027c4ee3
This commit is contained in:
Petr Malik 2016-07-15 15:30:20 -04:00
parent d58baf220a
commit 94b716142a
1 changed files with 15 additions and 11 deletions

View File

@ -12,18 +12,22 @@
# License for the specific language governing permissions and limitations
# under the License.
import threading
from trove.common import cfg
from trove.db import get_db_api
from trove.db.sqlalchemy import session
CONF = cfg.CONF
DB_SETUP = None
LOCK = threading.Lock()
def init_db():
global DB_SETUP
if DB_SETUP:
return
from trove.common import cfg
from trove.db import get_db_api
from trove.db.sqlalchemy import session
CONF = cfg.CONF
db_api = get_db_api()
db_api.db_sync(CONF)
session.configure_db(CONF)
DB_SETUP = True
with LOCK:
global DB_SETUP
if not DB_SETUP:
db_api = get_db_api()
db_api.db_sync(CONF)
session.configure_db(CONF)
DB_SETUP = True