
DB_SETUP = None


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


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():
    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

Fix concurrency issue with Python 3.4 test
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

  
+ 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():
+     with LOCK:
-     global DB_SETUP
+         global DB_SETUP
-     if DB_SETUP:
+         if not 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 = get_db_api()
-     db_api.db_sync(CONF)
+             db_api.db_sync(CONF)
-     session.configure_db(CONF)
+             session.configure_db(CONF)
-     DB_SETUP = True
+             DB_SETUP = True
  
Fix concurrency issue with Python 3.4 test
## Code Before:

DB_SETUP = None


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

## Instruction:
Fix concurrency issue with Python 3.4 test
## Code After:

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():
    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
