awx
awx copied to clipboard
Slow queries trying to view related activity stream for objects as normal user
Please confirm the following
- [X] I agree to follow this project's code of conduct.
- [X] I have checked the current issues for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
Bug Summary
If you try to visit the activity stream for an object like /api/v2/execution_environments/3/activity_stream/, the request will take a long time due to postgres activity.
AWX version
devel
Select the relevant components
- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
Installation method
docker development environment
Modifications
no
Ansible version
N/A
Operating system
N/A
Web browser
Chrome
Steps to reproduce
Even with very few objects loaded into the system (3 EEs, just about 20 JTs, 80 jobs) visit the related activity_stream endpoint mentioned as a user who:
- is not an org admin
- had admin_role to 1 job template
- member of Default organization
Expected results
Takes less than 1 second DB time.
Actual results
tools_postgres_1 | 2022-09-12 20:17:33.655 UTC [3568] LOG: duration: 7350.087 ms
Additional information
the query:
SELECT Count(*)
FROM (SELECT DISTINCT "main_activitystream"."id" AS Col1
,
"main_activitystream"."actor_id" AS Col2
,
"main_activitystream"."operation" AS Col3,
"main_activitystream"."timestamp" AS Col4,
"main_activitystream"."changes" AS Col5,
"main_activitystream"."deleted_actor" AS Col6,
"main_activitystream"."action_node" AS Col7,
"main_activitystream"."object_relationship_type" AS Col8,
"main_activitystream"."object1" AS Col9,
"main_activitystream"."object2" AS Col10,
"main_activitystream"."setting" AS Col11
FROM "main_activitystream"
LEFT OUTER JOIN "main_activitystream_ad_hoc_command"
ON ( "main_activitystream"."id" =
"main_activitystream_ad_hoc_command"."activitystream_id" )
LEFT OUTER JOIN "main_adhoccommand"
ON ( "main_activitystream_ad_hoc_command"."adhoccommand_id"
=
"main_adhoccommand"."unifiedjob_ptr_id" )
LEFT OUTER JOIN "main_activitystream_o_auth2_application"
ON ( "main_activitystream"."id" =
"main_activitystream_o_auth2_application"."activitystream_id" )
LEFT OUTER JOIN "main_activitystream_o_auth2_access_token"
ON ( "main_activitystream"."id" =
"main_activitystream_o_auth2_access_token"."activitystream_id" )
LEFT OUTER JOIN "main_activitystream_user"
ON ( "main_activitystream"."id" =
"main_activitystream_user"."activitystream_id" )
LEFT OUTER JOIN "main_activitystream_organization"
ON ( "main_activitystream"."id" =
"main_activitystream_organization"."activitystream_id" )
LEFT OUTER JOIN "main_activitystream_inventory"
ON ( "main_activitystream"."id" =
"main_activitystream_inventory"."activitystream_id" )
LEFT OUTER JOIN "main_activitystream_host"
ON ( "main_activitystream"."id" =
"main_activitystream_host"."activitystream_id" )
LEFT OUTER JOIN "main_host"
ON ( "main_activitystream_host"."host_id" = "main_host"."id" )
LEFT OUTER JOIN "main_activitystream_group"
ON ( "main_activitystream"."id" =
"main_activitystream_group"."activitystream_id" )
LEFT OUTER JOIN "main_group"
ON ( "main_activitystream_group"."group_id" = "main_group"."id" )
LEFT OUTER JOIN "main_activitystream_inventory_source"
ON ( "main_activitystream"."id" =
"main_activitystream_inventory_source"."activitystream_id" )
LEFT OUTER JOIN "main_inventorysource"
ON ( "main_activitystream_inventory_source"."inventorysource_id" =
"main_inventorysource"."unifiedjobtemplate_ptr_id" )
LEFT OUTER JOIN "main_activitystream_inventory_update"
ON ( "main_activitystream"."id" =
"main_activitystream_inventory_update"."activitystream_id" )
LEFT OUTER JOIN "main_inventoryupdate"
ON ( "main_activitystream_inventory_update"."inventoryupdate_id" =
"main_inventoryupdate"."unifiedjob_ptr_id" )
LEFT OUTER JOIN "main_inventorysource" T26
ON ( "main_inventoryupdate"."inventory_source_id" =
T26."unifiedjobtemplate_ptr_id" )
LEFT OUTER JOIN "main_activitystream_credential"
ON ( "main_activitystream"."id" =
"main_activitystream_credential"."activitystream_id" )
LEFT OUTER JOIN "main_activitystream_team"
ON ( "main_activitystream"."id" =
"main_activitystream_team"."activitystream_id" )
LEFT OUTER JOIN "main_activitystream_project"
ON ( "main_activitystream"."id" =
"main_activitystream_project"."activitystream_id" )
LEFT OUTER JOIN "main_activitystream_project_update"
ON ( "main_activitystream"."id" =
"main_activitystream_project_update"."activitystream_id" )
LEFT OUTER JOIN "main_projectupdate"
ON ( "main_activitystream_project_update"."projectupdate_id" =
"main_projectupdate"."unifiedjob_ptr_id" )
LEFT OUTER JOIN "main_activitystream_job_template"
ON ( "main_activitystream"."id" =
"main_activitystream_job_template"."activitystream_id" )
LEFT OUTER JOIN "main_activitystream_job"
ON ( "main_activitystream"."id" =
"main_activitystream_job"."activitystream_id" )
LEFT OUTER JOIN "main_job"
ON ( "main_activitystream_job"."job_id" =
"main_job"."unifiedjob_ptr_id" )
LEFT OUTER JOIN "main_activitystream_workflow_job_template"
ON ( "main_activitystream"."id" =
"main_activitystream_workflow_job_template"."activitystream_id" )
LEFT OUTER JOIN "main_activitystream_workflow_job_template_node"
ON ( "main_activitystream"."id" =
"main_activitystream_workflow_job_template_node"."activitystream_id" )
LEFT OUTER JOIN "main_workflowjobtemplatenode"
ON (
"main_activitystream_workflow_job_template_node"."workflowjobtemplatenode_id"
=
"main_workflowjobtemplatenode"."id" )
LEFT OUTER JOIN "main_activitystream_workflow_job"
ON ( "main_activitystream"."id" =
"main_activitystream_workflow_job"."activitystream_id" )
LEFT OUTER JOIN "main_workflowjob"
ON ( "main_activitystream_workflow_job"."workflowjob_id" =
"main_workflowjob"."unifiedjob_ptr_id" )
LEFT OUTER JOIN "main_activitystream_notification_template"
ON ( "main_activitystream"."id" =
"main_activitystream_notification_template"."activitystream_id" )
LEFT OUTER JOIN "main_notificationtemplate"
ON (
"main_activitystream_notification_template"."notificationtemplate_id" =
"main_notificationtemplate"."id" )
LEFT OUTER JOIN "main_activitystream_notification"
ON ( "main_activitystream"."id" =
"main_activitystream_notification"."activitystream_id" )
LEFT OUTER JOIN "main_notification"
ON ( "main_activitystream_notification"."notification_id" =
"main_notification"."id" )
LEFT OUTER JOIN "main_notificationtemplate" T55
ON ( "main_notification"."notification_template_id" = T55."id" )
LEFT OUTER JOIN "main_activitystream_label"
ON ( "main_activitystream"."id" =
"main_activitystream_label"."activitystream_id" )
LEFT OUTER JOIN "main_label"
ON ( "main_activitystream_label"."label_id" = "main_label"."id" )
LEFT OUTER JOIN "main_activitystream_role"
ON ( "main_activitystream"."id" =
"main_activitystream_role"."activitystream_id" )
INNER JOIN "main_activitystream_execution_environment"
ON ( "main_activitystream"."id" =
"main_activitystream_execution_environment"."activitystream_id" )
WHERE ( ( "main_adhoccommand"."inventory_id" IN (SELECT W0."id"
FROM "main_inventory" W0
WHERE
W0."id" IN (SELECT DISTINCT
V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN (SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN
"main_rbac_roles_members" U1
ON ( U0."id" =
U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 34
AND V0."role_field" = 'read_role' )
))
OR "main_activitystream_o_auth2_application"."oauth2application_id"
IN
(SELECT X0."id"
FROM
"main_oauth2application" X0
WHERE
X0."organization_id" IN (SELECT W0."id"
FROM "main_organization" W0
WHERE
W0."id" IN (SELECT DISTINCT
V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN (SELECT
U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN
"main_rbac_roles_members"
U1
ON (
U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" =
37
AND V0."role_field" =
'member_role' ))))
OR
"main_activitystream_o_auth2_access_token"."oauth2accesstoken_id" IN
(SELECT V0."id"
FROM
"main_oauth2accesstoken" V0
LEFT OUTER JOIN "main_oauth2application" V1
ON ( V0."application_id" = V1."id" )
WHERE
(
V1."organization_id" IN (SELECT U0."id"
FROM "main_organization" U0
LEFT OUTER JOIN "main_rbac_roles" U1
ON ( U0."admin_role_id"
=
U1."id" )
LEFT OUTER JOIN "main_rbac_roles_members" U2
ON ( U1."id" = U2."role_id" )
LEFT OUTER JOIN "main_rbac_roles" U4
ON ( U0."auditor_role_id" =
U4."id" )
LEFT OUTER JOIN "main_rbac_roles_members" U5
ON ( U4."id" = U5."role_id" )
WHERE ( U2."user_id" = 4
OR U5."user_id" = 4 ))
OR V0."user_id" = 4 ))
OR "main_activitystream_user"."user_id" IN
(SELECT DISTINCT W2."user_id"
FROM "main_organization" W0
LEFT OUTER JOIN "main_rbac_roles" W1
ON ( W0."member_role_id" = W1."id" )
LEFT OUTER JOIN "main_rbac_roles_members" W2
ON ( W1."id" = W2."role_id" )
WHERE (
W0."id" IN (SELECT DISTINCT
V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN
(SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 37
AND V0."role_field" = 'admin_role' ))
OR W0."id" IN (SELECT DISTINCT V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN (SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN
"main_rbac_roles_members" U1
ON ( U0."id" =
U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 37
AND V0."role_field" =
'auditor_role' )) ))
OR "main_activitystream_user"."user_id" = 4
OR "main_activitystream_organization"."organization_id" IN
(SELECT DISTINCT W0."id"
FROM
"main_organization" W0
WHERE
(
W0."id" IN (SELECT DISTINCT V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN
(SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 37
AND V0."role_field" = 'admin_role' ))
OR W0."id" IN (SELECT DISTINCT V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN (SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN
"main_rbac_roles_members" U1
ON ( U0."id" =
U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 37
AND V0."role_field" =
'auditor_role' )) ))
OR "main_activitystream_inventory"."inventory_id" IN
(SELECT W0."id"
FROM
"main_inventory" W0
WHERE
W0."id" IN (SELECT DISTINCT V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN
(SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 34
AND V0."role_field" = 'read_role' )))
OR "main_host"."inventory_id" IN (SELECT W0."id"
FROM "main_inventory" W0
WHERE
W0."id" IN (SELECT DISTINCT V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN
(SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 34
AND V0."role_field" = 'read_role' )))
OR "main_group"."inventory_id" IN (SELECT W0."id"
FROM "main_inventory" W0
WHERE
W0."id" IN (SELECT DISTINCT
V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN
(SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 34
AND V0."role_field" = 'read_role' )))
OR "main_inventorysource"."inventory_id" IN (SELECT W0."id"
FROM
"main_inventory" W0
WHERE
W0."id" IN (SELECT DISTINCT
V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN
(SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 34
AND V0."role_field" = 'read_role' )))
OR T26."inventory_id" IN (SELECT W0."id"
FROM "main_inventory" W0
WHERE
W0."id" IN (SELECT DISTINCT V0."object_id"
FROM "main_rbac_role_ancestors"
V0
WHERE ( V0."ancestor_id" IN (
SELECT
U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN
"main_rbac_roles_members"
U1
ON (
U0."id" = U1."role_id" )
WHERE
U1."user_id" =
4)
AND V0."content_type_id"
= 34
AND V0."role_field" =
'read_role' )))
OR "main_activitystream_credential"."credential_id" IN
(SELECT W0."id"
FROM
"main_credential" W0
WHERE
W0."id" IN (SELECT DISTINCT V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN
(SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 29
AND V0."role_field" = 'read_role' )))
OR "main_activitystream_team"."team_id" IN (SELECT W0."id"
FROM "main_team" W0
WHERE
W0."id" IN (SELECT DISTINCT
V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN
(SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 40
AND V0."role_field" = 'read_role' )))
OR "main_activitystream_project"."project_id" IN
(SELECT W0."unifiedjobtemplate_ptr_id"
FROM "main_project" W0
WHERE
W0."unifiedjobtemplate_ptr_id" IN
(SELECT DISTINCT V0."object_id"
FROM
"main_rbac_role_ancestors" V0
WHERE (
V0."ancestor_id" IN (SELECT U0."id"
FROM "main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members"
U1
ON ( U0."id" =
U1."role_id" )
WHERE U1."user_id" = 4)
AND V0."content_type_id" = 5
AND V0."role_field" = 'read_role' )))
OR "main_projectupdate"."project_id" IN
(SELECT W0."unifiedjobtemplate_ptr_id"
FROM "main_project" W0
WHERE
W0."unifiedjobtemplate_ptr_id" IN
(SELECT DISTINCT V0."object_id"
FROM
"main_rbac_role_ancestors" V0
WHERE (
V0."ancestor_id" IN (SELECT U0."id"
FROM "main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members"
U1
ON ( U0."id" =
U1."role_id" )
WHERE U1."user_id" = 4)
AND V0."content_type_id" = 5
AND V0."role_field" = 'read_role' )))
OR "main_activitystream_job_template"."jobtemplate_id" IN
(SELECT W0."unifiedjobtemplate_ptr_id"
FROM
"main_jobtemplate" W0
WHERE
W0."unifiedjobtemplate_ptr_id" IN
(SELECT DISTINCT V0."object_id"
FROM
"main_rbac_role_ancestors" V0
WHERE (
V0."ancestor_id" IN (SELECT U0."id"
FROM "main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members"
U1
ON ( U0."id" =
U1."role_id" )
WHERE U1."user_id" = 4)
AND V0."content_type_id" = 4
AND V0."role_field" = 'read_role' )))
OR "main_job"."job_template_id" IN
(SELECT W0."unifiedjobtemplate_ptr_id"
FROM "main_jobtemplate" W0
WHERE
W0."unifiedjobtemplate_ptr_id" IN
(SELECT DISTINCT V0."object_id"
FROM
"main_rbac_role_ancestors" V0
WHERE (
V0."ancestor_id" IN (SELECT U0."id"
FROM "main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members"
U1
ON ( U0."id" =
U1."role_id" )
WHERE U1."user_id" = 4)
AND V0."content_type_id" = 4
AND V0."role_field" = 'read_role' )))
OR
"main_activitystream_workflow_job_template"."workflowjobtemplate_id" IN
(
SELECT
W0."unifiedjobtemplate_ptr_id"
FROM
"main_workflowjobtemplate" W0
WHERE
W0."unifiedjobtemplate_ptr_id" IN (SELECT DISTINCT V0."object_id"
FROM
"main_rbac_role_ancestors" V0
WHERE (
V0."ancestor_id" IN (SELECT U0."id"
FROM "main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members"
U1
ON ( U0."id" =
U1."role_id" )
WHERE U1."user_id" = 4)
AND V0."content_type_id" = 6
AND V0."role_field" = 'read_role' )))
OR "main_workflowjobtemplatenode"."workflow_job_template_id" IN
(SELECT W0."unifiedjobtemplate_ptr_id"
FROM
"main_workflowjobtemplate" W0
WHERE
W0."unifiedjobtemplate_ptr_id" IN
(SELECT DISTINCT V0."object_id"
FROM
"main_rbac_role_ancestors" V0
WHERE (
V0."ancestor_id" IN (SELECT U0."id"
FROM "main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members"
U1
ON ( U0."id" =
U1."role_id" )
WHERE U1."user_id" = 4)
AND V0."content_type_id" = 6
AND V0."role_field" = 'read_role' )))
OR "main_workflowjob"."workflow_job_template_id" IN
(SELECT W0."unifiedjobtemplate_ptr_id"
FROM
"main_workflowjobtemplate" W0
WHERE
W0."unifiedjobtemplate_ptr_id" IN
(SELECT DISTINCT V0."object_id"
FROM
"main_rbac_role_ancestors" V0
WHERE (
V0."ancestor_id" IN (SELECT U0."id"
FROM "main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members"
U1
ON ( U0."id" =
U1."role_id" )
WHERE U1."user_id" = 4)
AND V0."content_type_id" = 6
AND V0."role_field" = 'read_role' )))
OR "main_notificationtemplate"."organization_id" IN
(SELECT DISTINCT W0."id"
FROM
"main_organization" W0
WHERE (
W0."id" IN (SELECT DISTINCT V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN
(SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 37
AND V0."role_field" = 'admin_role' ))
OR W0."id" IN (SELECT DISTINCT V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN (SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN
"main_rbac_roles_members" U1
ON ( U0."id" =
U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 37
AND V0."role_field" =
'auditor_role' )) ))
OR T55."organization_id" IN (SELECT DISTINCT W0."id"
FROM "main_organization" W0
WHERE ( W0."id" IN
(SELECT DISTINCT
V0."object_id"
FROM
"main_rbac_role_ancestors"
V0
WHERE
( V0."ancestor_id"
IN
(
SELECT
U0."id"
FROM
"main_rbac_roles"
U0
INNER
JOIN
"main_rbac_roles_members" U1
ON (
U0."id"
=
U1."role_id" )
WHERE
U1."user_id" = 4
)
AND
V0."content_type_id"
= 37
AND
V0."role_field"
=
'admin_role' ))
OR W0."id" IN
(SELECT DISTINCT
V0."object_id"
FROM
"main_rbac_role_ancestors" V0
WHERE
( V0."ancestor_id"
IN
(SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN
"main_rbac_roles_members" U1
ON
(
U0."id" = U1."role_id" )
WHERE
U1."user_id" =
4)
AND
V0."content_type_id" =
37
AND
V0."role_field"
= 'auditor_role'
)) ))
OR "main_label"."organization_id" IN (SELECT DISTINCT W0."id"
FROM "main_organization" W0
WHERE (
W0."id" IN (SELECT DISTINCT
V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN (SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE U1."user_id" = 4)
AND V0."content_type_id" = 37
AND V0."role_field" = 'admin_role' ))
OR W0."id" IN (SELECT DISTINCT V0."object_id"
FROM "main_rbac_role_ancestors" V0
WHERE ( V0."ancestor_id" IN (SELECT U0."id"
FROM
"main_rbac_roles" U0
INNER JOIN "main_rbac_roles_members" U1
ON ( U0."id" = U1."role_id" )
WHERE
U1."user_id" = 4)
AND V0."content_type_id" = 37
AND V0."role_field" = 'auditor_role' )) ))
)
AND "main_activitystream_execution_environment"."executionenvironment_id" = 3 ))
subquery