mirror of
https://github.com/ansible/awx.git
synced 2026-01-12 02:19:58 -03:30
defer UnifiedJob.result_stdout_text for improved performance
result_stdout_text can be _very_ large - some customers have 5MB+ per job; querying for this in list contexts results in _very_ large datasets being read from the database which is very slow. It's very uncommon to actually need this column outside of the context of job details, so defer it. see: https://github.com/ansible/ansible-tower/issues/7568
This commit is contained in:
parent
bd088d31ca
commit
bd42dfe474
@ -105,7 +105,14 @@ def get_user_capabilities(user, instance, **kwargs):
|
||||
convenient for the user interface to consume and hide or show various
|
||||
actions in the interface.
|
||||
'''
|
||||
access_class = access_registry[instance.__class__]
|
||||
cls = instance.__class__
|
||||
# When `.defer()` is used w/ the Django ORM, the result is a subclass of
|
||||
# the original that represents e.g.,
|
||||
# awx.main.models.ad_hoc_commands.AdHocCommand_Deferred_result_stdout_text
|
||||
# We want to do the access registry lookup keyed on the base class name.
|
||||
if getattr(cls, '_deferred', False):
|
||||
cls = instance.__class__.__bases__[0]
|
||||
access_class = access_registry[cls]
|
||||
return access_class(user).get_user_capabilities(instance, **kwargs)
|
||||
|
||||
|
||||
@ -2071,6 +2078,7 @@ class UnifiedJobAccess(BaseAccess):
|
||||
# 'job_template__project',
|
||||
# 'job_template__credential',
|
||||
#)
|
||||
qs = qs.defer('result_stdout_text')
|
||||
return qs.all()
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user