From b249c3a6756e496e3df844a5626588133523ce8d Mon Sep 17 00:00:00 2001 From: Chi Lo Date: Tue, 29 Sep 2020 13:10:44 -0700 Subject: [PATCH] Refactor status wait time for Ranger-agent response Ranger-agent may take a longer time to process IMS resource request from Ranger. This ps allows Ranger to wait for Ranger-agent response an extended period of time compared to other service requests such as FMS or CMS. Change-Id: Ie4ab9944d9636b62b76b87b093a31724177e767e --- orm/base_config.py | 9 ++++++--- .../orm_common/sql_alchemy/resource_status_record.py | 11 ++++++++--- orm/common/orm_common/utils/utils.py | 4 ++-- orm/services/image_manager/ims/logic/image_logic.py | 6 +++--- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/orm/base_config.py b/orm/base_config.py index aadcf2a6..978a86e6 100644 --- a/orm/base_config.py +++ b/orm/base_config.py @@ -44,9 +44,12 @@ OrmOpts = [ cfg.StrOpt('ranger_agent_client_cert_path', default='', help='Ranger Agent certificate path.'), - cfg.IntOpt('resource_status_max_interval', - default=2, - help='Interval in seconds.'), + cfg.IntOpt('resource_status_wait_time', + default=120, + help='Time to wait for resource status in seconds.'), + cfg.IntOpt('resource_status_extended_wait_time', + default=320, + help='Extended time to wait for resource status in seconds.'), cfg.StrOpt('log_location', default='/var/log/ranger', help='Orm log directory.'), diff --git a/orm/common/orm_common/sql_alchemy/resource_status_record.py b/orm/common/orm_common/sql_alchemy/resource_status_record.py index af691848..36790630 100755 --- a/orm/common/orm_common/sql_alchemy/resource_status_record.py +++ b/orm/common/orm_common/sql_alchemy/resource_status_record.py @@ -28,13 +28,18 @@ class ResourceStatusRecord: def resource_status(self, resource_status): self.__resource_status = resource_status - def read_resource_status(self, resource_uuids): + def read_resource_status(self, resource_uuids, extended): records_model = {} statuses_model = {} timestamp = int(time.time()) * 1000 - # assume same time period for all resource types - max_interval_in_seconds = cfg.CONF.resource_status_max_interval * 60 + + if extended: + max_interval_in_seconds = \ + cfg.CONF.resource_status_extended_wait_time + else: + max_interval_in_seconds = cfg.CONF.resource_status_wait_time + ref_timestamp = (int(time.time()) - max_interval_in_seconds) * 1000 try: diff --git a/orm/common/orm_common/utils/utils.py b/orm/common/orm_common/utils/utils.py index 70a60436..e18a453f 100755 --- a/orm/common/orm_common/utils/utils.py +++ b/orm/common/orm_common/utils/utils.py @@ -246,9 +246,9 @@ def delete_uuid(uuid): return True -def get_resource_status_from_db(session, resource_ids): +def get_resource_status_from_db(session, resource_ids, extended=False): resource_status_record = ResourceStatusRecord(session) - return resource_status_record.read_resource_status(resource_ids) + return resource_status_record.read_resource_status(resource_ids, extended) def get_region_end_point_from_db(session, region_id, end_point_type): diff --git a/orm/services/image_manager/ims/logic/image_logic.py b/orm/services/image_manager/ims/logic/image_logic.py index cef84eb1..b499849e 100755 --- a/orm/services/image_manager/ims/logic/image_logic.py +++ b/orm/services/image_manager/ims/logic/image_logic.py @@ -151,7 +151,7 @@ def delete_image_by_uuid(image_uuid, transaction_id): # Get status from resource status table uuid = [sql_image.id] resource_status_dict = utils.get_resource_status_from_db( - datamanager.get_session(), uuid) + datamanager.get_session(), uuid, True) status_model = resource_status_dict.get(sql_image.id) if status_model: @@ -472,7 +472,7 @@ def get_image_by_uuid(image_uuid, query_by_id_or_name=False): # Get the status from resource table uuid = [sql_image.id] resource_status_dict = utils.get_resource_status_from_db( - datamanager.get_session(), uuid) + datamanager.get_session(), uuid, True) status_model = resource_status_dict.get(sql_image.id) image_wrapper = set_resource_status(sql_image, status_model) @@ -515,7 +515,7 @@ def get_image_list_by_params(visibility, region, Customer): if sql_images: uuids = [sql_image.id for sql_image in sql_images] resource_status_dict = utils.get_resource_status_from_db( - datamanager.get_session(), uuids) + datamanager.get_session(), uuids, True) for sql_image in sql_images: status_model = resource_status_dict.get(sql_image.id)