From d566f71ae03f5e63921520ddba147385d5b8cf72 Mon Sep 17 00:00:00 2001 From: Bryan Havenstein <49794041+bhavenst@users.noreply.github.com> Date: Tue, 9 Jun 2026 09:56:58 -0600 Subject: [PATCH] AAP-65883: Refactor clear_setting_cache to use DAB utility (#16469) * AAP-65883: Refactor clear_setting_cache to use DAB shared utility Delegate cache invalidation logic to ansible_base.lib.cache.tasks.clear_cache, passing AWX-specific dependent key resolution (settings_registry) and post-invalidation hook (LOG_AGGREGATOR_LEVEL reconfiguration) as callbacks. Requires: ansible/django-ansible-base AAP-65883/dab-cache-invalidation-job Assisted-by: Claude Code / Opus 4.6 (Anthropic) * AAP-65883: Extract helper functions to module level Move _resolve_setting_dependents and _post_setting_invalidation out of clear_setting_cache for better stack traces and independent testability per review feedback (John Westcott). Assisted-by: Claude Code / Opus 4.6 (Anthropic) --- awx/main/tasks/system.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/awx/main/tasks/system.py b/awx/main/tasks/system.py index 3447edcac8..5e1190a41e 100644 --- a/awx/main/tasks/system.py +++ b/awx/main/tasks/system.py @@ -19,6 +19,7 @@ from dispatcherd.publish import task # Runner import ansible_runner.cleanup import psycopg +from ansible_base.lib.cache.tasks import clear_cache as dab_clear_cache from ansible_base.lib.utils.db import advisory_lock # django-ansible-base @@ -331,24 +332,22 @@ def apply_cluster_membership_policies(): logger.debug('Cluster policy computation finished in {} seconds'.format(time.time() - started_compute)) -@task(queue='tower_settings_change', timeout=600) -def clear_setting_cache(setting_keys): - # log that cache is being cleared - logger.info(f"clear_setting_cache of keys {setting_keys}") - orig_len = len(setting_keys) - for i in range(orig_len): - for dependent_key in settings_registry.get_dependent_settings(setting_keys[i]): - setting_keys.append(dependent_key) - cache_keys = set(setting_keys) - logger.debug('cache delete_many(%r)', cache_keys) - cache.delete_many(cache_keys) +def _resolve_setting_dependents(key): + return settings_registry.get_dependent_settings(key) - if 'LOG_AGGREGATOR_LEVEL' in setting_keys: + +def _post_setting_invalidation(invalidated_keys): + if 'LOG_AGGREGATOR_LEVEL' in invalidated_keys: ctl = get_control_from_settings() ctl.queuename = get_task_queuename() ctl.control('set_log_level', data={'level': settings.LOG_AGGREGATOR_LEVEL}) +@task(queue='tower_settings_change', timeout=600) +def clear_setting_cache(setting_keys): + dab_clear_cache(setting_keys, _resolve_setting_dependents, _post_setting_invalidation) + + @task(queue='tower_broadcast_all', timeout=600) def delete_project_files(project_path): # TODO: possibly implement some retry logic