From f3aaeb6d1dcf62b7ebb0554aa2004e8f46f8a72a Mon Sep 17 00:00:00 2001 From: "Zhang Rong(Jon)" Date: Fri, 21 Jan 2022 16:05:05 +0800 Subject: [PATCH] Fix: INF-254 retry method defined on the higher level makes primary mapper defined error Issue-ID: INF-254 Signed-off-by: Zhang Rong(Jon) Change-Id: If99afa093a06c102fd83af2466db0384c7da2f24 --- o2app/bootstrap.py | 12 ++---------- o2dms/adapter/orm.py | 11 ++++++++++- o2ims/adapter/orm.py | 11 ++++++++++- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/o2app/bootstrap.py b/o2app/bootstrap.py index 4413e80..329d9e2 100644 --- a/o2app/bootstrap.py +++ b/o2app/bootstrap.py @@ -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} diff --git a/o2dms/adapter/orm.py b/o2dms/adapter/orm.py index 1fa808b..3c1709c 100644 --- a/o2dms/adapter/orm.py +++ b/o2dms/adapter/orm.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from retry import retry from sqlalchemy import ( Table, MetaData, @@ -24,6 +25,7 @@ from sqlalchemy import ( # ForeignKey, # engine, # event, + exc ) from sqlalchemy.orm import mapper @@ -90,6 +92,13 @@ nfOCloudVResource = Table( ) +@retry((exc.IntegrityError), tries=3, delay=2) +def wait_for_metadata_ready(engine): + # wait for mapper ready + metadata.create_all(engine, checkfirst=True) + logger.info("metadata is ready") + + def start_o2dms_mappers(engine=None): logger.info("Starting O2 DMS mappers") @@ -98,4 +107,4 @@ def start_o2dms_mappers(engine=None): mapper(dmsModel.NfOCloudVResource, nfOCloudVResource) if engine is not None: - metadata.create_all(engine, checkfirst=True) + wait_for_metadata_ready(engine) diff --git a/o2ims/adapter/orm.py b/o2ims/adapter/orm.py index 6c4a678..43b48b0 100644 --- a/o2ims/adapter/orm.py +++ b/o2ims/adapter/orm.py @@ -13,6 +13,7 @@ # limitations under the License. # from typing_extensions import Required +from retry import retry from sqlalchemy import ( Table, MetaData, @@ -27,6 +28,7 @@ from sqlalchemy import ( # Boolean, # engine, # event, + exc, ) from sqlalchemy.orm import mapper, relationship @@ -161,6 +163,13 @@ configuration = Table( ) +@retry((exc.IntegrityError), tries=3, delay=2) +def wait_for_metadata_ready(engine): + # wait for mapper ready + metadata.create_all(engine, checkfirst=True) + logger.info("metadata is ready") + + def start_o2ims_mappers(engine=None): logger.info("Starting O2 IMS mappers") @@ -187,4 +196,4 @@ def start_o2ims_mappers(engine=None): mapper(confModel.Configuration, configuration) if engine is not None: - metadata.create_all(engine, checkfirst=True) + wait_for_metadata_ready(engine) -- 2.16.6