Fix: INF-254 retry method defined on the higher level makes primary mapper defined... 95/7595/1
authorZhang Rong(Jon) <rong.zhang@windriver.com>
Fri, 21 Jan 2022 08:05:05 +0000 (16:05 +0800)
committerZhang Rong(Jon) <rong.zhang@windriver.com>
Fri, 21 Jan 2022 08:05:05 +0000 (16:05 +0800)
Issue-ID: INF-254
Signed-off-by: Zhang Rong(Jon) <rong.zhang@windriver.com>
Change-Id: If99afa093a06c102fd83af2466db0384c7da2f24

o2app/bootstrap.py
o2dms/adapter/orm.py
o2ims/adapter/orm.py

index 4413e80..329d9e2 100644 (file)
@@ -40,15 +40,6 @@ def wait_for_db_ready(engine):
     logger.info("DB is ready")
 
 
-@retry(tries=3, delay=2)
-def wait_for_mappers_ready(engine):
-    # wait for mapper ready
-    logger.info("Wait for mapper ready ...")
-    o2ims_orm.start_o2ims_mappers(engine)
-    o2dms_orm.start_o2dms_mappers(engine)
-    logger.info("mapper is ready")
-
-
 def bootstrap(
     start_orm: bool = True,
     uow: unit_of_work.AbstractUnitOfWork = SqlAlchemyUnitOfWork(),
@@ -65,7 +56,8 @@ def bootstrap(
             engine = uow.session.get_bind()
 
             wait_for_db_ready(engine)
-            wait_for_mappers_ready(engine)
+            o2ims_orm.start_o2ims_mappers(engine)
+            o2dms_orm.start_o2dms_mappers(engine)
 
     dependencies = {"uow": uow, "notifications": notifications,
                     "publish": publish}
index 1fa808b..3c1709c 100644 (file)
@@ -12,6 +12,7 @@
 #  See the License for the specific language governing permissions and\r
 #  limitations under the License.\r
 \r
+from retry import retry\r
 from sqlalchemy import (\r
     Table,\r
     MetaData,\r
@@ -24,6 +25,7 @@ from sqlalchemy import (
     # ForeignKey,\r
     # engine,\r
     # event,\r
+    exc\r
 )\r
 \r
 from sqlalchemy.orm import mapper\r
@@ -90,6 +92,13 @@ nfOCloudVResource = Table(
 )\r
 \r
 \r
+@retry((exc.IntegrityError), tries=3, delay=2)\r
+def wait_for_metadata_ready(engine):\r
+    # wait for mapper ready\r
+    metadata.create_all(engine, checkfirst=True)\r
+    logger.info("metadata is ready")\r
+\r
+\r
 def start_o2dms_mappers(engine=None):\r
     logger.info("Starting O2 DMS mappers")\r
 \r
@@ -98,4 +107,4 @@ def start_o2dms_mappers(engine=None):
     mapper(dmsModel.NfOCloudVResource, nfOCloudVResource)\r
 \r
     if engine is not None:\r
-        metadata.create_all(engine, checkfirst=True)\r
+        wait_for_metadata_ready(engine)\r
index 6c4a678..43b48b0 100644 (file)
@@ -13,6 +13,7 @@
 #  limitations under the License.\r
 \r
 # from typing_extensions import Required\r
+from retry import retry\r
 from sqlalchemy import (\r
     Table,\r
     MetaData,\r
@@ -27,6 +28,7 @@ from sqlalchemy import (
     # Boolean,\r
     # engine,\r
     # event,\r
+    exc,\r
 )\r
 \r
 from sqlalchemy.orm import mapper, relationship\r
@@ -161,6 +163,13 @@ configuration = Table(
 )\r
 \r
 \r
+@retry((exc.IntegrityError), tries=3, delay=2)\r
+def wait_for_metadata_ready(engine):\r
+    # wait for mapper ready\r
+    metadata.create_all(engine, checkfirst=True)\r
+    logger.info("metadata is ready")\r
+\r
+\r
 def start_o2ims_mappers(engine=None):\r
     logger.info("Starting O2 IMS mappers")\r
 \r
@@ -187,4 +196,4 @@ def start_o2ims_mappers(engine=None):
     mapper(confModel.Configuration, configuration)\r
 \r
     if engine is not None:\r
-        metadata.create_all(engine, checkfirst=True)\r
+        wait_for_metadata_ready(engine)\r