Broken master: Project.cluster_agents selecting activity events preloads associations to prevent N+1 queries
First seen in https://gitlab.com/gitlab-org/gitlab/-/jobs/2001422344, although the change looks unrelated
Failures:
1) Project.cluster_agents selecting activity events preloads associations to prevent N+1 queries
Failure/Error:
expect do
post_graphql(query, current_user: current_user)
end.to issue_same_number_of_queries_as { post_graphql(query, current_user: current_user, variables: [first.with(1)]) }
Expected 16 queries, but got 20
SELECT "personal_access_tokens".* FROM "personal_access_tokens" WHERE "personal_access_tokens"."token_digest" = '/v3dbfkGW6ip23pwt/Vgp8tCB7gowkr6GwxqeL43o78=' LIMIT 1 /*application:test,correlation_id:fbd864640f6ee65e1f702b4c2b23a86d,db_config_name:main*/
SAVEPOINT active_record_3 /*application:test,correlation_id:fbd864640f6ee65e1f702b4c2b23a86d,db_config_name:main*/
INSERT INTO "personal_access_tokens" ("user_id", "name", "expires_at", "created_at", "updated_at", "scopes", "token_digest") VALUES (1318, 'PAT 1395', '2022-01-26', '2022-01-21 13:38:52.402852', '2022-01-21 13:38:52.402852', '---
- api
', '/v3dbfkGW6ip23pwt/Vgp8tCB7gowkr6GwxqeL43o78=') RETURNING "id" /*application:test,correlation_id:fbd864640f6ee65e1f702b4c2b23a86d,db_config_name:main*/
RELEASE SAVEPOINT active_record_3 /*application:test,correlation_id:fbd864640f6ee65e1f702b4c2b23a86d,db_config_name:main*/
SELECT "personal_access_tokens".* FROM "personal_access_tokens" WHERE "personal_access_tokens"."token_digest" = '/v3dbfkGW6ip23pwt/Vgp8tCB7gowkr6GwxqeL43o78=' LIMIT 1 /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "licenses".* FROM "licenses" ORDER BY "licenses"."id" DESC LIMIT 100 /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT 1 AS one FROM "geo_nodes" LIMIT 1 /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
UPDATE "personal_access_tokens" SET "last_used_at" = '2022-01-21 13:38:52.446238' WHERE "personal_access_tokens"."id" = 1397 /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "users".* FROM "users" WHERE "users"."id" = 1318 LIMIT 1 /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "projects"."id" AS t0_r0, "projects"."name" AS t0_r1, "projects"."path" AS t0_r2, "projects"."description" AS t0_r3, "projects"."created_at" AS t0_r4, "projects"."updated_at" AS t0_r5, "projects"."creator_id" AS t0_r6, "projects"."namespace_id" AS t0_r7, "projects"."last_activity_at" AS t0_r8, "projects"."import_url" AS t0_r9, "projects"."visibility_level" AS t0_r10, "projects"."archived" AS t0_r11, "projects"."avatar" AS t0_r12, "projects"."merge_requests_template" AS t0_r13, "projects"."star_count" AS t0_r14, "projects"."merge_requests_rebase_enabled" AS t0_r15, "projects"."import_type" AS t0_r16, "projects"."import_source" AS t0_r17, "projects"."approvals_before_merge" AS t0_r18, "projects"."reset_approvals_on_push" AS t0_r19, "projects"."merge_requests_ff_only_enabled" AS t0_r20, "projects"."issues_template" AS t0_r21, "projects"."mirror" AS t0_r22, "projects"."mirror_user_id" AS t0_r23, "projects"."shared_runners_enabled" AS t0_r24, "projects"."runners_token" AS t0_r25, "projects"."build_coverage_regex" AS t0_r26, "projects"."build_allow_git_fetch" AS t0_r27, "projects"."build_timeout" AS t0_r28, "projects"."mirror_trigger_builds" AS t0_r29, "projects"."pending_delete" AS t0_r30, "projects"."public_builds" AS t0_r31, "projects"."last_repository_check_failed" AS t0_r32, "projects"."last_repository_check_at" AS t0_r33, "projects"."only_allow_merge_if_pipeline_succeeds" AS t0_r34, "projects"."has_external_issue_tracker" AS t0_r35, "projects"."repository_storage" AS t0_r36, "projects"."repository_read_only" AS t0_r37, "projects"."request_access_enabled" AS t0_r38, "projects"."has_external_wiki" AS t0_r39, "projects"."ci_config_path" AS t0_r40, "projects"."lfs_enabled" AS t0_r41, "projects"."description_html" AS t0_r42, "projects"."only_allow_merge_if_all_discussions_are_resolved" AS t0_r43, "projects"."repository_size_limit" AS t0_r44, "projects"."printing_merge_request_link_enabled" AS t0_r45, "projects"."auto_cancel_pending_pipelines" AS t0_r46, "projects"."service_desk_enabled" AS t0_r47, "projects"."cached_markdown_version" AS t0_r48, "projects"."delete_error" AS t0_r49, "projects"."last_repository_updated_at" AS t0_r50, "projects"."disable_overriding_approvers_per_merge_request" AS t0_r51, "projects"."storage_version" AS t0_r52, "projects"."resolve_outdated_diff_discussions" AS t0_r53, "projects"."remote_mirror_available_overridden" AS t0_r54, "projects"."only_mirror_protected_branches" AS t0_r55, "projects"."pull_mirror_available_overridden" AS t0_r56, "projects"."jobs_cache_index" AS t0_r57, "projects"."external_authorization_classification_label" AS t0_r58, "projects"."mirror_overwrites_diverged_branches" AS t0_r59, "projects"."pages_https_only" AS t0_r60, "projects"."external_webhook_token" AS t0_r61, "projects"."packages_enabled" AS t0_r62, "projects"."merge_requests_author_approval" AS t0_r63, "projects"."pool_repository_id" AS t0_r64, "projects"."runners_token_encrypted" AS t0_r65, "projects"."bfg_object_map" AS t0_r66, "projects"."detected_repository_languages" AS t0_r67, "projects"."merge_requests_disable_committers_approval" AS t0_r68, "projects"."require_password_to_approve" AS t0_r69, "projects"."emails_disabled" AS t0_r70, "projects"."max_pages_size" AS t0_r71, "projects"."max_artifacts_size" AS t0_r72, "projects"."remove_source_branch_after_merge" AS t0_r73, "projects"."marked_for_deletion_at" AS t0_r74, "projects"."marked_for_deletion_by_user_id" AS t0_r75, "projects"."autoclose_referenced_issues" AS t0_r76, "projects"."suggestion_commit_message" AS t0_r77, "projects"."project_namespace_id" AS t0_r78, "routes"."id" AS t1_r0, "routes"."source_id" AS t1_r1, "routes"."source_type" AS t1_r2, "routes"."path" AS t1_r3, "routes"."created_at" AS t1_r4, "routes"."updated_at" AS t1_r5, "routes"."name" AS t1_r6, "routes"."namespace_id" AS t1_r7 FROM "projects" LEFT OUTER JOIN "routes" ON "routes"."source_type" = 'Project' AND "routes"."source_id" = "projects"."id" WHERE ((LOWER(routes.path) = LOWER('namespace921/project1039'))) /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "namespaces"."id", "namespaces"."name", "namespaces"."path", "namespaces"."owner_id", "namespaces"."created_at", "namespaces"."updated_at", "namespaces"."type", "namespaces"."description", "namespaces"."avatar", "namespaces"."membership_lock", "namespaces"."share_with_group_lock", "namespaces"."visibility_level", "namespaces"."request_access_enabled", "namespaces"."ldap_sync_status", "namespaces"."ldap_sync_error", "namespaces"."ldap_sync_last_update_at", "namespaces"."ldap_sync_last_successful_update_at", "namespaces"."ldap_sync_last_sync_at", "namespaces"."description_html", "namespaces"."lfs_enabled", "namespaces"."parent_id", "namespaces"."shared_runners_minutes_limit", "namespaces"."repository_size_limit", "namespaces"."require_two_factor_authentication", "namespaces"."two_factor_grace_period", "namespaces"."cached_markdown_version", "namespaces"."project_creation_level", "namespaces"."runners_token", "namespaces"."file_template_project_id", "namespaces"."saml_discovery_token", "namespaces"."runners_token_encrypted", "namespaces"."custom_project_templates_group_id", "namespaces"."auto_devops_enabled", "namespaces"."extra_shared_runners_minutes_limit", "namespaces"."last_ci_minutes_notification_at", "namespaces"."last_ci_minutes_usage_notification_level", "namespaces"."subgroup_creation_level", "namespaces"."emails_disabled", "namespaces"."max_pages_size", "namespaces"."max_artifacts_size", "namespaces"."mentions_disabled", "namespaces"."default_branch_protection", "namespaces"."unlock_membership_to_ldap", "namespaces"."max_personal_access_token_lifetime", "namespaces"."push_rule_id", "namespaces"."shared_runners_enabled", "namespaces"."allow_descendants_override_disabled_shared_runners", "namespaces"."traversal_ids" FROM "namespaces" WHERE "namespaces"."type" = 'Group' AND "namespaces"."id" = 2165 LIMIT 1 /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "project_features".* FROM "project_features" WHERE "project_features"."project_id" = 657 LIMIT 1 /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT MAX("project_authorizations"."access_level") AS maximum_access_level, "project_authorizations"."user_id" AS project_authorizations_user_id FROM "project_authorizations" WHERE "project_authorizations"."project_id" = 657 AND "project_authorizations"."user_id" = 1318 GROUP BY "project_authorizations"."user_id" /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "cluster_agents".* FROM "cluster_agents" WHERE "cluster_agents"."project_id" = 657 ORDER BY "cluster_agents"."name" ASC, "cluster_agents"."id" DESC LIMIT 100 /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "agent_activity_events".* FROM "agent_activity_events" WHERE "agent_activity_events"."agent_id" IN (10, 8, 9) ORDER BY "agent_activity_events"."recorded_at" DESC, "agent_activity_events"."id" DESC /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "users".* FROM "users" WHERE "users"."id" IN (1325, 1318) /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "cluster_agent_tokens".* FROM "cluster_agent_tokens" WHERE "cluster_agent_tokens"."id" IN (14, 10) /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "cluster_agents".* FROM "cluster_agents" WHERE "cluster_agents"."id" IN (8, 9) /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT "namespaces"."id", "namespaces"."name", "namespaces"."path", "namespaces"."owner_id", "namespaces"."created_at", "namespaces"."updated_at", "namespaces"."type", "namespaces"."description", "namespaces"."avatar", "namespaces"."membership_lock", "namespaces"."share_with_group_lock", "namespaces"."visibility_level", "namespaces"."request_access_enabled", "namespaces"."ldap_sync_status", "namespaces"."ldap_sync_error", "namespaces"."ldap_sync_last_update_at", "namespaces"."ldap_sync_last_successful_update_at", "namespaces"."ldap_sync_last_sync_at", "namespaces"."description_html", "namespaces"."lfs_enabled", "namespaces"."parent_id", "namespaces"."shared_runners_minutes_limit", "namespaces"."repository_size_limit", "namespaces"."require_two_factor_authentication", "namespaces"."two_factor_grace_period", "namespaces"."cached_markdown_version", "namespaces"."project_creation_level", "namespaces"."runners_token", "namespaces"."file_template_project_id", "namespaces"."saml_discovery_token", "namespaces"."runners_token_encrypted", "namespaces"."custom_project_templates_group_id", "namespaces"."auto_devops_enabled", "namespaces"."extra_shared_runners_minutes_limit", "namespaces"."last_ci_minutes_notification_at", "namespaces"."last_ci_minutes_usage_notification_level", "namespaces"."subgroup_creation_level", "namespaces"."emails_disabled", "namespaces"."max_pages_size", "namespaces"."max_artifacts_size", "namespaces"."mentions_disabled", "namespaces"."default_branch_protection", "namespaces"."unlock_membership_to_ldap", "namespaces"."max_personal_access_token_lifetime", "namespaces"."push_rule_id", "namespaces"."shared_runners_enabled", "namespaces"."allow_descendants_override_disabled_shared_runners", "namespaces"."traversal_ids" FROM "namespaces" WHERE "namespaces"."id" = 2165 LIMIT 1 /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
SELECT COUNT(*) AS count_all, "user_id" AS user_id FROM ((SELECT namespaces.*, members.user_id as user_id FROM "namespaces" INNER JOIN "members" ON "members"."source_type" = 'Namespace' AND "members"."requested_at" IS NULL AND "members"."access_level" != 5 AND "members"."source_id" = "namespaces"."id" AND "members"."type" = 'GroupMember' WHERE "namespaces"."type" = 'Group' AND "members"."user_id" = 1318 AND (access_level >= 10))
UNION
(SELECT namespaces.*, project_authorizations.user_id as user_id FROM "namespaces" INNER JOIN "projects" ON "projects"."namespace_id" = "namespaces"."id" INNER JOIN "project_authorizations" ON "project_authorizations"."project_id" = "projects"."id" WHERE "namespaces"."type" = 'Group' AND "project_authorizations"."user_id" = 1318)) namespaces GROUP BY "user_id" /*application:test,correlation_id:4ec3a6fb-bb1d-4fff-a19e-afbdd5637338,endpoint_id:GraphqlController#execute,db_config_name:main*/
# ./spec/requests/api/graphql/project/cluster_agents_spec.rb:136:in `block (3 levels) in <top (required)>'
# ./spec/spec_helper.rb:406:in `block (3 levels) in <top (required)>'
# ./spec/support/sidekiq_middleware.rb:9:in `with_sidekiq_server_middleware'
# ./spec/spec_helper.rb:397:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:393:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/application_context.rb:31:in `with_raw_context'
# ./spec/spec_helper.rb:393:in `block (2 levels) in <top (required)>'
# ./spec/support/system_exit_detected.rb:7:in `block (2 levels) in <top (required)>'
# ./spec/support/flaky_tests.rb:27:in `block (2 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (3 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:60:in `with_cross_joins_prevented'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (2 levels) in <top (required)>'
Finished in 22 minutes 37 seconds (files took 1 minute 2.47 seconds to load)
3370 examples, 1 failure, 1 pending
Failed examples:
rspec ./spec/requests/api/graphql/project/cluster_agents_spec.rb:129 # Project.cluster_agents selecting activity events preloads associations to prevent N+1 queries