From 94b716142a575e73d906f332fda84d68b549d5cd Mon Sep 17 00:00:00 2001 From: Petr Malik Date: Fri, 15 Jul 2016 15:30:20 -0400 Subject: [PATCH] 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 --- trove/tests/unittests/util/util.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/trove/tests/unittests/util/util.py b/trove/tests/unittests/util/util.py index 21c090aeb8..bf1eda6678 100644 --- a/trove/tests/unittests/util/util.py +++ b/trove/tests/unittests/util/util.py @@ -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