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
+15 -11
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