Merge "Progress adjust metadata refactoring"

This commit is contained in:
Zuul 2021-03-30 06:40:49 +00:00 committed by Gerrit Code Review
commit 115f877fac
3 changed files with 50 additions and 26 deletions

View File

@ -1595,7 +1595,8 @@ APP_LIFECYCLE_OPERATION_MTC_ACTION = 'mtc-action'
# Application metadata constants
APP_METADATA_MAINTAIN_USER_OVERRIDES = 'maintain_user_overrides'
APP_METADATA_HELM_TOOLKIT_REQUIRED = 'helm_toolkit_required'
APP_METADATA_APPLY_PROGRESS_ADJUST = 'apply_progress_adjust'
APP_METADATA_APPLY_PROGRESS_ADJUST_DEFAULT_VALUE = 0
APP_METADATA_APPS = 'apps'
APP_METADATA_BEHAVIOR = 'behavior'
APP_METADATA_EVALUATE_REAPPLY = 'evaluate_reapply'

View File

@ -1927,6 +1927,10 @@ def find_metadata_file(path, metadata_file):
dictionary. If specified the filters are applied
to trigger[filter_field] sub-dictionary instead
of the root trigger dictionary.
apply_progress_adjust: - optional: Positive integer value by which to adjust the
percentage calculations for the progress of
a monitoring task.
Default value is zero (no adjustment)
"""
app_name = ''
app_version = ''
@ -2061,6 +2065,23 @@ def find_metadata_file(path, metadata_file):
except KeyError:
pass
try:
apply_progress_adjust_value = doc[constants.APP_METADATA_APPLY_PROGRESS_ADJUST]
if not isinstance(apply_progress_adjust_value, six.integer_types):
raise exception.SysinvException(_(
"Invalid {}: {} should be {}."
"".format(metadata_file,
constants.APP_METADATA_APPLY_PROGRESS_ADJUST,
six.integer_types)))
if apply_progress_adjust_value < 0:
raise exception.SysinvException(_(
"Invalid {}: {} should be greater or equal to zero."
"".format(metadata_file,
constants.APP_METADATA_APPLY_PROGRESS_ADJUST)))
except KeyError:
pass
return app_name, app_version, patches

View File

@ -1252,7 +1252,7 @@ class AppOperator(object):
except Exception as e:
LOG.exception(e)
def _get_metadata_flag(self, app, flag, default):
def _get_metadata_value(self, app, flag, default):
# This function gets a boolean
# parameter from application metadata
flag_result = default
@ -1363,20 +1363,14 @@ class AppOperator(object):
""" Progress monitoring task, to be run in a separate thread """
LOG.info("Starting progress monitoring thread for app %s" % app.name)
def _progress_adjust(app):
helm_toolkit_app = \
self._get_metadata_flag(app,
constants.APP_METADATA_HELM_TOOLKIT_REQUIRED,
True)
if helm_toolkit_app:
return 1
else:
return 0
try:
adjust = self._get_metadata_value(app,
constants.APP_METADATA_APPLY_PROGRESS_ADJUST,
constants.APP_METADATA_APPLY_PROGRESS_ADJUST_DEFAULT_VALUE)
with Timeout(INSTALLATION_TIMEOUT,
exception.KubeAppProgressMonitorTimeout()):
charts_count = len(app.charts)
while True:
try:
monitor_flag.get_nowait()
@ -1386,19 +1380,27 @@ class AppOperator(object):
except queue.Empty:
last, num = _get_armada_log_stats(pattern, logfile)
if last:
if app.system_app:
adjust = _progress_adjust(app)
percent = \
round(float(num) /
(len(app.charts) - adjust) * 100)
if charts_count == 0:
percent = 100
else:
percent = round(float(num) / len(app.charts) * 100)
progress_str = 'processing chart: ' + str(last) +\
', overall completion: ' + str(percent) + '%'
tadjust = 0
if app.system_app:
tadjust = adjust
if tadjust >= charts_count:
LOG.error("Application metadata key '{}'"
"has an invalid value {} (too few charts)".
format(constants.APP_METADATA_APPLY_PROGRESS_ADJUST,
adjust))
tadjust = 0
percent = round((float(num) / (charts_count - tadjust)) * 100)
progress_str = "processing chart: {}, overall completion: {}%".\
format(last, percent)
if app.progress != progress_str:
LOG.info("%s" % progress_str)
self._update_app_status(
app, new_progress=progress_str)
self._update_app_status(app, new_progress=progress_str)
greenthread.sleep(1)
except Exception as e:
# timeout or subprocess error
@ -2420,9 +2422,9 @@ class AppOperator(object):
result = False
if operation == constants.APP_APPLY_OP:
reuse_overrides = \
self._get_metadata_flag(to_app,
constants.APP_METADATA_MAINTAIN_USER_OVERRIDES,
False)
self._get_metadata_value(to_app,
constants.APP_METADATA_MAINTAIN_USER_OVERRIDES,
False)
if reuse_user_overrides is not None:
reuse_overrides = reuse_user_overrides