Skip to content

runners GraphQL query is querying for tags even if not requested by user

Summary

Steps to reproduce

The following query is causing tags to be queries for the runners, even though the user is not requesting them:

query getRunners {
  runners {
    edges {
      node {
        id
      }
    }
  }
}

What is the current bug behavior?

Resulting queries:

  Ci::Runner Load (0.3ms)  SELECT "ci_runners".* FROM "ci_runners" ORDER BY "ci_runners"."created_at" DESC, "ci_runners"."id" DESC LIMIT 100 /*application:web,correlation_id:b2f5c7cf-fb2f-420a-b0c9-71596c74a04d,endpoint_id:GraphqlController#execute,line:/lib/gitlab/graphql/pagination/keyset/connection.rb:108:in `nodes'*/
  ↳ lib/gitlab/graphql/pagination/keyset/connection.rb:108:in `nodes'
  ActsAsTaggableOn::Tagging Load (0.3ms)  SELECT "taggings".* FROM "taggings" WHERE "taggings"."taggable_type" = 'Ci::Runner' AND "taggings"."context" = 'tags' AND "taggings"."taggable_id" IN (24, 2) /*application:web,correlation_id:b2f5c7cf-fb2f-420a-b0c9-71596c74a04d,endpoint_id:GraphqlController#execute,line:/lib/gitlab/graphql/pagination/keyset/connection.rb:108:in `nodes'*/
  ↳ lib/gitlab/graphql/pagination/keyset/connection.rb:108:in `nodes'
  ActsAsTaggableOn::Tag Load (0.3ms)  SELECT "tags".* FROM "tags" WHERE "tags"."id" IN (3, 2, 1, 4) /*application:web,correlation_id:b2f5c7cf-fb2f-420a-b0c9-71596c74a04d,endpoint_id:GraphqlController#execute,line:/lib/gitlab/graphql/pagination/keyset/connection.rb:108:in `nodes'*/
  ↳ lib/gitlab/graphql/pagination/keyset/connection.rb:108:in `nodes'

What is the expected correct behavior?

Resulting queries:

  Ci::Runner Load (0.3ms)  SELECT "ci_runners".* FROM "ci_runners" ORDER BY "ci_runners"."created_at" DESC, "ci_runners"."id" DESC LIMIT 100 /*application:web,correlation_id:b2f5c7cf-fb2f-420a-b0c9-71596c74a04d,endpoint_id:GraphqlController#execute,line:/lib/gitlab/graphql/pagination/keyset/connection.rb:108:in `nodes'*/
  ↳ lib/gitlab/graphql/pagination/keyset/connection.rb:108:in `nodes'

Possible fixes

Only execute @runners.with_tags if tags have been requested.