[0KRunning with gitlab-runner 10.7.0 (7c273476) [0;m[0K on docker-auto-scale-com 9538b0ab [0;m[0KUsing Docker executor with image dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3.7-golang-1.9-git-2.17-chrome-65.0-node-8.x-yarn-1.2-postgresql-9.6 ... [0;m[0KStarting service postgres:9.2 ... [0;m[0KPulling docker image postgres:9.2 ... [0;m[0KUsing docker image sha256:18cdbca56093c841d28e629eb8acd4224afe0aa4c57c839351fc181888b8a470 for postgres:9.2 ... [0;m[0KStarting service redis:alpine ... [0;m[0KPulling docker image redis:alpine ... [0;m[0KUsing docker image sha256:98bd7cfc43b8ef0ff130465e3d5427c0771002c2f35a6a9b62cb2d04602bed0a for redis:alpine ... [0;m[0KStarting service docker.elastic.co/elasticsearch/elasticsearch:5.5.2 ... [0;m[0KPulling docker image docker.elastic.co/elasticsearch/elasticsearch:5.5.2 ... [0;m[0KUsing docker image sha256:ca27036dd5e7fb5aaaa0401342f8160aaff408422cd3b19af85be83478256745 for docker.elastic.co/elasticsearch/elasticsearch:5.5.2 ... [0;m[0KWaiting for services to be up and running... [0;m[0KPulling docker image dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3.7-golang-1.9-git-2.17-chrome-65.0-node-8.x-yarn-1.2-postgresql-9.6 ... [0;m[0KUsing docker image sha256:fdb36b9f5c89bf331a5884b2bc013addfeac245b65b8051a0e6652fb6d46f8a9 for dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3.7-golang-1.9-git-2.17-chrome-65.0-node-8.x-yarn-1.2-postgresql-9.6 ... [0;msection_start:1525273472:prepare_script [0KRunning on runner-9538b0ab-project-278964-concurrent-0 via runner-9538b0ab-gsrm-1525271893-9b9aa440... section_end:1525273474:prepare_script [0Ksection_start:1525273474:get_sources [0K[32;1mCloning repository for 5841-geo-basesyncservice-should-prune-the-geo-temporary-directory-before-fetching with git depth set to 20...[0;m Cloning into '/builds/gitlab-org/gitlab-ee'... [32;1mChecking out 73af10c1 as 5841-geo-basesyncservice-should-prune-the-geo-temporary-directory-before-fetching...[0;m [32;1mSkipping Git submodules setup[0;m section_end:1525273495:get_sources [0Ksection_start:1525273495:restore_cache [0K[32;1mChecking cache for ruby-2.3.7-with-yarn...[0;m Downloading cache.zip from http://runners-cache-4-internal.gitlab.com:444/runner/project/278964/ruby-2.3.7-with-yarn[0;m [32;1mSuccessfully extracted cache[0;m section_end:1525273515:restore_cache [0Ksection_start:1525273515:download_artifacts [0K[32;1mDownloading artifacts for retrieve-tests-metadata (66066850)...[0;m Downloading artifacts from coordinator... ok [0;m id[0;m=66066850 responseStatus[0;m=200 OK token[0;m=gcRYWULP [32;1mDownloading artifacts for compile-assets (66066853)...[0;m Downloading artifacts from coordinator... ok [0;m id[0;m=66066853 responseStatus[0;m=200 OK token[0;m=ZUdCpByW [32;1mDownloading artifacts for setup-test-env (66066854)...[0;m Downloading artifacts from coordinator... ok [0;m id[0;m=66066854 responseStatus[0;m=200 OK token[0;m=S7SxDrPM [0;33mWARNING: tmp/tests/gitlab-shell/.gitlab_shell_secret: chmod tmp/tests/gitlab-shell/.gitlab_shell_secret: no such file or directory (suppressing repeats)[0;m section_end:1525273553:download_artifacts [0Ksection_start:1525273553:build_script [0K[32;1m$ bundle --version[0;m Bundler version 1.16.1 [32;1m$ date[0;m Wed May 2 15:05:54 UTC 2018 [32;1m$ source scripts/utils.sh[0;m [32;1m$ date[0;m Wed May 2 15:05:54 UTC 2018 [32;1m$ source scripts/prepare_build.sh[0;m The Gemfile's dependencies are satisfied Successfully installed knapsack-1.16.0 1 gem installed DROP DATABASE NOTICE: database "gitlabhq_test" does not exist, skipping CREATE DATABASE CREATE ROLE GRANT -- enable_extension("plpgsql") -> 0.0105s -- enable_extension("pg_trgm") -> 0.0107s -- create_table("abuse_reports", {:force=>:cascade}) -> 0.0097s -- create_table("appearances", {:force=>:cascade}) -> 0.0066s -- create_table("application_settings", {:force=>:cascade}) -> 0.0376s -- create_table("approvals", {:force=>:cascade}) -> 0.0046s -- add_index("approvals", ["merge_request_id"], {:name=>"index_approvals_on_merge_request_id", :using=>:btree}) -> 0.0043s -- create_table("approver_groups", {:force=>:cascade}) -> 0.0062s -- add_index("approver_groups", ["group_id"], {:name=>"index_approver_groups_on_group_id", :using=>:btree}) -> 0.0040s -- add_index("approver_groups", ["target_id", "target_type"], {:name=>"index_approver_groups_on_target_id_and_target_type", :using=>:btree}) -> 0.0038s -- create_table("approvers", {:force=>:cascade}) -> 0.0058s -- add_index("approvers", ["target_id", "target_type"], {:name=>"index_approvers_on_target_id_and_target_type", :using=>:btree}) -> 0.0040s -- add_index("approvers", ["user_id"], {:name=>"index_approvers_on_user_id", :using=>:btree}) -> 0.0037s -- create_table("audit_events", {:force=>:cascade}) -> 0.0096s -- add_index("audit_events", ["entity_id", "entity_type"], {:name=>"index_audit_events_on_entity_id_and_entity_type", :using=>:btree}) -> 0.0043s -- create_table("award_emoji", {:force=>:cascade}) -> 0.0063s -- add_index("award_emoji", ["awardable_type", "awardable_id"], {:name=>"index_award_emoji_on_awardable_type_and_awardable_id", :using=>:btree}) -> 0.0042s -- add_index("award_emoji", ["user_id", "name"], {:name=>"index_award_emoji_on_user_id_and_name", :using=>:btree}) -> 0.0040s -- create_table("badges", {:force=>:cascade}) -> 0.0067s -- add_index("badges", ["group_id"], {:name=>"index_badges_on_group_id", :using=>:btree}) -> 0.0041s -- add_index("badges", ["project_id"], {:name=>"index_badges_on_project_id", :using=>:btree}) -> 0.0043s -- create_table("board_assignees", {:force=>:cascade}) -> 0.0041s -- add_index("board_assignees", ["board_id", "assignee_id"], {:name=>"index_board_assignees_on_board_id_and_assignee_id", :unique=>true, :using=>:btree}) -> 0.0038s -- create_table("board_labels", {:force=>:cascade}) -> 0.0044s -- add_index("board_labels", ["board_id", "label_id"], {:name=>"index_board_labels_on_board_id_and_label_id", :unique=>true, :using=>:btree}) -> 0.0040s -- create_table("boards", {:force=>:cascade}) -> 0.0070s -- add_index("boards", ["group_id"], {:name=>"index_boards_on_group_id", :using=>:btree}) -> 0.0044s -- add_index("boards", ["milestone_id"], {:name=>"index_boards_on_milestone_id", :using=>:btree}) -> 0.0039s -- add_index("boards", ["project_id"], {:name=>"index_boards_on_project_id", :using=>:btree}) -> 0.0039s -- create_table("broadcast_messages", {:force=>:cascade}) -> 0.0064s -- add_index("broadcast_messages", ["starts_at", "ends_at", "id"], {:name=>"index_broadcast_messages_on_starts_at_and_ends_at_and_id", :using=>:btree}) -> 0.0039s -- create_table("chat_names", {:force=>:cascade}) -> 0.0060s -- add_index("chat_names", ["service_id", "team_id", "chat_id"], {:name=>"index_chat_names_on_service_id_and_team_id_and_chat_id", :unique=>true, :using=>:btree}) -> 0.0037s -- add_index("chat_names", ["user_id", "service_id"], {:name=>"index_chat_names_on_user_id_and_service_id", :unique=>true, :using=>:btree}) -> 0.0040s -- create_table("chat_teams", {:force=>:cascade}) -> 0.0060s -- add_index("chat_teams", ["namespace_id"], {:name=>"index_chat_teams_on_namespace_id", :unique=>true, :using=>:btree}) -> 0.0038s -- create_table("ci_build_trace_section_names", {:force=>:cascade}) -> 0.0059s -- add_index("ci_build_trace_section_names", ["project_id", "name"], {:name=>"index_ci_build_trace_section_names_on_project_id_and_name", :unique=>true, :using=>:btree}) -> 0.0039s -- create_table("ci_build_trace_sections", {:force=>:cascade}) -> 0.0045s -- add_index("ci_build_trace_sections", ["build_id", "section_name_id"], {:name=>"index_ci_build_trace_sections_on_build_id_and_section_name_id", :unique=>true, :using=>:btree}) -> 0.0039s -- add_index("ci_build_trace_sections", ["project_id"], {:name=>"index_ci_build_trace_sections_on_project_id", :using=>:btree}) -> 0.0040s -- add_index("ci_build_trace_sections", ["section_name_id"], {:name=>"index_ci_build_trace_sections_on_section_name_id", :using=>:btree}) -> 0.0038s -- create_table("ci_builds", {:force=>:cascade}) -> 0.0077s -- add_index("ci_builds", ["artifacts_expire_at"], {:name=>"index_ci_builds_on_artifacts_expire_at", :where=>"(artifacts_file <> ''::text)", :using=>:btree}) -> 0.0041s -- add_index("ci_builds", ["auto_canceled_by_id"], {:name=>"index_ci_builds_on_auto_canceled_by_id", :using=>:btree}) -> 0.0039s -- add_index("ci_builds", ["commit_id", "stage_idx", "created_at"], {:name=>"index_ci_builds_on_commit_id_and_stage_idx_and_created_at", :using=>:btree}) -> 0.0040s -- add_index("ci_builds", ["commit_id", "status", "type"], {:name=>"index_ci_builds_on_commit_id_and_status_and_type", :using=>:btree}) -> 0.0039s -- add_index("ci_builds", ["commit_id", "type", "name", "ref"], {:name=>"index_ci_builds_on_commit_id_and_type_and_name_and_ref", :using=>:btree}) -> 0.0041s -- add_index("ci_builds", ["commit_id", "type", "ref"], {:name=>"index_ci_builds_on_commit_id_and_type_and_ref", :using=>:btree}) -> 0.0040s -- add_index("ci_builds", ["project_id", "id"], {:name=>"index_ci_builds_on_project_id_and_id", :using=>:btree}) -> 0.0039s -- add_index("ci_builds", ["protected"], {:name=>"index_ci_builds_on_protected", :using=>:btree}) -> 0.0041s -- add_index("ci_builds", ["runner_id"], {:name=>"index_ci_builds_on_runner_id", :using=>:btree}) -> 0.0041s -- add_index("ci_builds", ["stage_id"], {:name=>"index_ci_builds_on_stage_id", :using=>:btree}) -> 0.0040s -- add_index("ci_builds", ["status", "type", "runner_id"], {:name=>"index_ci_builds_on_status_and_type_and_runner_id", :using=>:btree}) -> 0.0039s -- add_index("ci_builds", ["status"], {:name=>"index_ci_builds_on_status", :using=>:btree}) -> 0.0041s -- add_index("ci_builds", ["token"], {:name=>"index_ci_builds_on_token", :unique=>true, :using=>:btree}) -> 0.0041s -- add_index("ci_builds", ["updated_at"], {:name=>"index_ci_builds_on_updated_at", :using=>:btree}) -> 0.0038s -- add_index("ci_builds", ["user_id"], {:name=>"index_ci_builds_on_user_id", :using=>:btree}) -> 0.0040s -- create_table("ci_builds_metadata", {:force=>:cascade}) -> 0.0051s -- add_index("ci_builds_metadata", ["build_id"], {:name=>"index_ci_builds_metadata_on_build_id", :unique=>true, :using=>:btree}) -> 0.0040s -- add_index("ci_builds_metadata", ["project_id"], {:name=>"index_ci_builds_metadata_on_project_id", :using=>:btree}) -> 0.0040s -- create_table("ci_group_variables", {:force=>:cascade}) -> 0.0071s -- add_index("ci_group_variables", ["group_id", "key"], {:name=>"index_ci_group_variables_on_group_id_and_key", :unique=>true, :using=>:btree}) -> 0.0044s -- create_table("ci_job_artifacts", {:force=>:cascade}) -> 0.0070s -- add_index("ci_job_artifacts", ["expire_at", "job_id"], {:name=>"index_ci_job_artifacts_on_expire_at_and_job_id", :using=>:btree}) -> 0.0047s -- add_index("ci_job_artifacts", ["file_store"], {:name=>"index_ci_job_artifacts_on_file_store", :using=>:btree}) -> 0.0039s -- add_index("ci_job_artifacts", ["job_id", "file_type"], {:name=>"index_ci_job_artifacts_on_job_id_and_file_type", :unique=>true, :using=>:btree}) -> 0.0039s -- add_index("ci_job_artifacts", ["project_id"], {:name=>"index_ci_job_artifacts_on_project_id", :using=>:btree}) -> 0.0038s -- create_table("ci_pipeline_chat_data", {:id=>:bigserial, :force=>:cascade}) -> 0.0071s -- add_index("ci_pipeline_chat_data", ["pipeline_id"], {:name=>"index_ci_pipeline_chat_data_on_pipeline_id", :unique=>true, :using=>:btree}) -> 0.0041s -- create_table("ci_pipeline_schedule_variables", {:force=>:cascade}) -> 0.0065s -- add_index("ci_pipeline_schedule_variables", ["pipeline_schedule_id", "key"], {:name=>"index_ci_pipeline_schedule_variables_on_schedule_id_and_key", :unique=>true, :using=>:btree}) -> 0.0051s -- create_table("ci_pipeline_schedules", {:force=>:cascade}) -> 0.0071s -- add_index("ci_pipeline_schedules", ["next_run_at", "active"], {:name=>"index_ci_pipeline_schedules_on_next_run_at_and_active", :using=>:btree}) -> 0.0042s -- add_index("ci_pipeline_schedules", ["project_id"], {:name=>"index_ci_pipeline_schedules_on_project_id", :using=>:btree}) -> 0.0039s -- create_table("ci_pipeline_variables", {:force=>:cascade}) -> 0.0064s -- add_index("ci_pipeline_variables", ["pipeline_id", "key"], {:name=>"index_ci_pipeline_variables_on_pipeline_id_and_key", :unique=>true, :using=>:btree}) -> 0.0044s -- create_table("ci_pipelines", {:force=>:cascade}) -> 0.0071s -- add_index("ci_pipelines", ["auto_canceled_by_id"], {:name=>"index_ci_pipelines_on_auto_canceled_by_id", :using=>:btree}) -> 0.0040s -- add_index("ci_pipelines", ["pipeline_schedule_id"], {:name=>"index_ci_pipelines_on_pipeline_schedule_id", :using=>:btree}) -> 0.0039s -- add_index("ci_pipelines", ["project_id", "ref", "status", "id"], {:name=>"index_ci_pipelines_on_project_id_and_ref_and_status_and_id", :using=>:btree}) -> 0.0043s -- add_index("ci_pipelines", ["project_id", "sha"], {:name=>"index_ci_pipelines_on_project_id_and_sha", :using=>:btree}) -> 0.0043s -- add_index("ci_pipelines", ["project_id"], {:name=>"index_ci_pipelines_on_project_id", :using=>:btree}) -> 0.0041s -- add_index("ci_pipelines", ["status"], {:name=>"index_ci_pipelines_on_status", :using=>:btree}) -> 0.0038s -- add_index("ci_pipelines", ["user_id"], {:name=>"index_ci_pipelines_on_user_id", :using=>:btree}) -> 0.0039s -- create_table("ci_runner_projects", {:force=>:cascade}) -> 0.0043s -- add_index("ci_runner_projects", ["project_id"], {:name=>"index_ci_runner_projects_on_project_id", :using=>:btree}) -> 0.0039s -- add_index("ci_runner_projects", ["runner_id"], {:name=>"index_ci_runner_projects_on_runner_id", :using=>:btree}) -> 0.0039s -- create_table("ci_runners", {:force=>:cascade}) -> 0.0081s -- add_index("ci_runners", ["contacted_at"], {:name=>"index_ci_runners_on_contacted_at", :using=>:btree}) -> 0.0038s -- add_index("ci_runners", ["is_shared"], {:name=>"index_ci_runners_on_is_shared", :using=>:btree}) -> 0.0040s -- add_index("ci_runners", ["locked"], {:name=>"index_ci_runners_on_locked", :using=>:btree}) -> 0.0040s -- add_index("ci_runners", ["token"], {:name=>"index_ci_runners_on_token", :using=>:btree}) -> 0.0038s -- create_table("ci_sources_pipelines", {:force=>:cascade}) -> 0.0044s -- add_index("ci_sources_pipelines", ["pipeline_id"], {:name=>"index_ci_sources_pipelines_on_pipeline_id", :using=>:btree}) -> 0.0047s -- add_index("ci_sources_pipelines", ["project_id"], {:name=>"index_ci_sources_pipelines_on_project_id", :using=>:btree}) -> 0.0044s -- add_index("ci_sources_pipelines", ["source_job_id"], {:name=>"index_ci_sources_pipelines_on_source_job_id", :using=>:btree}) -> 0.0042s -- add_index("ci_sources_pipelines", ["source_pipeline_id"], {:name=>"index_ci_sources_pipelines_on_source_pipeline_id", :using=>:btree}) -> 0.0039s -- add_index("ci_sources_pipelines", ["source_project_id"], {:name=>"index_ci_sources_pipelines_on_source_project_id", :using=>:btree}) -> 0.0037s -- create_table("ci_stages", {:force=>:cascade}) -> 0.0063s -- add_index("ci_stages", ["pipeline_id", "name"], {:name=>"index_ci_stages_on_pipeline_id_and_name", :unique=>true, :using=>:btree}) -> 0.0039s -- add_index("ci_stages", ["pipeline_id"], {:name=>"index_ci_stages_on_pipeline_id", :using=>:btree}) -> 0.0037s -- add_index("ci_stages", ["project_id"], {:name=>"index_ci_stages_on_project_id", :using=>:btree}) -> 0.0038s -- create_table("ci_trigger_requests", {:force=>:cascade}) -> 0.0062s -- add_index("ci_trigger_requests", ["commit_id"], {:name=>"index_ci_trigger_requests_on_commit_id", :using=>:btree}) -> 0.0037s -- create_table("ci_triggers", {:force=>:cascade}) -> 0.0060s -- add_index("ci_triggers", ["project_id"], {:name=>"index_ci_triggers_on_project_id", :using=>:btree}) -> 0.0038s -- create_table("ci_variables", {:force=>:cascade}) -> 0.0069s -- add_index("ci_variables", ["project_id", "key", "environment_scope"], {:name=>"index_ci_variables_on_project_id_and_key_and_environment_scope", :unique=>true, :using=>:btree}) -> 0.0039s -- create_table("cluster_platforms_kubernetes", {:force=>:cascade}) -> 0.0063s -- add_index("cluster_platforms_kubernetes", ["cluster_id"], {:name=>"index_cluster_platforms_kubernetes_on_cluster_id", :unique=>true, :using=>:btree}) -> 0.0039s -- create_table("cluster_projects", {:force=>:cascade}) -> 0.0044s -- add_index("cluster_projects", ["cluster_id"], {:name=>"index_cluster_projects_on_cluster_id", :using=>:btree}) -> 0.0039s -- add_index("cluster_projects", ["project_id"], {:name=>"index_cluster_projects_on_project_id", :using=>:btree}) -> 0.0037s -- create_table("cluster_providers_gcp", {:force=>:cascade}) -> 0.0063s -- add_index("cluster_providers_gcp", ["cluster_id"], {:name=>"index_cluster_providers_gcp_on_cluster_id", :unique=>true, :using=>:btree}) -> 0.0038s -- create_table("clusters", {:force=>:cascade}) -> 0.0069s -- add_index("clusters", ["enabled"], {:name=>"index_clusters_on_enabled", :using=>:btree}) -> 0.0038s -- add_index("clusters", ["user_id"], {:name=>"index_clusters_on_user_id", :using=>:btree}) -> 0.0039s -- create_table("clusters_applications_helm", {:force=>:cascade}) -> 0.0062s -- create_table("clusters_applications_ingress", {:force=>:cascade}) -> 0.0070s -- create_table("clusters_applications_prometheus", {:force=>:cascade}) -> 0.0062s -- create_table("clusters_applications_runners", {:force=>:cascade}) -> 0.0068s -- add_index("clusters_applications_runners", ["cluster_id"], {:name=>"index_clusters_applications_runners_on_cluster_id", :unique=>true, :using=>:btree}) -> 0.0097s -- add_index("clusters_applications_runners", ["runner_id"], {:name=>"index_clusters_applications_runners_on_runner_id", :using=>:btree}) -> 0.0040s -- create_table("container_repositories", {:force=>:cascade}) -> 0.0063s -- add_index("container_repositories", ["project_id", "name"], {:name=>"index_container_repositories_on_project_id_and_name", :unique=>true, :using=>:btree}) -> 0.0045s -- add_index("container_repositories", ["project_id"], {:name=>"index_container_repositories_on_project_id", :using=>:btree}) -> 0.0041s -- create_table("conversational_development_index_metrics", {:force=>:cascade}) -> 0.0082s -- create_table("deploy_keys_projects", {:force=>:cascade}) -> 0.0045s -- add_index("deploy_keys_projects", ["project_id"], {:name=>"index_deploy_keys_projects_on_project_id", :using=>:btree}) -> 0.0037s -- create_table("deploy_tokens", {:force=>:cascade}) -> 0.0071s -- add_index("deploy_tokens", ["token", "expires_at", "id"], {:name=>"index_deploy_tokens_on_token_and_expires_at_and_id", :where=>"(revoked IS FALSE)", :using=>:btree}) -> 0.0039s -- add_index("deploy_tokens", ["token"], {:name=>"index_deploy_tokens_on_token", :unique=>true, :using=>:btree}) -> 0.0036s -- create_table("deployments", {:force=>:cascade}) -> 0.0061s -- add_index("deployments", ["created_at"], {:name=>"index_deployments_on_created_at", :using=>:btree}) -> 0.0038s -- add_index("deployments", ["environment_id", "id"], {:name=>"index_deployments_on_environment_id_and_id", :using=>:btree}) -> 0.0036s -- add_index("deployments", ["environment_id", "iid", "project_id"], {:name=>"index_deployments_on_environment_id_and_iid_and_project_id", :using=>:btree}) -> 0.0036s -- add_index("deployments", ["project_id", "iid"], {:name=>"index_deployments_on_project_id_and_iid", :unique=>true, :using=>:btree}) -> 0.0039s -- create_table("emails", {:force=>:cascade}) -> 0.0071s -- add_index("emails", ["confirmation_token"], {:name=>"index_emails_on_confirmation_token", :unique=>true, :using=>:btree}) -> 0.0041s -- add_index("emails", ["email"], {:name=>"index_emails_on_email", :unique=>true, :using=>:btree}) -> 0.0040s -- add_index("emails", ["user_id"], {:name=>"index_emails_on_user_id", :using=>:btree}) -> 0.0046s -- create_table("environments", {:force=>:cascade}) -> 0.0061s -- add_index("environments", ["project_id", "name"], {:name=>"index_environments_on_project_id_and_name", :unique=>true, :using=>:btree}) -> 0.0038s -- add_index("environments", ["project_id", "slug"], {:name=>"index_environments_on_project_id_and_slug", :unique=>true, :using=>:btree}) -> 0.0041s -- create_table("epic_issues", {:force=>:cascade}) -> 0.0045s -- add_index("epic_issues", ["epic_id"], {:name=>"index_epic_issues_on_epic_id", :using=>:btree}) -> 0.0038s -- add_index("epic_issues", ["issue_id"], {:name=>"index_epic_issues_on_issue_id", :unique=>true, :using=>:btree}) -> 0.0036s -- create_table("epic_metrics", {:force=>:cascade}) -> 0.0040s -- add_index("epic_metrics", ["epic_id"], {:name=>"index_epic_metrics", :using=>:btree}) -> 0.0037s -- create_table("epics", {:force=>:cascade}) -> 0.0064s -- add_index("epics", ["assignee_id"], {:name=>"index_epics_on_assignee_id", :using=>:btree}) -> 0.0039s -- add_index("epics", ["author_id"], {:name=>"index_epics_on_author_id", :using=>:btree}) -> 0.0040s -- add_index("epics", ["end_date"], {:name=>"index_epics_on_end_date", :using=>:btree}) -> 0.0036s -- add_index("epics", ["group_id"], {:name=>"index_epics_on_group_id", :using=>:btree}) -> 0.0044s -- add_index("epics", ["iid"], {:name=>"index_epics_on_iid", :using=>:btree}) -> 0.0036s -- add_index("epics", ["milestone_id"], {:name=>"index_milestone", :using=>:btree}) -> 0.0038s -- add_index("epics", ["start_date"], {:name=>"index_epics_on_start_date", :using=>:btree}) -> 0.0039s -- create_table("events", {:force=>:cascade}) -> 0.0070s -- add_index("events", ["action"], {:name=>"index_events_on_action", :using=>:btree}) -> 0.0044s -- add_index("events", ["author_id", "project_id"], {:name=>"index_events_on_author_id_and_project_id", :using=>:btree}) -> 0.0037s -- add_index("events", ["project_id", "id"], {:name=>"index_events_on_project_id_and_id", :using=>:btree}) -> 0.0036s -- add_index("events", ["target_type", "target_id"], {:name=>"index_events_on_target_type_and_target_id", :using=>:btree}) -> 0.0036s -- create_table("feature_gates", {:force=>:cascade}) -> 0.0058s -- add_index("feature_gates", ["feature_key", "key", "value"], {:name=>"index_feature_gates_on_feature_key_and_key_and_value", :unique=>true, :using=>:btree}) -> 0.0037s -- create_table("features", {:force=>:cascade}) -> 0.0059s -- add_index("features", ["key"], {:name=>"index_features_on_key", :unique=>true, :using=>:btree}) -> 0.0037s -- create_table("fork_network_members", {:force=>:cascade}) -> 0.0037s -- add_index("fork_network_members", ["fork_network_id"], {:name=>"index_fork_network_members_on_fork_network_id", :using=>:btree}) -> 0.0035s -- add_index("fork_network_members", ["project_id"], {:name=>"index_fork_network_members_on_project_id", :unique=>true, :using=>:btree}) -> 0.0038s -- create_table("fork_networks", {:force=>:cascade}) -> 0.0056s -- add_index("fork_networks", ["root_project_id"], {:name=>"index_fork_networks_on_root_project_id", :unique=>true, :using=>:btree}) -> 0.0035s -- create_table("forked_project_links", {:force=>:cascade}) -> 0.0041s -- add_index("forked_project_links", ["forked_to_project_id"], {:name=>"index_forked_project_links_on_forked_to_project_id", :unique=>true, :using=>:btree}) -> 0.0037s -- create_table("gcp_clusters", {:force=>:cascade}) -> 0.0068s -- add_index("gcp_clusters", ["project_id"], {:name=>"index_gcp_clusters_on_project_id", :unique=>true, :using=>:btree}) -> 0.0037s -- create_table("geo_event_log", {:id=>:bigserial, :force=>:cascade}) -> 0.0040s -- add_index("geo_event_log", ["repositories_changed_event_id"], {:name=>"index_geo_event_log_on_repositories_changed_event_id", :using=>:btree}) -> 0.0041s -- add_index("geo_event_log", ["repository_created_event_id"], {:name=>"index_geo_event_log_on_repository_created_event_id", :using=>:btree}) -> 0.0035s -- add_index("geo_event_log", ["repository_deleted_event_id"], {:name=>"index_geo_event_log_on_repository_deleted_event_id", :using=>:btree}) -> 0.0034s -- add_index("geo_event_log", ["repository_renamed_event_id"], {:name=>"index_geo_event_log_on_repository_renamed_event_id", :using=>:btree}) -> 0.0037s -- add_index("geo_event_log", ["repository_updated_event_id"], {:name=>"index_geo_event_log_on_repository_updated_event_id", :using=>:btree}) -> 0.0036s -- create_table("geo_hashed_storage_attachments_events", {:id=>:bigserial, :force=>:cascade}) -> 0.0056s -- add_index("geo_hashed_storage_attachments_events", ["project_id"], {:name=>"index_geo_hashed_storage_attachments_events_on_project_id", :using=>:btree}) -> 0.0039s -- create_table("geo_hashed_storage_migrated_events", {:id=>:bigserial, :force=>:cascade}) -> 0.0060s -- add_index("geo_hashed_storage_migrated_events", ["project_id"], {:name=>"index_geo_hashed_storage_migrated_events_on_project_id", :using=>:btree}) -> 0.0038s -- create_table("geo_job_artifact_deleted_events", {:id=>:bigserial, :force=>:cascade}) -> 0.0062s -- add_index("geo_job_artifact_deleted_events", ["job_artifact_id"], {:name=>"index_geo_job_artifact_deleted_events_on_job_artifact_id", :using=>:btree}) -> 0.0037s -- create_table("geo_lfs_object_deleted_events", {:id=>:bigserial, :force=>:cascade}) -> 0.0058s -- add_index("geo_lfs_object_deleted_events", ["lfs_object_id"], {:name=>"index_geo_lfs_object_deleted_events_on_lfs_object_id", :using=>:btree}) -> 0.0038s -- create_table("geo_node_namespace_links", {:force=>:cascade}) -> 0.0040s -- add_index("geo_node_namespace_links", ["geo_node_id", "namespace_id"], {:name=>"index_geo_node_namespace_links_on_geo_node_id_and_namespace_id", :unique=>true, :using=>:btree}) -> 0.0046s -- add_index("geo_node_namespace_links", ["geo_node_id"], {:name=>"index_geo_node_namespace_links_on_geo_node_id", :using=>:btree}) -> 0.0035s -- create_table("geo_node_statuses", {:force=>:cascade}) -> 0.0067s -- add_index("geo_node_statuses", ["geo_node_id"], {:name=>"index_geo_node_statuses_on_geo_node_id", :unique=>true, :using=>:btree}) -> 0.0038s -- create_table("geo_nodes", {:force=>:cascade}) -> 0.0071s -- add_index("geo_nodes", ["access_key"], {:name=>"index_geo_nodes_on_access_key", :using=>:btree}) -> 0.0038s -- add_index("geo_nodes", ["primary"], {:name=>"index_geo_nodes_on_primary", :using=>:btree}) -> 0.0039s -- add_index("geo_nodes", ["url"], {:name=>"index_geo_nodes_on_url", :unique=>true, :using=>:btree}) -> 0.0037s -- create_table("geo_repositories_changed_events", {:id=>:bigserial, :force=>:cascade}) -> 0.0041s -- add_index("geo_repositories_changed_events", ["geo_node_id"], {:name=>"index_geo_repositories_changed_events_on_geo_node_id", :using=>:btree}) -> 0.0038s -- create_table("geo_repository_created_events", {:id=>:bigserial, :force=>:cascade}) -> 0.0061s -- add_index("geo_repository_created_events", ["project_id"], {:name=>"index_geo_repository_created_events_on_project_id", :using=>:btree}) -> 0.0040s -- create_table("geo_repository_deleted_events", {:id=>:bigserial, :force=>:cascade}) -> 0.0063s -- add_index("geo_repository_deleted_events", ["project_id"], {:name=>"index_geo_repository_deleted_events_on_project_id", :using=>:btree}) -> 0.0039s -- create_table("geo_repository_renamed_events", {:id=>:bigserial, :force=>:cascade}) -> 0.0065s -- add_index("geo_repository_renamed_events", ["project_id"], {:name=>"index_geo_repository_renamed_events_on_project_id", :using=>:btree}) -> 0.0039s -- create_table("geo_repository_updated_events", {:id=>:bigserial, :force=>:cascade}) -> 0.0068s -- add_index("geo_repository_updated_events", ["project_id"], {:name=>"index_geo_repository_updated_events_on_project_id", :using=>:btree}) -> 0.0039s -- add_index("geo_repository_updated_events", ["source"], {:name=>"index_geo_repository_updated_events_on_source", :using=>:btree}) -> 0.0037s -- create_table("geo_upload_deleted_events", {:id=>:bigserial, :force=>:cascade}) -> 0.0062s -- add_index("geo_upload_deleted_events", ["upload_id"], {:name=>"index_geo_upload_deleted_events_on_upload_id", :using=>:btree}) -> 0.0048s -- create_table("gpg_key_subkeys", {:force=>:cascade}) -> 0.0065s -- add_index("gpg_key_subkeys", ["fingerprint"], {:name=>"index_gpg_key_subkeys_on_fingerprint", :unique=>true, :using=>:btree}) -> 0.0039s -- add_index("gpg_key_subkeys", ["gpg_key_id"], {:name=>"index_gpg_key_subkeys_on_gpg_key_id", :using=>:btree}) -> 0.0035s -- add_index("gpg_key_subkeys", ["keyid"], {:name=>"index_gpg_key_subkeys_on_keyid", :unique=>true, :using=>:btree}) -> 0.0038s -- create_table("gpg_keys", {:force=>:cascade}) -> 0.0061s -- add_index("gpg_keys", ["fingerprint"], {:name=>"index_gpg_keys_on_fingerprint", :unique=>true, :using=>:btree}) -> 0.0050s -- add_index("gpg_keys", ["primary_keyid"], {:name=>"index_gpg_keys_on_primary_keyid", :unique=>true, :using=>:btree}) -> 0.0045s -- add_index("gpg_keys", ["user_id"], {:name=>"index_gpg_keys_on_user_id", :using=>:btree}) -> 0.0038s -- create_table("gpg_signatures", {:force=>:cascade}) -> 0.0068s -- add_index("gpg_signatures", ["commit_sha"], {:name=>"index_gpg_signatures_on_commit_sha", :unique=>true, :using=>:btree}) -> 0.0038s -- add_index("gpg_signatures", ["gpg_key_id"], {:name=>"index_gpg_signatures_on_gpg_key_id", :using=>:btree}) -> 0.0039s -- add_index("gpg_signatures", ["gpg_key_primary_keyid"], {:name=>"index_gpg_signatures_on_gpg_key_primary_keyid", :using=>:btree}) -> 0.0037s -- add_index("gpg_signatures", ["gpg_key_subkey_id"], {:name=>"index_gpg_signatures_on_gpg_key_subkey_id", :using=>:btree}) -> 0.0037s -- add_index("gpg_signatures", ["project_id"], {:name=>"index_gpg_signatures_on_project_id", :using=>:btree}) -> 0.0037s -- create_table("group_custom_attributes", {:force=>:cascade}) -> 0.0060s -- add_index("group_custom_attributes", ["group_id", "key"], {:name=>"index_group_custom_attributes_on_group_id_and_key", :unique=>true, :using=>:btree}) -> 0.0038s -- add_index("group_custom_attributes", ["key", "value"], {:name=>"index_group_custom_attributes_on_key_and_value", :using=>:btree}) -> 0.0037s -- create_table("historical_data", {:force=>:cascade}) -> 0.0041s -- create_table("identities", {:force=>:cascade}) -> 0.0058s -- add_index("identities", ["user_id"], {:name=>"index_identities_on_user_id", :using=>:btree}) -> 0.0037s -- create_table("index_statuses", {:force=>:cascade}) -> 0.0076s -- add_index("index_statuses", ["project_id"], {:name=>"index_index_statuses_on_project_id", :unique=>true, :using=>:btree}) -> 0.0039s -- create_table("internal_ids", {:id=>:bigserial, :force=>:cascade}) -> 0.0041s -- add_index("internal_ids", ["usage", "namespace_id"], {:name=>"index_internal_ids_on_usage_and_namespace_id", :unique=>true, :where=>"(namespace_id IS NOT NULL)", :using=>:btree}) -> 0.0039s -- add_index("internal_ids", ["usage", "project_id"], {:name=>"index_internal_ids_on_usage_and_project_id", :unique=>true, :where=>"(project_id IS NOT NULL)", :using=>:btree}) -> 0.0039s -- create_table("issue_assignees", {:id=>false, :force=>:cascade}) -> 0.0017s -- add_index("issue_assignees", ["issue_id", "user_id"], {:name=>"index_issue_assignees_on_issue_id_and_user_id", :unique=>true, :using=>:btree}) -> 0.0041s -- add_index("issue_assignees", ["user_id"], {:name=>"index_issue_assignees_on_user_id", :using=>:btree}) -> 0.0036s -- create_table("issue_links", {:force=>:cascade}) -> 0.0043s -- add_index("issue_links", ["source_id", "target_id"], {:name=>"index_issue_links_on_source_id_and_target_id", :unique=>true, :using=>:btree}) -> 0.0037s -- add_index("issue_links", ["source_id"], {:name=>"index_issue_links_on_source_id", :using=>:btree}) -> 0.0038s -- add_index("issue_links", ["target_id"], {:name=>"index_issue_links_on_target_id", :using=>:btree}) -> 0.0038s -- create_table("issue_metrics", {:force=>:cascade}) -> 0.0042s -- add_index("issue_metrics", ["issue_id"], {:name=>"index_issue_metrics", :using=>:btree}) -> 0.0122s -- create_table("issues", {:force=>:cascade}) -> 0.0087s -- add_index("issues", ["author_id"], {:name=>"index_issues_on_author_id", :using=>:btree}) -> 0.0041s -- add_index("issues", ["confidential"], {:name=>"index_issues_on_confidential", :using=>:btree}) -> 0.0040s -- add_index("issues", ["description"], {:name=>"index_issues_on_description_trigram", :using=>:gin, :opclasses=>{"description"=>"gin_trgm_ops"}}) -> 0.0025s -- add_index("issues", ["milestone_id"], {:name=>"index_issues_on_milestone_id", :using=>:btree}) -> 0.0038s -- add_index("issues", ["moved_to_id"], {:name=>"index_issues_on_moved_to_id", :where=>"(moved_to_id IS NOT NULL)", :using=>:btree}) -> 0.0040s -- add_index("issues", ["project_id", "created_at", "id", "state"], {:name=>"index_issues_on_project_id_and_created_at_and_id_and_state", :using=>:btree}) -> 0.0040s -- add_index("issues", ["project_id", "due_date", "id", "state"], {:name=>"idx_issues_on_project_id_and_due_date_and_id_and_state_partial", :where=>"(due_date IS NOT NULL)", :using=>:btree}) -> 0.0039s -- add_index("issues", ["project_id", "iid"], {:name=>"index_issues_on_project_id_and_iid", :unique=>true, :using=>:btree}) -> 0.0038s -- add_index("issues", ["project_id", "updated_at", "id", "state"], {:name=>"index_issues_on_project_id_and_updated_at_and_id_and_state", :using=>:btree}) -> 0.0050s -- add_index("issues", ["relative_position"], {:name=>"index_issues_on_relative_position", :using=>:btree}) -> 0.0043s -- add_index("issues", ["state"], {:name=>"index_issues_on_state", :using=>:btree}) -> 0.0040s -- add_index("issues", ["title"], {:name=>"index_issues_on_title_trigram", :using=>:gin, :opclasses=>{"title"=>"gin_trgm_ops"}}) -> 0.0024s -- add_index("issues", ["updated_at"], {:name=>"index_issues_on_updated_at", :using=>:btree}) -> 0.0041s -- add_index("issues", ["updated_by_id"], {:name=>"index_issues_on_updated_by_id", :where=>"(updated_by_id IS NOT NULL)", :using=>:btree}) -> 0.0039s -- create_table("keys", {:force=>:cascade}) -> 0.0067s -- add_index("keys", ["fingerprint"], {:name=>"index_keys_on_fingerprint", :unique=>true, :using=>:btree}) -> 0.0042s -- add_index("keys", ["user_id"], {:name=>"index_keys_on_user_id", :using=>:btree}) -> 0.0038s -- create_table("label_links", {:force=>:cascade}) -> 0.0063s -- add_index("label_links", ["label_id"], {:name=>"index_label_links_on_label_id", :using=>:btree}) -> 0.0038s -- add_index("label_links", ["target_id", "target_type"], {:name=>"index_label_links_on_target_id_and_target_type", :using=>:btree}) -> 0.0039s -- create_table("label_priorities", {:force=>:cascade}) -> 0.0042s -- add_index("label_priorities", ["priority"], {:name=>"index_label_priorities_on_priority", :using=>:btree}) -> 0.0039s -- add_index("label_priorities", ["project_id", "label_id"], {:name=>"index_label_priorities_on_project_id_and_label_id", :unique=>true, :using=>:btree}) -> 0.0038s -- create_table("labels", {:force=>:cascade}) -> 0.0066s -- add_index("labels", ["group_id", "project_id", "title"], {:name=>"index_labels_on_group_id_and_project_id_and_title", :unique=>true, :using=>:btree}) -> 0.0045s -- add_index("labels", ["project_id"], {:name=>"index_labels_on_project_id", :using=>:btree}) -> 0.0041s -- add_index("labels", ["template"], {:name=>"index_labels_on_template", :where=>"template", :using=>:btree}) -> 0.0039s -- add_index("labels", ["title"], {:name=>"index_labels_on_title", :using=>:btree}) -> 0.0049s -- add_index("labels", ["type", "project_id"], {:name=>"index_labels_on_type_and_project_id", :using=>:btree}) -> 0.0039s -- create_table("ldap_group_links", {:force=>:cascade}) -> 0.0062s -- create_table("lfs_file_locks", {:force=>:cascade}) -> 0.0061s -- add_index("lfs_file_locks", ["project_id", "path"], {:name=>"index_lfs_file_locks_on_project_id_and_path", :unique=>true, :using=>:btree}) -> 0.0039s -- add_index("lfs_file_locks", ["user_id"], {:name=>"index_lfs_file_locks_on_user_id", :using=>:btree}) -> 0.0039s -- create_table("lfs_objects", {:force=>:cascade}) -> 0.0062s -- add_index("lfs_objects", ["oid"], {:name=>"index_lfs_objects_on_oid", :unique=>true, :using=>:btree}) -> 0.0039s -- create_table("lfs_objects_projects", {:force=>:cascade}) -> 0.0050s -- add_index("lfs_objects_projects", ["project_id"], {:name=>"index_lfs_objects_projects_on_project_id", :using=>:btree}) -> 0.0038s -- create_table("licenses", {:force=>:cascade}) -> 0.0070s -- create_table("lists", {:force=>:cascade}) -> 0.0047s -- add_index("lists", ["board_id", "label_id"], {:name=>"index_lists_on_board_id_and_label_id", :unique=>true, :using=>:btree}) -> 0.0042s -- add_index("lists", ["label_id"], {:name=>"index_lists_on_label_id", :using=>:btree}) -> 0.0038s -- create_table("members", {:force=>:cascade}) -> 0.0074s -- add_index("members", ["access_level"], {:name=>"index_members_on_access_level", :using=>:btree}) -> 0.0038s -- add_index("members", ["invite_token"], {:name=>"index_members_on_invite_token", :unique=>true, :using=>:btree}) -> 0.0036s -- add_index("members", ["requested_at"], {:name=>"index_members_on_requested_at", :using=>:btree}) -> 0.0038s -- add_index("members", ["source_id", "source_type"], {:name=>"index_members_on_source_id_and_source_type", :using=>:btree}) -> 0.0040s -- add_index("members", ["user_id"], {:name=>"index_members_on_user_id", :using=>:btree}) -> 0.0036s -- create_table("merge_request_diff_commits", {:id=>false, :force=>:cascade}) -> 0.0036s -- add_index("merge_request_diff_commits", ["merge_request_diff_id", "relative_order"], {:name=>"index_merge_request_diff_commits_on_mr_diff_id_and_order", :unique=>true, :using=>:btree}) -> 0.0037s -- add_index("merge_request_diff_commits", ["sha"], {:name=>"index_merge_request_diff_commits_on_sha", :using=>:btree}) -> 0.0037s -- create_table("merge_request_diff_files", {:id=>false, :force=>:cascade}) -> 0.0039s -- add_index("merge_request_diff_files", ["merge_request_diff_id", "relative_order"], {:name=>"index_merge_request_diff_files_on_mr_diff_id_and_order", :unique=>true, :using=>:btree}) -> 0.0037s -- create_table("merge_request_diffs", {:force=>:cascade}) -> 0.0062s -- add_index("merge_request_diffs", ["merge_request_id", "id"], {:name=>"index_merge_request_diffs_on_merge_request_id_and_id", :using=>:btree}) -> 0.0040s -- create_table("merge_request_metrics", {:force=>:cascade}) -> 0.0042s -- add_index("merge_request_metrics", ["first_deployed_to_production_at"], {:name=>"index_merge_request_metrics_on_first_deployed_to_production_at", :using=>:btree}) -> 0.0038s -- add_index("merge_request_metrics", ["merge_request_id"], {:name=>"index_merge_request_metrics", :using=>:btree}) -> 0.0034s -- add_index("merge_request_metrics", ["pipeline_id"], {:name=>"index_merge_request_metrics_on_pipeline_id", :using=>:btree}) -> 0.0037s -- create_table("merge_requests", {:force=>:cascade}) -> 0.0080s -- add_index("merge_requests", ["assignee_id"], {:name=>"index_merge_requests_on_assignee_id", :using=>:btree}) -> 0.0039s -- add_index("merge_requests", ["author_id"], {:name=>"index_merge_requests_on_author_id", :using=>:btree}) -> 0.0038s -- add_index("merge_requests", ["created_at"], {:name=>"index_merge_requests_on_created_at", :using=>:btree}) -> 0.0037s -- add_index("merge_requests", ["description"], {:name=>"index_merge_requests_on_description_trigram", :using=>:gin, :opclasses=>{"description"=>"gin_trgm_ops"}}) -> 0.0023s -- add_index("merge_requests", ["head_pipeline_id"], {:name=>"index_merge_requests_on_head_pipeline_id", :using=>:btree}) -> 0.0037s -- add_index("merge_requests", ["latest_merge_request_diff_id"], {:name=>"index_merge_requests_on_latest_merge_request_diff_id", :using=>:btree}) -> 0.0039s -- add_index("merge_requests", ["merge_user_id"], {:name=>"index_merge_requests_on_merge_user_id", :where=>"(merge_user_id IS NOT NULL)", :using=>:btree}) -> 0.0039s -- add_index("merge_requests", ["milestone_id"], {:name=>"index_merge_requests_on_milestone_id", :using=>:btree}) -> 0.0037s -- add_index("merge_requests", ["source_branch"], {:name=>"index_merge_requests_on_source_branch", :using=>:btree}) -> 0.0039s -- add_index("merge_requests", ["source_project_id", "source_branch"], {:name=>"index_merge_requests_on_source_project_and_branch_state_opened", :where=>"((state)::text = 'opened'::text)", :using=>:btree}) -> 0.0037s -- add_index("merge_requests", ["source_project_id", "source_branch"], {:name=>"index_merge_requests_on_source_project_id_and_source_branch", :using=>:btree}) -> 0.0037s -- add_index("merge_requests", ["target_branch"], {:name=>"index_merge_requests_on_target_branch", :using=>:btree}) -> 0.0035s -- add_index("merge_requests", ["target_project_id", "iid"], {:name=>"index_merge_requests_on_target_project_id_and_iid", :unique=>true, :using=>:btree}) -> 0.0036s -- add_index("merge_requests", ["target_project_id", "merge_commit_sha", "id"], {:name=>"index_merge_requests_on_tp_id_and_merge_commit_sha_and_id", :using=>:btree}) -> 0.0037s -- add_index("merge_requests", ["title"], {:name=>"index_merge_requests_on_title", :using=>:btree}) -> 0.0036s -- add_index("merge_requests", ["title"], {:name=>"index_merge_requests_on_title_trigram", :using=>:gin, :opclasses=>{"title"=>"gin_trgm_ops"}}) -> 0.0023s -- add_index("merge_requests", ["updated_by_id"], {:name=>"index_merge_requests_on_updated_by_id", :where=>"(updated_by_id IS NOT NULL)", :using=>:btree}) -> 0.0038s -- create_table("merge_requests_closing_issues", {:force=>:cascade}) -> 0.0040s -- add_index("merge_requests_closing_issues", ["issue_id"], {:name=>"index_merge_requests_closing_issues_on_issue_id", :using=>:btree}) -> 0.0036s -- add_index("merge_requests_closing_issues", ["merge_request_id"], {:name=>"index_merge_requests_closing_issues_on_merge_request_id", :using=>:btree}) -> 0.0038s -- create_table("milestones", {:force=>:cascade}) -> 0.0059s -- add_index("milestones", ["description"], {:name=>"index_milestones_on_description_trigram", :using=>:gin, :opclasses=>{"description"=>"gin_trgm_ops"}}) -> 0.0023s -- add_index("milestones", ["due_date"], {:name=>"index_milestones_on_due_date", :using=>:btree}) -> 0.0035s -- add_index("milestones", ["group_id"], {:name=>"index_milestones_on_group_id", :using=>:btree}) -> 0.0036s -- add_index("milestones", ["project_id", "iid"], {:name=>"index_milestones_on_project_id_and_iid", :unique=>true, :using=>:btree}) -> 0.0065s -- add_index("milestones", ["title"], {:name=>"index_milestones_on_title", :using=>:btree}) -> 0.0047s -- add_index("milestones", ["title"], {:name=>"index_milestones_on_title_trigram", :using=>:gin, :opclasses=>{"title"=>"gin_trgm_ops"}}) -> 0.0023s -- create_table("namespace_statistics", {:force=>:cascade}) -> 0.0042s -- add_index("namespace_statistics", ["namespace_id"], {:name=>"index_namespace_statistics_on_namespace_id", :unique=>true, :using=>:btree}) -> 0.0035s -- create_table("namespaces", {:force=>:cascade}) -> 0.0090s -- add_index("namespaces", ["created_at"], {:name=>"index_namespaces_on_created_at", :using=>:btree}) -> 0.0037s -- add_index("namespaces", ["ldap_sync_last_successful_update_at"], {:name=>"index_namespaces_on_ldap_sync_last_successful_update_at", :using=>:btree}) -> 0.0035s -- add_index("namespaces", ["ldap_sync_last_update_at"], {:name=>"index_namespaces_on_ldap_sync_last_update_at", :using=>:btree}) -> 0.0036s -- add_index("namespaces", ["name", "parent_id"], {:name=>"index_namespaces_on_name_and_parent_id", :unique=>true, :using=>:btree}) -> 0.0035s -- add_index("namespaces", ["name"], {:name=>"index_namespaces_on_name_trigram", :using=>:gin, :opclasses=>{"name"=>"gin_trgm_ops"}}) -> 0.0022s -- add_index("namespaces", ["owner_id"], {:name=>"index_namespaces_on_owner_id", :using=>:btree}) -> 0.0034s -- add_index("namespaces", ["parent_id", "id"], {:name=>"index_namespaces_on_parent_id_and_id", :unique=>true, :using=>:btree}) -> 0.0039s -- add_index("namespaces", ["path"], {:name=>"index_namespaces_on_path", :using=>:btree}) -> 0.0033s -- add_index("namespaces", ["path"], {:name=>"index_namespaces_on_path_trigram", :using=>:gin, :opclasses=>{"path"=>"gin_trgm_ops"}}) -> 0.0022s -- add_index("namespaces", ["plan_id"], {:name=>"index_namespaces_on_plan_id", :using=>:btree}) -> 0.0045s -- add_index("namespaces", ["require_two_factor_authentication"], {:name=>"index_namespaces_on_require_two_factor_authentication", :using=>:btree}) -> 0.0036s -- add_index("namespaces", ["type"], {:name=>"index_namespaces_on_type", :using=>:btree}) -> 0.0034s -- create_table("notes", {:force=>:cascade}) -> 0.0061s -- add_index("notes", ["author_id"], {:name=>"index_notes_on_author_id", :using=>:btree}) -> 0.0035s -- add_index("notes", ["commit_id"], {:name=>"index_notes_on_commit_id", :using=>:btree}) -> 0.0033s -- add_index("notes", ["created_at"], {:name=>"index_notes_on_created_at", :using=>:btree}) -> 0.0047s -- add_index("notes", ["discussion_id"], {:name=>"index_notes_on_discussion_id", :using=>:btree}) -> 0.0034s -- add_index("notes", ["line_code"], {:name=>"index_notes_on_line_code", :using=>:btree}) -> 0.0036s -- add_index("notes", ["note"], {:name=>"index_notes_on_note_trigram", :using=>:gin, :opclasses=>{"note"=>"gin_trgm_ops"}}) -> 0.0021s -- add_index("notes", ["noteable_id", "noteable_type"], {:name=>"index_notes_on_noteable_id_and_noteable_type", :using=>:btree}) -> 0.0035s -- add_index("notes", ["noteable_type"], {:name=>"index_notes_on_noteable_type", :using=>:btree}) -> 0.0033s -- add_index("notes", ["project_id", "noteable_type"], {:name=>"index_notes_on_project_id_and_noteable_type", :using=>:btree}) -> 0.0036s -- add_index("notes", ["updated_at"], {:name=>"index_notes_on_updated_at", :using=>:btree}) -> 0.0035s -- create_table("notification_settings", {:force=>:cascade}) -> 0.0065s -- add_index("notification_settings", ["source_id", "source_type"], {:name=>"index_notification_settings_on_source_id_and_source_type", :using=>:btree}) -> 0.0038s -- add_index("notification_settings", ["user_id", "source_id", "source_type"], {:name=>"index_notifications_on_user_id_and_source_id_and_source_type", :unique=>true, :using=>:btree}) -> 0.0036s -- add_index("notification_settings", ["user_id"], {:name=>"index_notification_settings_on_user_id", :using=>:btree}) -> 0.0035s -- create_table("oauth_access_grants", {:force=>:cascade}) -> 0.0056s -- add_index("oauth_access_grants", ["token"], {:name=>"index_oauth_access_grants_on_token", :unique=>true, :using=>:btree}) -> 0.0037s -- create_table("oauth_access_tokens", {:force=>:cascade}) -> 0.0056s -- add_index("oauth_access_tokens", ["refresh_token"], {:name=>"index_oauth_access_tokens_on_refresh_token", :unique=>true, :using=>:btree}) -> 0.0036s -- add_index("oauth_access_tokens", ["resource_owner_id"], {:name=>"index_oauth_access_tokens_on_resource_owner_id", :using=>:btree}) -> 0.0035s -- add_index("oauth_access_tokens", ["token"], {:name=>"index_oauth_access_tokens_on_token", :unique=>true, :using=>:btree}) -> 0.0035s -- create_table("oauth_applications", {:force=>:cascade}) -> 0.0062s -- add_index("oauth_applications", ["owner_id", "owner_type"], {:name=>"index_oauth_applications_on_owner_id_and_owner_type", :using=>:btree}) -> 0.0036s -- add_index("oauth_applications", ["uid"], {:name=>"index_oauth_applications_on_uid", :unique=>true, :using=>:btree}) -> 0.0035s -- create_table("oauth_openid_requests", {:force=>:cascade}) -> 0.0060s -- create_table("pages_domains", {:force=>:cascade}) -> 0.0059s -- add_index("pages_domains", ["domain"], {:name=>"index_pages_domains_on_domain", :unique=>true, :using=>:btree}) -> 0.0036s -- add_index("pages_domains", ["project_id", "enabled_until"], {:name=>"index_pages_domains_on_project_id_and_enabled_until", :using=>:btree}) -> 0.0035s -- add_index("pages_domains", ["project_id"], {:name=>"index_pages_domains_on_project_id", :using=>:btree}) -> 0.0034s -- add_index("pages_domains", ["verified_at", "enabled_until"], {:name=>"index_pages_domains_on_verified_at_and_enabled_until", :using=>:btree}) -> 0.0036s -- add_index("pages_domains", ["verified_at"], {:name=>"index_pages_domains_on_verified_at", :using=>:btree}) -> 0.0035s -- create_table("path_locks", {:force=>:cascade}) -> 0.0083s -- add_index("path_locks", ["path"], {:name=>"index_path_locks_on_path", :using=>:btree}) -> 0.0041s -- add_index("path_locks", ["project_id"], {:name=>"index_path_locks_on_project_id", :using=>:btree}) -> 0.0037s -- add_index("path_locks", ["user_id"], {:name=>"index_path_locks_on_user_id", :using=>:btree}) -> 0.0036s -- create_table("personal_access_tokens", {:force=>:cascade}) -> 0.0071s -- add_index("personal_access_tokens", ["token"], {:name=>"index_personal_access_tokens_on_token", :unique=>true, :using=>:btree}) -> 0.0043s -- add_index("personal_access_tokens", ["user_id"], {:name=>"index_personal_access_tokens_on_user_id", :using=>:btree}) -> 0.0041s -- create_table("plans", {:force=>:cascade}) -> 0.0056s -- add_index("plans", ["name"], {:name=>"index_plans_on_name", :using=>:btree}) -> 0.0037s -- create_table("project_authorizations", {:id=>false, :force=>:cascade}) -> 0.0018s -- add_index("project_authorizations", ["project_id"], {:name=>"index_project_authorizations_on_project_id", :using=>:btree}) -> 0.0036s -- add_index("project_authorizations", ["user_id", "project_id", "access_level"], {:name=>"index_project_authorizations_on_user_id_project_id_access_level", :unique=>true, :using=>:btree}) -> 0.0036s -- create_table("project_auto_devops", {:force=>:cascade}) -> 0.0059s -- add_index("project_auto_devops", ["project_id"], {:name=>"index_project_auto_devops_on_project_id", :unique=>true, :using=>:btree}) -> 0.0036s -- create_table("project_ci_cd_settings", {:force=>:cascade}) -> 0.0044s -- add_index("project_ci_cd_settings", ["project_id"], {:name=>"index_project_ci_cd_settings_on_project_id", :unique=>true, :using=>:btree}) -> 0.0036s -- create_table("project_custom_attributes", {:force=>:cascade}) -> 0.0057s -- add_index("project_custom_attributes", ["key", "value"], {:name=>"index_project_custom_attributes_on_key_and_value", :using=>:btree}) -> 0.0036s -- add_index("project_custom_attributes", ["project_id", "key"], {:name=>"index_project_custom_attributes_on_project_id_and_key", :unique=>true, :using=>:btree}) -> 0.0035s -- create_table("project_deploy_tokens", {:force=>:cascade}) -> 0.0044s -- add_index("project_deploy_tokens", ["project_id", "deploy_token_id"], {:name=>"index_project_deploy_tokens_on_project_id_and_deploy_token_id", :unique=>true, :using=>:btree}) -> 0.0038s -- create_table("project_features", {:force=>:cascade}) -> 0.0046s -- add_index("project_features", ["project_id"], {:name=>"index_project_features_on_project_id", :using=>:btree}) -> 0.0035s -- create_table("project_group_links", {:force=>:cascade}) -> 0.0044s -- add_index("project_group_links", ["group_id"], {:name=>"index_project_group_links_on_group_id", :using=>:btree}) -> 0.0036s -- add_index("project_group_links", ["project_id"], {:name=>"index_project_group_links_on_project_id", :using=>:btree}) -> 0.0034s -- create_table("project_import_data", {:force=>:cascade}) -> 0.0057s -- add_index("project_import_data", ["project_id"], {:name=>"index_project_import_data_on_project_id", :using=>:btree}) -> 0.0037s -- create_table("project_mirror_data", {:force=>:cascade}) -> 0.0045s -- add_index("project_mirror_data", ["next_execution_timestamp", "retry_count"], {:name=>"index_mirror_data_on_next_execution_and_retry_count", :using=>:btree}) -> 0.0035s -- add_index("project_mirror_data", ["project_id"], {:name=>"index_project_mirror_data_on_project_id", :unique=>true, :using=>:btree}) -> 0.0036s -- create_table("project_repository_states", {:force=>:cascade}) -> 0.0055s -- add_index("project_repository_states", ["last_repository_verification_failure"], {:name=>"idx_repository_states_on_repository_failure_partial", :where=>"(last_repository_verification_failure IS NOT NULL)", :using=>:btree}) -> 0.0035s -- add_index("project_repository_states", ["last_wiki_verification_failure"], {:name=>"idx_repository_states_on_wiki_failure_partial", :where=>"(last_wiki_verification_failure IS NOT NULL)", :using=>:btree}) -> 0.0034s -- add_index("project_repository_states", ["project_id"], {:name=>"index_project_repository_states_on_project_id", :unique=>true, :using=>:btree}) -> 0.0045s -- add_index("project_repository_states", ["repository_verification_checksum", "wiki_verification_checksum"], {:name=>"idx_repository_states_on_checksums_partial", :where=>"((repository_verification_checksum IS NULL) OR (wiki_verification_checksum IS NULL))", :using=>:btree}) -> 0.0037s -- create_table("project_statistics", {:force=>:cascade}) -> 0.0060s -- add_index("project_statistics", ["namespace_id"], {:name=>"index_project_statistics_on_namespace_id", :using=>:btree}) -> 0.0035s -- add_index("project_statistics", ["project_id"], {:name=>"index_project_statistics_on_project_id", :unique=>true, :using=>:btree}) -> 0.0035s -- create_table("projects", {:force=>:cascade}) -> 0.0139s -- add_index("projects", ["ci_id"], {:name=>"index_projects_on_ci_id", :using=>:btree}) -> 0.0038s -- add_index("projects", ["created_at"], {:name=>"index_projects_on_created_at", :using=>:btree}) -> 0.0037s -- add_index("projects", ["creator_id"], {:name=>"index_projects_on_creator_id", :using=>:btree}) -> 0.0034s -- add_index("projects", ["description"], {:name=>"index_projects_on_description_trigram", :using=>:gin, :opclasses=>{"description"=>"gin_trgm_ops"}}) -> 0.0023s -- add_index("projects", ["id"], {:name=>"index_projects_on_id_partial_for_visibility", :unique=>true, :where=>"(visibility_level = ANY (ARRAY[10, 20]))", :using=>:btree}) -> 0.0037s -- add_index("projects", ["id"], {:name=>"index_projects_on_mirror_and_mirror_trigger_builds_both_true", :where=>"((mirror IS TRUE) AND (mirror_trigger_builds IS TRUE))", :using=>:btree}) -> 0.0036s -- add_index("projects", ["last_activity_at"], {:name=>"index_projects_on_last_activity_at", :using=>:btree}) -> 0.0034s -- add_index("projects", ["last_repository_check_failed"], {:name=>"index_projects_on_last_repository_check_failed", :using=>:btree}) -> 0.0035s -- add_index("projects", ["last_repository_updated_at"], {:name=>"index_projects_on_last_repository_updated_at", :using=>:btree}) -> 0.0036s -- add_index("projects", ["mirror_last_successful_update_at"], {:name=>"index_projects_on_mirror_last_successful_update_at", :using=>:btree}) -> 0.0037s -- add_index("projects", ["name"], {:name=>"index_projects_on_name_trigram", :using=>:gin, :opclasses=>{"name"=>"gin_trgm_ops"}}) -> 0.0022s -- add_index("projects", ["namespace_id"], {:name=>"index_projects_on_namespace_id", :using=>:btree}) -> 0.0033s -- add_index("projects", ["path"], {:name=>"index_projects_on_path", :using=>:btree}) -> 0.0034s -- add_index("projects", ["path"], {:name=>"index_projects_on_path_trigram", :using=>:gin, :opclasses=>{"path"=>"gin_trgm_ops"}}) -> 0.0023s -- add_index("projects", ["pending_delete"], {:name=>"index_projects_on_pending_delete", :using=>:btree}) -> 0.0037s -- add_index("projects", ["repository_storage"], {:name=>"index_projects_on_repository_storage", :using=>:btree}) -> 0.0036s -- add_index("projects", ["runners_token"], {:name=>"index_projects_on_runners_token", :using=>:btree}) -> 0.0038s -- add_index("projects", ["star_count"], {:name=>"index_projects_on_star_count", :using=>:btree}) -> 0.0035s -- add_index("projects", ["visibility_level"], {:name=>"index_projects_on_visibility_level", :using=>:btree}) -> 0.0037s -- create_table("prometheus_metrics", {:force=>:cascade}) -> 0.0058s -- add_index("prometheus_metrics", ["group"], {:name=>"index_prometheus_metrics_on_group", :using=>:btree}) -> 0.0037s -- add_index("prometheus_metrics", ["project_id"], {:name=>"index_prometheus_metrics_on_project_id", :using=>:btree}) -> 0.0036s -- create_table("protected_branch_merge_access_levels", {:force=>:cascade}) -> 0.0042s -- add_index("protected_branch_merge_access_levels", ["protected_branch_id"], {:name=>"index_protected_branch_merge_access", :using=>:btree}) -> 0.0073s -- add_index("protected_branch_merge_access_levels", ["user_id"], {:name=>"index_protected_branch_merge_access_levels_on_user_id", :using=>:btree}) -> 0.0039s -- create_table("protected_branch_push_access_levels", {:force=>:cascade}) -> 0.0047s -- add_index("protected_branch_push_access_levels", ["protected_branch_id"], {:name=>"index_protected_branch_push_access", :using=>:btree}) -> 0.0039s -- add_index("protected_branch_push_access_levels", ["user_id"], {:name=>"index_protected_branch_push_access_levels_on_user_id", :using=>:btree}) -> 0.0040s -- create_table("protected_branch_unprotect_access_levels", {:force=>:cascade}) -> 0.0045s -- add_index("protected_branch_unprotect_access_levels", ["group_id"], {:name=>"index_protected_branch_unprotect_access_levels_on_group_id", :using=>:btree}) -> 0.0036s -- add_index("protected_branch_unprotect_access_levels", ["protected_branch_id"], {:name=>"index_protected_branch_unprotect_access", :using=>:btree}) -> 0.0038s -- add_index("protected_branch_unprotect_access_levels", ["user_id"], {:name=>"index_protected_branch_unprotect_access_levels_on_user_id", :using=>:btree}) -> 0.0038s -- create_table("protected_branches", {:force=>:cascade}) -> 0.0066s -- add_index("protected_branches", ["project_id"], {:name=>"index_protected_branches_on_project_id", :using=>:btree}) -> 0.0037s -- create_table("protected_tag_create_access_levels", {:force=>:cascade}) -> 0.0045s -- add_index("protected_tag_create_access_levels", ["protected_tag_id"], {:name=>"index_protected_tag_create_access", :using=>:btree}) -> 0.0039s -- add_index("protected_tag_create_access_levels", ["user_id"], {:name=>"index_protected_tag_create_access_levels_on_user_id", :using=>:btree}) -> 0.0036s -- create_table("protected_tags", {:force=>:cascade}) -> 0.0062s -- add_index("protected_tags", ["project_id"], {:name=>"index_protected_tags_on_project_id", :using=>:btree}) -> 0.0038s -- create_table("push_event_payloads", {:id=>false, :force=>:cascade}) -> 0.0038s -- add_index("push_event_payloads", ["event_id"], {:name=>"index_push_event_payloads_on_event_id", :unique=>true, :using=>:btree}) -> 0.0037s -- create_table("push_rules", {:force=>:cascade}) -> 0.0080s -- add_index("push_rules", ["is_sample"], {:name=>"index_push_rules_on_is_sample", :where=>"is_sample", :using=>:btree}) -> 0.0039s -- add_index("push_rules", ["project_id"], {:name=>"index_push_rules_on_project_id", :using=>:btree}) -> 0.0038s -- create_table("redirect_routes", {:force=>:cascade}) -> 0.0062s -- add_index("redirect_routes", ["path"], {:name=>"index_redirect_routes_on_path", :unique=>true, :using=>:btree}) -> 0.0040s -- add_index("redirect_routes", ["source_type", "source_id"], {:name=>"index_redirect_routes_on_source_type_and_source_id", :using=>:btree}) -> 0.0038s -- create_table("releases", {:force=>:cascade}) -> 0.0061s -- add_index("releases", ["project_id", "tag"], {:name=>"index_releases_on_project_id_and_tag", :using=>:btree}) -> 0.0046s -- add_index("releases", ["project_id"], {:name=>"index_releases_on_project_id", :using=>:btree}) -> 0.0039s -- create_table("remote_mirrors", {:force=>:cascade}) -> 0.0073s -- add_index("remote_mirrors", ["last_successful_update_at"], {:name=>"index_remote_mirrors_on_last_successful_update_at", :using=>:btree}) -> 0.0041s -- add_index("remote_mirrors", ["project_id"], {:name=>"index_remote_mirrors_on_project_id", :using=>:btree}) -> 0.0039s -- create_table("routes", {:force=>:cascade}) -> 0.0059s -- add_index("routes", ["path"], {:name=>"index_routes_on_path", :unique=>true, :using=>:btree}) -> 0.0039s -- add_index("routes", ["path"], {:name=>"index_routes_on_path_text_pattern_ops", :using=>:btree, :opclasses=>{"path"=>"varchar_pattern_ops"}}) -> 0.0037s -- add_index("routes", ["source_type", "source_id"], {:name=>"index_routes_on_source_type_and_source_id", :unique=>true, :using=>:btree}) -> 0.0043s -- create_table("saml_providers", {:force=>:cascade}) -> 0.0058s -- add_index("saml_providers", ["group_id"], {:name=>"index_saml_providers_on_group_id", :using=>:btree}) -> 0.0036s -- create_table("sent_notifications", {:force=>:cascade}) -> 0.0058s -- add_index("sent_notifications", ["reply_key"], {:name=>"index_sent_notifications_on_reply_key", :unique=>true, :using=>:btree}) -> 0.0052s -- create_table("services", {:force=>:cascade}) -> 0.0111s -- add_index("services", ["project_id"], {:name=>"index_services_on_project_id", :using=>:btree}) -> 0.0040s -- add_index("services", ["template"], {:name=>"index_services_on_template", :using=>:btree}) -> 0.0039s -- create_table("slack_integrations", {:force=>:cascade}) -> 0.0067s -- add_index("slack_integrations", ["service_id"], {:name=>"index_slack_integrations_on_service_id", :using=>:btree}) -> 0.0048s -- add_index("slack_integrations", ["team_id", "alias"], {:name=>"index_slack_integrations_on_team_id_and_alias", :unique=>true, :using=>:btree}) -> 0.0046s -- create_table("snippets", {:force=>:cascade}) -> 0.0068s -- add_index("snippets", ["author_id"], {:name=>"index_snippets_on_author_id", :using=>:btree}) -> 0.0040s -- add_index("snippets", ["file_name"], {:name=>"index_snippets_on_file_name_trigram", :using=>:gin, :opclasses=>{"file_name"=>"gin_trgm_ops"}}) -> 0.0023s -- add_index("snippets", ["project_id"], {:name=>"index_snippets_on_project_id", :using=>:btree}) -> 0.0038s -- add_index("snippets", ["title"], {:name=>"index_snippets_on_title_trigram", :using=>:gin, :opclasses=>{"title"=>"gin_trgm_ops"}}) -> 0.0023s -- add_index("snippets", ["updated_at"], {:name=>"index_snippets_on_updated_at", :using=>:btree}) -> 0.0037s -- add_index("snippets", ["visibility_level"], {:name=>"index_snippets_on_visibility_level", :using=>:btree}) -> 0.0040s -- create_table("spam_logs", {:force=>:cascade}) -> 0.0069s -- create_table("subscriptions", {:force=>:cascade}) -> 0.0060s -- add_index("subscriptions", ["subscribable_id", "subscribable_type", "user_id", "project_id"], {:name=>"index_subscriptions_on_subscribable_and_user_id_and_project_id", :unique=>true, :using=>:btree}) -> 0.0038s -- create_table("system_note_metadata", {:force=>:cascade}) -> 0.0063s -- add_index("system_note_metadata", ["note_id"], {:name=>"index_system_note_metadata_on_note_id", :unique=>true, :using=>:btree}) -> 0.0039s -- create_table("taggings", {:force=>:cascade}) -> 0.0060s -- add_index("taggings", ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], {:name=>"taggings_idx", :unique=>true, :using=>:btree}) -> 0.0039s -- add_index("taggings", ["tag_id"], {:name=>"index_taggings_on_tag_id", :using=>:btree}) -> 0.0036s -- add_index("taggings", ["taggable_id", "taggable_type", "context"], {:name=>"index_taggings_on_taggable_id_and_taggable_type_and_context", :using=>:btree}) -> 0.0042s -- add_index("taggings", ["taggable_id", "taggable_type"], {:name=>"index_taggings_on_taggable_id_and_taggable_type", :using=>:btree}) -> 0.0035s -- create_table("tags", {:force=>:cascade}) -> 0.0066s -- add_index("tags", ["name"], {:name=>"index_tags_on_name", :unique=>true, :using=>:btree}) -> 0.0043s -- create_table("timelogs", {:force=>:cascade}) -> 0.0041s -- add_index("timelogs", ["issue_id"], {:name=>"index_timelogs_on_issue_id", :using=>:btree}) -> 0.0036s -- add_index("timelogs", ["merge_request_id"], {:name=>"index_timelogs_on_merge_request_id", :using=>:btree}) -> 0.0041s -- add_index("timelogs", ["user_id"], {:name=>"index_timelogs_on_user_id", :using=>:btree}) -> 0.0038s -- create_table("todos", {:force=>:cascade}) -> 0.0059s -- add_index("todos", ["author_id"], {:name=>"index_todos_on_author_id", :using=>:btree}) -> 0.0038s -- add_index("todos", ["commit_id"], {:name=>"index_todos_on_commit_id", :using=>:btree}) -> 0.0037s -- add_index("todos", ["note_id"], {:name=>"index_todos_on_note_id", :using=>:btree}) -> 0.0037s -- add_index("todos", ["project_id"], {:name=>"index_todos_on_project_id", :using=>:btree}) -> 0.0035s -- add_index("todos", ["target_type", "target_id"], {:name=>"index_todos_on_target_type_and_target_id", :using=>:btree}) -> 0.0037s -- add_index("todos", ["user_id", "id"], {:name=>"index_todos_on_user_id_and_id_done", :where=>"((state)::text = 'done'::text)", :using=>:btree}) -> 0.0037s -- add_index("todos", ["user_id", "id"], {:name=>"index_todos_on_user_id_and_id_pending", :where=>"((state)::text = 'pending'::text)", :using=>:btree}) -> 0.0040s -- add_index("todos", ["user_id"], {:name=>"index_todos_on_user_id", :using=>:btree}) -> 0.0041s -- create_table("trending_projects", {:force=>:cascade}) -> 0.0042s -- add_index("trending_projects", ["project_id"], {:name=>"index_trending_projects_on_project_id", :unique=>true, :using=>:btree}) -> 0.0039s -- create_table("u2f_registrations", {:force=>:cascade}) -> 0.0064s -- add_index("u2f_registrations", ["key_handle"], {:name=>"index_u2f_registrations_on_key_handle", :using=>:btree}) -> 0.0038s -- add_index("u2f_registrations", ["user_id"], {:name=>"index_u2f_registrations_on_user_id", :using=>:btree}) -> 0.0036s -- create_table("uploads", {:force=>:cascade}) -> 0.0064s -- add_index("uploads", ["checksum"], {:name=>"index_uploads_on_checksum", :using=>:btree}) -> 0.0040s -- add_index("uploads", ["model_id", "model_type"], {:name=>"index_uploads_on_model_id_and_model_type", :using=>:btree}) -> 0.0038s -- add_index("uploads", ["uploader", "path"], {:name=>"index_uploads_on_uploader_and_path", :using=>:btree}) -> 0.0039s -- create_table("user_agent_details", {:force=>:cascade}) -> 0.0065s -- add_index("user_agent_details", ["subject_id", "subject_type"], {:name=>"index_user_agent_details_on_subject_id_and_subject_type", :using=>:btree}) -> 0.0038s -- create_table("user_callouts", {:force=>:cascade}) -> 0.0043s -- add_index("user_callouts", ["user_id", "feature_name"], {:name=>"index_user_callouts_on_user_id_and_feature_name", :unique=>true, :using=>:btree}) -> 0.0037s -- add_index("user_callouts", ["user_id"], {:name=>"index_user_callouts_on_user_id", :using=>:btree}) -> 0.0036s -- create_table("user_custom_attributes", {:force=>:cascade}) -> 0.0060s -- add_index("user_custom_attributes", ["key", "value"], {:name=>"index_user_custom_attributes_on_key_and_value", :using=>:btree}) -> 0.0037s -- add_index("user_custom_attributes", ["user_id", "key"], {:name=>"index_user_custom_attributes_on_user_id_and_key", :unique=>true, :using=>:btree}) -> 0.0037s -- create_table("user_interacted_projects", {:id=>false, :force=>:cascade}) -> 0.0017s -- add_index("user_interacted_projects", ["project_id", "user_id"], {:name=>"index_user_interacted_projects_on_project_id_and_user_id", :unique=>true, :using=>:btree}) -> 0.0037s -- add_index("user_interacted_projects", ["user_id"], {:name=>"index_user_interacted_projects_on_user_id", :using=>:btree}) -> 0.0036s -- create_table("user_synced_attributes_metadata", {:force=>:cascade}) -> 0.0071s -- add_index("user_synced_attributes_metadata", ["user_id"], {:name=>"index_user_synced_attributes_metadata_on_user_id", :unique=>true, :using=>:btree}) -> 0.0036s -- create_table("users", {:force=>:cascade}) -> 0.0152s -- add_index("users", ["admin"], {:name=>"index_users_on_admin", :using=>:btree}) -> 0.0041s -- add_index("users", ["confirmation_token"], {:name=>"index_users_on_confirmation_token", :unique=>true, :using=>:btree}) -> 0.0043s -- add_index("users", ["created_at"], {:name=>"index_users_on_created_at", :using=>:btree}) -> 0.0038s -- add_index("users", ["email"], {:name=>"index_users_on_email", :unique=>true, :using=>:btree}) -> 0.0044s -- add_index("users", ["email"], {:name=>"index_users_on_email_trigram", :using=>:gin, :opclasses=>{"email"=>"gin_trgm_ops"}}) -> 0.0024s -- add_index("users", ["ghost"], {:name=>"index_users_on_ghost", :using=>:btree}) -> 0.0076s -- add_index("users", ["incoming_email_token"], {:name=>"index_users_on_incoming_email_token", :using=>:btree}) -> 0.0044s -- add_index("users", ["name"], {:name=>"index_users_on_name", :using=>:btree}) -> 0.0043s -- add_index("users", ["name"], {:name=>"index_users_on_name_trigram", :using=>:gin, :opclasses=>{"name"=>"gin_trgm_ops"}}) -> 0.0025s -- add_index("users", ["reset_password_token"], {:name=>"index_users_on_reset_password_token", :unique=>true, :using=>:btree}) -> 0.0042s -- add_index("users", ["rss_token"], {:name=>"index_users_on_rss_token", :using=>:btree}) -> 0.0053s -- add_index("users", ["state"], {:name=>"index_users_on_state", :using=>:btree}) -> 0.0039s -- add_index("users", ["support_bot"], {:name=>"index_users_on_support_bot", :using=>:btree}) -> 0.0040s -- add_index("users", ["username"], {:name=>"index_users_on_username", :using=>:btree}) -> 0.0040s -- add_index("users", ["username"], {:name=>"index_users_on_username_trigram", :using=>:gin, :opclasses=>{"username"=>"gin_trgm_ops"}}) -> 0.0026s -- create_table("users_star_projects", {:force=>:cascade}) -> 0.0041s -- add_index("users_star_projects", ["project_id"], {:name=>"index_users_star_projects_on_project_id", :using=>:btree}) -> 0.0039s -- add_index("users_star_projects", ["user_id", "project_id"], {:name=>"index_users_star_projects_on_user_id_and_project_id", :unique=>true, :using=>:btree}) -> 0.0040s -- create_table("web_hook_logs", {:force=>:cascade}) -> 0.0061s -- add_index("web_hook_logs", ["web_hook_id"], {:name=>"index_web_hook_logs_on_web_hook_id", :using=>:btree}) -> 0.0037s -- create_table("web_hooks", {:force=>:cascade}) -> 0.0103s -- add_index("web_hooks", ["project_id"], {:name=>"index_web_hooks_on_project_id", :using=>:btree}) -> 0.0040s -- add_index("web_hooks", ["type"], {:name=>"index_web_hooks_on_type", :using=>:btree}) -> 0.0036s -- add_foreign_key("approvals", "merge_requests", {:name=>"fk_310d714958", :on_delete=>:cascade}) -> 0.0028s -- add_foreign_key("approver_groups", "namespaces", {:column=>"group_id", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("badges", "namespaces", {:column=>"group_id", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("badges", "projects", {:on_delete=>:cascade}) -> 0.0022s -- add_foreign_key("board_assignees", "boards", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("board_assignees", "users", {:column=>"assignee_id", :on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("board_labels", "boards", {:on_delete=>:cascade}) -> 0.0021s -- add_foreign_key("board_labels", "labels", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("boards", "namespaces", {:column=>"group_id", :name=>"fk_1e9a074a35", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("boards", "projects", {:name=>"fk_f15266b5f9", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("chat_teams", "namespaces", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("ci_build_trace_section_names", "projects", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("ci_build_trace_sections", "ci_build_trace_section_names", {:column=>"section_name_id", :name=>"fk_264e112c66", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("ci_build_trace_sections", "ci_builds", {:column=>"build_id", :name=>"fk_4ebe41f502", :on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("ci_build_trace_sections", "projects", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("ci_builds", "ci_pipelines", {:column=>"auto_canceled_by_id", :name=>"fk_a2141b1522", :on_delete=>:nullify}) -> 0.0017s -- add_foreign_key("ci_builds", "ci_stages", {:column=>"stage_id", :name=>"fk_3a9eaa254d", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("ci_builds", "projects", {:name=>"fk_befce0568a", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("ci_builds_metadata", "ci_builds", {:column=>"build_id", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("ci_builds_metadata", "projects", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("ci_group_variables", "namespaces", {:column=>"group_id", :name=>"fk_33ae4d58d8", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("ci_job_artifacts", "ci_builds", {:column=>"job_id", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("ci_job_artifacts", "projects", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("ci_pipeline_chat_data", "chat_names", {:on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("ci_pipeline_chat_data", "ci_pipelines", {:column=>"pipeline_id", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("ci_pipeline_schedule_variables", "ci_pipeline_schedules", {:column=>"pipeline_schedule_id", :name=>"fk_41c35fda51", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("ci_pipeline_schedules", "projects", {:name=>"fk_8ead60fcc4", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("ci_pipeline_schedules", "users", {:column=>"owner_id", :name=>"fk_9ea99f58d2", :on_delete=>:nullify}) -> 0.0017s -- add_foreign_key("ci_pipeline_variables", "ci_pipelines", {:column=>"pipeline_id", :name=>"fk_f29c5f4380", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("ci_pipelines", "ci_pipeline_schedules", {:column=>"pipeline_schedule_id", :name=>"fk_3d34ab2e06", :on_delete=>:nullify}) -> 0.0014s -- add_foreign_key("ci_pipelines", "ci_pipelines", {:column=>"auto_canceled_by_id", :name=>"fk_262d4c2d19", :on_delete=>:nullify}) -> 0.0016s -- add_foreign_key("ci_pipelines", "projects", {:name=>"fk_86635dbd80", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("ci_runner_projects", "projects", {:name=>"fk_4478a6f1e4", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("ci_sources_pipelines", "ci_builds", {:column=>"source_job_id", :name=>"fk_be5624bf37", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("ci_sources_pipelines", "ci_pipelines", {:column=>"pipeline_id", :name=>"fk_e1bad85861", :on_delete=>:cascade}) -> 0.0013s -- add_foreign_key("ci_sources_pipelines", "ci_pipelines", {:column=>"source_pipeline_id", :name=>"fk_d4e29af7d7", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("ci_sources_pipelines", "projects", {:column=>"source_project_id", :name=>"fk_acd9737679", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("ci_sources_pipelines", "projects", {:name=>"fk_1e53c97c0a", :on_delete=>:cascade}) -> 0.0024s -- add_foreign_key("ci_stages", "ci_pipelines", {:column=>"pipeline_id", :name=>"fk_fb57e6cc56", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("ci_stages", "projects", {:name=>"fk_2360681d1d", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("ci_trigger_requests", "ci_triggers", {:column=>"trigger_id", :name=>"fk_b8ec8b7245", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("ci_triggers", "projects", {:name=>"fk_e3e63f966e", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("ci_triggers", "users", {:column=>"owner_id", :name=>"fk_e8e10d1964", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("ci_variables", "projects", {:name=>"fk_ada5eb64b3", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("cluster_platforms_kubernetes", "clusters", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("cluster_projects", "clusters", {:on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("cluster_projects", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("cluster_providers_gcp", "clusters", {:on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("clusters", "users", {:on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("clusters_applications_helm", "clusters", {:on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("clusters_applications_ingress", "clusters", {:name=>"fk_753a7b41c1", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("clusters_applications_prometheus", "clusters", {:name=>"fk_557e773639", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("clusters_applications_runners", "ci_runners", {:column=>"runner_id", :name=>"fk_02de2ded36", :on_delete=>:nullify}) -> 0.0017s -- add_foreign_key("clusters_applications_runners", "clusters", {:on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("container_repositories", "projects") -> 0.0019s -- add_foreign_key("deploy_keys_projects", "projects", {:name=>"fk_58a901ca7e", :on_delete=>:cascade}) -> 0.0022s -- add_foreign_key("deployments", "projects", {:name=>"fk_b9a3851b82", :on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("environments", "projects", {:name=>"fk_d1c8c1da6a", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("epic_issues", "epics", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("epic_issues", "issues", {:on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("epic_metrics", "epics", {:on_delete=>:cascade}) -> 0.0022s -- add_foreign_key("epics", "milestones", {:on_delete=>:nullify}) -> 0.0022s -- add_foreign_key("epics", "namespaces", {:column=>"group_id", :name=>"fk_f081aa4489", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("epics", "users", {:column=>"assignee_id", :name=>"fk_dccd3f98fc", :on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("epics", "users", {:column=>"author_id", :name=>"fk_3654b61b03", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("events", "projects", {:on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("events", "users", {:column=>"author_id", :name=>"fk_edfd187b6f", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("fork_network_members", "fork_networks", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("fork_network_members", "projects", {:column=>"forked_from_project_id", :name=>"fk_b01280dae4", :on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("fork_network_members", "projects", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("fork_networks", "projects", {:column=>"root_project_id", :name=>"fk_e7b436b2b5", :on_delete=>:nullify}) -> 0.0017s -- add_foreign_key("forked_project_links", "projects", {:column=>"forked_to_project_id", :name=>"fk_434510edb0", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("gcp_clusters", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("gcp_clusters", "services", {:on_delete=>:nullify}) -> 0.0019s -- add_foreign_key("gcp_clusters", "users", {:on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("geo_event_log", "geo_hashed_storage_migrated_events", {:column=>"hashed_storage_migrated_event_id", :name=>"fk_27548c6db3", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("geo_event_log", "geo_job_artifact_deleted_events", {:column=>"job_artifact_deleted_event_id", :name=>"fk_176d3fbb5d", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("geo_event_log", "geo_lfs_object_deleted_events", {:column=>"lfs_object_deleted_event_id", :name=>"fk_d5af95fcd9", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("geo_event_log", "geo_repositories_changed_events", {:column=>"repositories_changed_event_id", :name=>"fk_4a99ebfd60", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("geo_event_log", "geo_repository_created_events", {:column=>"repository_created_event_id", :name=>"fk_9b9afb1916", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("geo_event_log", "geo_repository_deleted_events", {:column=>"repository_deleted_event_id", :name=>"fk_c4b1c1f66e", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("geo_event_log", "geo_repository_renamed_events", {:column=>"repository_renamed_event_id", :name=>"fk_86c84214ec", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("geo_event_log", "geo_repository_updated_events", {:column=>"repository_updated_event_id", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("geo_event_log", "geo_upload_deleted_events", {:column=>"upload_deleted_event_id", :name=>"fk_c1f241c70d", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("geo_hashed_storage_attachments_events", "projects", {:on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("geo_hashed_storage_migrated_events", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("geo_node_namespace_links", "geo_nodes", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("geo_node_namespace_links", "namespaces", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("geo_node_statuses", "geo_nodes", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("geo_repositories_changed_events", "geo_nodes", {:on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("geo_repository_created_events", "projects", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("geo_repository_renamed_events", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("geo_repository_updated_events", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("gpg_key_subkeys", "gpg_keys", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("gpg_keys", "users", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("gpg_signatures", "gpg_key_subkeys", {:on_delete=>:nullify}) -> 0.0017s -- add_foreign_key("gpg_signatures", "gpg_keys", {:on_delete=>:nullify}) -> 0.0014s -- add_foreign_key("gpg_signatures", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("group_custom_attributes", "namespaces", {:column=>"group_id", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("index_statuses", "projects", {:name=>"fk_74b2492545", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("internal_ids", "namespaces", {:name=>"fk_162941d509", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("internal_ids", "projects", {:on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("issue_assignees", "issues", {:name=>"fk_b7d881734a", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("issue_assignees", "users", {:name=>"fk_5e0c8d9154", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("issue_links", "issues", {:column=>"source_id", :name=>"fk_c900194ff2", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("issue_links", "issues", {:column=>"target_id", :name=>"fk_e71bb44f1f", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("issue_metrics", "issues", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("issues", "issues", {:column=>"moved_to_id", :name=>"fk_a194299be1", :on_delete=>:nullify}) -> 0.0015s -- add_foreign_key("issues", "milestones", {:name=>"fk_96b1dd429c", :on_delete=>:nullify}) -> 0.0016s -- add_foreign_key("issues", "projects", {:name=>"fk_899c8f3231", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("issues", "users", {:column=>"author_id", :name=>"fk_05f1e72feb", :on_delete=>:nullify}) -> 0.0017s -- add_foreign_key("issues", "users", {:column=>"closed_by_id", :name=>"fk_c63cbf6c25", :on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("issues", "users", {:column=>"updated_by_id", :name=>"fk_ffed080f01", :on_delete=>:nullify}) -> 0.0017s -- add_foreign_key("label_priorities", "labels", {:on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("label_priorities", "projects", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("labels", "namespaces", {:column=>"group_id", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("labels", "projects", {:name=>"fk_7de4989a69", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("lfs_file_locks", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("lfs_file_locks", "users", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("lists", "boards", {:name=>"fk_0d3f677137", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("lists", "labels", {:name=>"fk_7a5553d60f", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("members", "users", {:name=>"fk_2e88fb7ce9", :on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("merge_request_diff_commits", "merge_request_diffs", {:on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("merge_request_diff_files", "merge_request_diffs", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("merge_request_diffs", "merge_requests", {:name=>"fk_8483f3258f", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("merge_request_metrics", "ci_pipelines", {:column=>"pipeline_id", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("merge_request_metrics", "merge_requests", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("merge_request_metrics", "users", {:column=>"latest_closed_by_id", :name=>"fk_ae440388cc", :on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("merge_request_metrics", "users", {:column=>"merged_by_id", :name=>"fk_7f28d925f3", :on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("merge_requests", "ci_pipelines", {:column=>"head_pipeline_id", :name=>"fk_fd82eae0b9", :on_delete=>:nullify}) -> 0.0019s -- add_foreign_key("merge_requests", "merge_request_diffs", {:column=>"latest_merge_request_diff_id", :name=>"fk_06067f5644", :on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("merge_requests", "milestones", {:name=>"fk_6a5165a692", :on_delete=>:nullify}) -> 0.0028s -- add_foreign_key("merge_requests", "projects", {:column=>"source_project_id", :name=>"fk_3308fe130c", :on_delete=>:nullify}) -> 0.0025s -- add_foreign_key("merge_requests", "projects", {:column=>"target_project_id", :name=>"fk_a6963e8447", :on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("merge_requests", "users", {:column=>"assignee_id", :name=>"fk_6149611a04", :on_delete=>:nullify}) -> 0.0020s -- add_foreign_key("merge_requests", "users", {:column=>"author_id", :name=>"fk_e719a85f8a", :on_delete=>:nullify}) -> 0.0019s -- add_foreign_key("merge_requests", "users", {:column=>"merge_user_id", :name=>"fk_ad525e1f87", :on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("merge_requests", "users", {:column=>"updated_by_id", :name=>"fk_641731faff", :on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("merge_requests_closing_issues", "issues", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("merge_requests_closing_issues", "merge_requests", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("milestones", "namespaces", {:column=>"group_id", :name=>"fk_95650a40d4", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("milestones", "projects", {:name=>"fk_9bd0a0c791", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("namespace_statistics", "namespaces", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("namespaces", "plans", {:name=>"fk_fdd12e5b80", :on_delete=>:nullify}) -> 0.0018s -- add_foreign_key("notes", "projects", {:name=>"fk_99e097b079", :on_delete=>:cascade}) -> 0.0021s -- add_foreign_key("oauth_openid_requests", "oauth_access_grants", {:column=>"access_grant_id", :name=>"fk_oauth_openid_requests_oauth_access_grants_access_grant_id"}) -> 0.0015s -- add_foreign_key("pages_domains", "projects", {:name=>"fk_ea2f6dfc6f", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("path_locks", "projects", {:name=>"fk_5265c98f24", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("path_locks", "users") -> 0.0020s -- add_foreign_key("personal_access_tokens", "users") -> 0.0020s -- add_foreign_key("project_authorizations", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("project_authorizations", "users", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("project_auto_devops", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("project_ci_cd_settings", "projects", {:name=>"fk_24c15d2f2e", :on_delete=>:cascade}) -> 0.0023s -- add_foreign_key("project_custom_attributes", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("project_deploy_tokens", "deploy_tokens", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("project_deploy_tokens", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("project_features", "projects", {:name=>"fk_18513d9b92", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("project_group_links", "projects", {:name=>"fk_daa8cee94c", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("project_import_data", "projects", {:name=>"fk_ffb9ee3a10", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("project_mirror_data", "projects", {:name=>"fk_d1aad367d7", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("project_repository_states", "projects", {:on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("project_statistics", "projects", {:on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("prometheus_metrics", "projects", {:on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("protected_branch_merge_access_levels", "namespaces", {:column=>"group_id", :name=>"fk_98f3d044fe", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("protected_branch_merge_access_levels", "protected_branches", {:name=>"fk_8a3072ccb3", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("protected_branch_merge_access_levels", "users") -> 0.0018s -- add_foreign_key("protected_branch_push_access_levels", "namespaces", {:column=>"group_id", :name=>"fk_7111b68cdb", :on_delete=>:cascade}) -> 0.0023s -- add_foreign_key("protected_branch_push_access_levels", "protected_branches", {:name=>"fk_9ffc86a3d9", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("protected_branch_push_access_levels", "users") -> 0.0018s -- add_foreign_key("protected_branch_unprotect_access_levels", "namespaces", {:column=>"group_id", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("protected_branch_unprotect_access_levels", "protected_branches", {:on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("protected_branch_unprotect_access_levels", "users", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("protected_branches", "projects", {:name=>"fk_7a9c6d93e7", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("protected_tag_create_access_levels", "namespaces", {:column=>"group_id", :name=>"fk_b4eb82fe3c", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("protected_tag_create_access_levels", "protected_tags", {:name=>"fk_f7dfda8c51", :on_delete=>:cascade}) -> 0.0014s -- add_foreign_key("protected_tag_create_access_levels", "users") -> 0.0017s -- add_foreign_key("protected_tags", "projects", {:name=>"fk_8e4af87648", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("push_event_payloads", "events", {:name=>"fk_36c74129da", :on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("push_rules", "projects", {:name=>"fk_83b29894de", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("releases", "projects", {:name=>"fk_47fe2a0596", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("remote_mirrors", "projects", {:name=>"fk_43a9aa4ca8", :on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("saml_providers", "namespaces", {:column=>"group_id", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("services", "projects", {:name=>"fk_71cce407f9", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("slack_integrations", "services", {:on_delete=>:cascade}) -> 0.0015s -- add_foreign_key("snippets", "projects", {:name=>"fk_be41fd4bb7", :on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("subscriptions", "projects", {:on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("system_note_metadata", "notes", {:name=>"fk_d83a918cb1", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("timelogs", "issues", {:name=>"fk_timelogs_issues_issue_id", :on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("timelogs", "merge_requests", {:name=>"fk_timelogs_merge_requests_merge_request_id", :on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("todos", "notes", {:name=>"fk_91d1f47b13", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("todos", "projects", {:name=>"fk_45054f9c45", :on_delete=>:cascade}) -> 0.0020s -- add_foreign_key("todos", "users", {:column=>"author_id", :name=>"fk_ccf0373936", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("todos", "users", {:name=>"fk_d94154aa95", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("trending_projects", "projects", {:on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("u2f_registrations", "users") -> 0.0019s -- add_foreign_key("user_callouts", "users", {:on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("user_custom_attributes", "users", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("user_interacted_projects", "projects", {:name=>"fk_722ceba4f7", :on_delete=>:cascade}) -> 0.0019s -- add_foreign_key("user_interacted_projects", "users", {:name=>"fk_0894651f08", :on_delete=>:cascade}) -> 0.0023s -- add_foreign_key("user_synced_attributes_metadata", "users", {:on_delete=>:cascade}) -> 0.0017s -- add_foreign_key("users_star_projects", "projects", {:name=>"fk_22cd27ddfc", :on_delete=>:cascade}) -> 0.0018s -- add_foreign_key("web_hook_logs", "web_hooks", {:on_delete=>:cascade}) -> 0.0016s -- add_foreign_key("web_hooks", "projects", {:name=>"fk_0c8ca6d9d1", :on_delete=>:cascade}) -> 0.0018s -- initialize_schema_migrations_table() -> 0.0122s -- enable_extension("plpgsql") -> 0.0128s -- create_table("event_log_states", {:primary_key=>"event_id", :force=>:cascade}) -> 0.0072s -- create_table("file_registry", {:force=>:cascade}) -> 0.0082s -- add_index("file_registry", ["file_type", "file_id"], {:name=>"index_file_registry_on_file_type_and_file_id", :unique=>true, :using=>:btree}) -> 0.0047s -- add_index("file_registry", ["file_type"], {:name=>"index_file_registry_on_file_type", :using=>:btree}) -> 0.0042s -- add_index("file_registry", ["retry_at"], {:name=>"index_file_registry_on_retry_at", :using=>:btree}) -> 0.0042s -- add_index("file_registry", ["success"], {:name=>"index_file_registry_on_success", :using=>:btree}) -> 0.0041s -- create_table("job_artifact_registry", {:force=>:cascade}) -> 0.0069s -- add_index("job_artifact_registry", ["artifact_id"], {:name=>"index_job_artifact_registry_on_artifact_id", :using=>:btree}) -> 0.0041s -- add_index("job_artifact_registry", ["retry_at"], {:name=>"index_job_artifact_registry_on_retry_at", :using=>:btree}) -> 0.0038s -- add_index("job_artifact_registry", ["success"], {:name=>"index_job_artifact_registry_on_success", :using=>:btree}) -> 0.0048s -- create_table("project_registry", {:force=>:cascade}) -> 0.0089s -- add_index("project_registry", ["last_repository_successful_sync_at"], {:name=>"index_project_registry_on_last_repository_successful_sync_at", :using=>:btree}) -> 0.0045s -- add_index("project_registry", ["last_repository_synced_at"], {:name=>"index_project_registry_on_last_repository_synced_at", :using=>:btree}) -> 0.0047s -- add_index("project_registry", ["project_id"], {:name=>"idx_project_registry_on_repo_checksums_and_failure_partial", :where=>"((repository_verification_checksum_sha IS NULL) AND (last_repository_verification_failure IS NULL))", :using=>:btree}) -> 0.0041s -- add_index("project_registry", ["project_id"], {:name=>"idx_project_registry_on_repository_failure_partial", :where=>"(last_repository_verification_failure IS NOT NULL)", :using=>:btree}) -> 0.0039s -- add_index("project_registry", ["project_id"], {:name=>"idx_project_registry_on_wiki_checksums_and_failure_partial", :where=>"((wiki_verification_checksum_sha IS NULL) AND (last_wiki_verification_failure IS NULL))", :using=>:btree}) -> 0.0040s -- add_index("project_registry", ["project_id"], {:name=>"idx_project_registry_on_wiki_failure_partial", :where=>"(last_wiki_verification_failure IS NOT NULL)", :using=>:btree}) -> 0.0038s -- add_index("project_registry", ["project_id"], {:name=>"idx_repository_checksum_mismatch", :where=>"(repository_checksum_mismatch = true)", :using=>:btree}) -> 0.0041s -- add_index("project_registry", ["project_id"], {:name=>"idx_wiki_checksum_mismatch", :where=>"(wiki_checksum_mismatch = true)", :using=>:btree}) -> 0.0038s -- add_index("project_registry", ["project_id"], {:name=>"index_project_registry_on_project_id", :unique=>true, :using=>:btree}) -> 0.0041s -- add_index("project_registry", ["repository_retry_at"], {:name=>"index_project_registry_on_repository_retry_at", :using=>:btree}) -> 0.0039s -- add_index("project_registry", ["repository_verification_checksum_sha"], {:name=>"idx_project_registry_on_repository_checksum_sha_partial", :where=>"(repository_verification_checksum_sha IS NULL)", :using=>:btree}) -> 0.0040s -- add_index("project_registry", ["resync_repository"], {:name=>"index_project_registry_on_resync_repository", :using=>:btree}) -> 0.0040s -- add_index("project_registry", ["resync_wiki"], {:name=>"index_project_registry_on_resync_wiki", :using=>:btree}) -> 0.0040s -- add_index("project_registry", ["wiki_retry_at"], {:name=>"index_project_registry_on_wiki_retry_at", :using=>:btree}) -> 0.0039s -- add_index("project_registry", ["wiki_verification_checksum_sha"], {:name=>"idx_project_registry_on_wiki_checksum_sha_partial", :where=>"(wiki_verification_checksum_sha IS NULL)", :using=>:btree}) -> 0.0040s -- initialize_schema_migrations_table() -> 0.0079s [32;1m$ date[0;m Wed May 2 15:06:56 UTC 2018 [32;1m$ export KNAPSACK_TEST_FILE_PATTERN="ee/spec/**{,/*/**}/*_spec.rb" KNAPSACK_GENERATE_REPORT=true CACHE_CLASSES=true[0;m [32;1m$ JOB_NAME=( $CI_JOB_NAME )[0;m [32;1m$ export CI_NODE_INDEX=${JOB_NAME[-2]} CI_NODE_TOTAL=${JOB_NAME[-1]}[0;m [32;1m$ export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${JOB_NAME[0]}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json[0;m [32;1m$ cp ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH}[0;m [32;1m$ scripts/gitaly-test-spawn[0;m 116 [32;1m$ knapsack rspec "-Ispec --color --format documentation --tag ~geo"[0;m Report specs: ee/spec/models/burndown_spec.rb ee/spec/lib/gitlab/elastic/search_results_spec.rb ee/spec/controllers/projects/merge_requests_controller_spec.rb ee/spec/elastic_integration/global_search_spec.rb ee/spec/features/issues/filtered_search/dropdown_weight_spec.rb ee/spec/policies/group_policy_spec.rb ee/spec/features/issues/form_spec.rb ee/spec/features/search/elastic/project_search_spec.rb ee/spec/features/boards/sidebar_spec.rb ee/spec/features/merge_requests/squash_spec.rb ee/spec/features/merge_request/user_approves_spec.rb ee/spec/features/merge_request/user_sets_approvers_spec.rb ee/spec/models/merge_request_spec.rb ee/spec/features/projects/new_project_spec.rb ee/spec/features/projects/merge_requests/user_approves_merge_request_spec.rb ee/spec/features/issues/service_desk_spec.rb ee/spec/controllers/boards/issues_controller_spec.rb ee/spec/features/projects/settings/merge_requests_settings_spec.rb ee/spec/services/geo/repository_sync_service_spec.rb ee/spec/controllers/groups/epic_issues_controller_spec.rb ee/spec/workers/elastic_indexer_worker_spec.rb ee/spec/features/discussion_comments/epic_spec.rb ee/spec/services/projects/update_remote_mirror_service_spec.rb ee/spec/controllers/ldap/omniauth_callbacks_controller_spec.rb ee/spec/controllers/groups/analytics_controller_spec.rb ee/spec/services/projects/create_service_spec.rb ee/spec/features/admin/admin_geo_nodes_spec.rb ee/spec/mailers/notify_spec.rb ee/spec/features/projects/push_rules_spec.rb ee/spec/models/ci/build_spec.rb ee/spec/models/remote_mirror_spec.rb ee/spec/helpers/push_rules_helper_spec.rb ee/spec/features/projects/services/user_activates_github_spec.rb ee/spec/services/epic_issues/update_service_spec.rb ee/spec/features/search/elastic/global_search_spec.rb ee/spec/features/groups/group_roadmap_spec.rb ee/spec/requests/api/project_push_rule_spec.rb ee/spec/features/admin/admin_audit_logs_spec.rb ee/spec/requests/api/project_mirror_spec.rb ee/spec/features/epics/epic_labels_spec.rb ee/spec/controllers/projects/issues_controller_spec.rb ee/spec/finders/epics_finder_spec.rb ee/spec/features/groups/pipeline_quota_spec.rb ee/spec/controllers/projects/merge_requests/creations_controller_spec.rb ee/spec/features/projects/milestones/milestone_spec.rb ee/spec/models/project_import_data_spec.rb ee/spec/lib/gitlab/chat/command_spec.rb ee/spec/requests/api/merge_request_approvals_spec.rb ee/spec/controllers/projects_controller_spec.rb ee/spec/controllers/projects/push_rules_controller_spec.rb ee/spec/services/issue_links/list_service_spec.rb ee/spec/services/ee/notification_service_spec.rb ee/spec/features/merge_request/user_merges_with_push_rules_spec.rb ee/spec/features/epics/new_epic_spec.rb ee/spec/features/projects/pipelines/pipeline_spec.rb ee/spec/models/concerns/ee/deployment_platform_spec.rb ee/spec/models/namespace_spec.rb ee/spec/features/epics/epics_list_spec.rb ee/spec/models/repository_spec.rb ee/spec/requests/projects/issue_links_controller_spec.rb ee/spec/requests/api/ldap_group_links_spec.rb ee/spec/services/ci/register_job_service_spec.rb ee/spec/models/project_services/github_service_spec.rb ee/spec/policies/merge_request_policy_spec.rb ee/spec/services/audit_event_service_spec.rb ee/spec/models/project_services/jenkins_service_spec.rb ee/spec/services/boards/issues/list_service_spec.rb ee/spec/services/merge_requests/merge_service_spec.rb ee/spec/requests/projects/path_locks_controller_spec.rb ee/spec/controllers/admin/application_settings_controller_spec.rb ee/spec/features/admin/admin_reset_pipeline_minutes_spec.rb ee/spec/models/geo_node_spec.rb ee/spec/controllers/projects/approvers_controller_spec.rb ee/spec/services/projects/update_service_spec.rb ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb ee/spec/policies/project_policy_spec.rb ee/spec/features/display_system_header_and_footer_bar_spec.rb ee/spec/services/geo/file_registry_removal_service_spec.rb ee/spec/controllers/projects/approver_groups_controller_spec.rb ee/spec/features/groups/group_settings_spec.rb ee/spec/services/projects/destroy_service_spec.rb ee/spec/features/projects/issues/user_creates_issue_spec.rb ee/spec/features/groups/analytics_spec.rb ee/spec/workers/repository_update_mirror_worker_spec.rb ee/spec/workers/admin_emails_worker_spec.rb ee/spec/models/concerns/elastic/project_wiki_spec.rb ee/spec/requests/api/geo_spec.rb ee/spec/requests/api/v3/ldap_group_links_spec.rb ee/spec/features/boards/group_boards/user_edits_issues_spec.rb ee/spec/controllers/groups/group_members_controller_spec.rb ee/spec/views/shared/issuable/_approvals.html.haml_spec.rb ee/spec/models/concerns/elastic/issue_spec.rb ee/spec/routing/group_routing_spec.rb ee/spec/services/issue_links/destroy_service_spec.rb ee/spec/services/ee/issues/move_service_spec.rb ee/spec/models/project_services/kubernetes_service_spec.rb ee/spec/services/epic_issues/list_service_spec.rb ee/spec/services/search/group_service_spec.rb ee/spec/lib/gitlab/database/load_balancing/load_balancer_spec.rb ee/spec/controllers/autocomplete_controller_spec.rb ee/spec/services/geo/hashed_storage_migration_service_spec.rb ee/spec/serializers/project_mirror_entity_spec.rb ee/spec/features/merge_request/user_sees_approval_widget_spec.rb ee/spec/lib/gitlab/ci/external/file/local_spec.rb ee/spec/models/geo/repository_updated_event_spec.rb Leftover specs: ee/spec/features/admin/admin_sends_notification_spec.rb ee/spec/finders/geo/attachment_registry_finder_spec.rb ee/spec/finders/geo/job_artifact_registry_finder_spec.rb ee/spec/finders/geo/project_registry_finder_spec.rb ee/spec/lib/gitlab/geo/cron_manager_spec.rb ee/spec/lib/gitlab/geo/file_uploader_spec.rb ee/spec/lib/gitlab/geo/job_artifact_downloader_spec.rb ee/spec/lib/gitlab/geo/job_artifact_uploader_spec.rb ee/spec/lib/gitlab/geo_spec.rb ee/spec/lib/system_check/geo/fdw_schema_up_to_date_check_spec.rb ee/spec/models/geo_node_status_spec.rb ee/spec/requests/api/geo_nodes_spec.rb ee/spec/services/geo/metrics_update_service_spec.rb ee/spec/services/geo/node_status_fetch_service_spec.rb ee/spec/support/protected_tags/access_control_spec.rb ee/spec/workers/geo/file_download_dispatch_worker_spec.rb ee/spec/workers/geo/metrics_update_worker_spec.rb ee/spec/workers/geo/prune_event_log_worker_spec.rb ee/spec/workers/geo/repository_sync_worker_spec.rb WARNING: Shared example group 'protected tags > access control > EE' has been previously defined at: /builds/gitlab-org/gitlab-ee/ee/spec/support/protected_tags/access_control_spec.rb:1 ...and you are now defining it at: /builds/gitlab-org/gitlab-ee/ee/spec/support/protected_tags/access_control_spec.rb:1 The new definition will overwrite the original one. Knapsack report generator started! Run options: exclude {:geo=>true} ==> Setting up GitLab Shell... GitLab Shell setup in 0.463865241 seconds... ==> Setting up Gitaly... Gitaly setup in 0.00017903 seconds... Burndown project milestone burndown behaves like burndown for milestone generates an array with date, issue count and weight returns empty array if milestone start date is nil returns empty array if milestone due date is nil it counts until today if milestone due date > Date.today sets attribute accurate to true when all closed issues does not have closed events considers closed_at as milestone start date sets attribute empty to true when one or more closed issues does not have a closed event sets attribute accurate to false group milestone burndown when nested group milestone behaves like burndown for milestone generates an array with date, issue count and weight returns empty array if milestone start date is nil returns empty array if milestone due date is nil it counts until today if milestone due date > Date.today sets attribute accurate to true when all closed issues does not have closed events considers closed_at as milestone start date sets attribute empty to true when one or more closed issues does not have a closed event sets attribute accurate to false when non-nested group milestone behaves like burndown for milestone generates an array with date, issue count and weight returns empty array if milestone start date is nil returns empty array if milestone due date is nil it counts until today if milestone due date > Date.today sets attribute accurate to true when all closed issues does not have closed events considers closed_at as milestone start date sets attribute empty to true when one or more closed issues does not have a closed event sets attribute accurate to false Gitlab::Elastic::SearchResults parse_search_result returns an unhighlighted blob when no highlight data is present parses the blob with highlighting issues lists found issues returns empty list when issues are not found lists issue when search by a valid iid returns empty list when search by invalid iid confidential issues search by term does not list confidential issues for guests does not list confidential issues for non project members lists confidential issues for author lists confidential issues for assignee lists confidential issues for project members lists all issues for admin search by iid does not list confidential issues for guests does not list confidential issues for non project members lists confidential issues for author lists confidential issues for assignee lists confidential issues for project members lists all issues for admin merge requests lists found merge requests returns empty list when merge requests are not found lists merge request when search by a valid iid returns empty list when search by invalid iid project scoping returns items for project Blobs finds blobs finds blobs from public projects only returns zero when blobs are not found Searches CamelCased methods find by first word find by first two words find by last two words find by exact match Searches special characters finds files with dashes finds files with dots finds files with other special chars Wikis finds wiki blobs finds wiki blobs for guest finds wiki blobs from public projects only returns zero when wiki blobs are not found when wiki is disabled search by member should be empty search by non-member should be empty when wiki is internal search by member should not be empty search by non-member should be empty Commits finds commits finds commits from public projects only returns zero when commits are not found Visibility levels Issues finds right set of issues Milestones finds right set of milestine Projects finds right set of projects Merge Requests finds right set of merge requests Wikis finds the right set of wiki blobs Commits finds right set of commits Blobs finds right set of blobs Projects::MergeRequestsController behaves like approvals approve approves the merge request approvals shows approval information unapprove unapproves the merge request PUT update when the merge request requires approval behaves like update invalid issuable when updating causes conflicts renders edit when format is html renders json error message when format is json when updating an invalid issuable renders edit when merge request is invalid overriding approvers per MR enabled updates approvals disabled does not update approvals_before_merge does not update approver_ids does not update approver_group_ids when the MR targets the project behaves like approvals_before_merge param approvals_before_merge not set for the existing MR when it is less than the one in the target project sets the param to nil updates the merge request when it is equal to the one in the target project sets the param to nil updates the merge request when it is greater than the one in the target project saves the param in the merge request updates the merge request approvals_before_merge set for the existing MR when it is not set does not change the merge request updates the merge request when it is less than the one in the target project sets the param to nil updates the merge request when it is equal to the one in the target project sets the param to nil updates the merge request when it is greater than the one in the target project saves the param in the merge request updates the merge request when the project is a fork when the MR target upstream behaves like approvals_before_merge param approvals_before_merge not set for the existing MR when it is less than the one in the target project sets the param to nil updates the merge request when it is equal to the one in the target project sets the param to nil updates the merge request when it is greater than the one in the target project saves the param in the merge request updates the merge request approvals_before_merge set for the existing MR when it is not set does not change the merge request updates the merge request when it is less than the one in the target project sets the param to nil updates the merge request when it is equal to the one in the target project sets the param to nil updates the merge request when it is greater than the one in the target project saves the param in the merge request updates the merge request when the MR target the fork behaves like approvals_before_merge param approvals_before_merge not set for the existing MR when it is less than the one in the target project sets the param to nil updates the merge request when it is equal to the one in the target project sets the param to nil updates the merge request when it is greater than the one in the target project saves the param in the merge request updates the merge request approvals_before_merge set for the existing MR when it is not set does not change the merge request updates the merge request when it is less than the one in the target project sets the param to nil updates the merge request when it is equal to the one in the target project sets the param to nil updates the merge request when it is greater than the one in the target project saves the param in the merge request updates the merge request POST merge when the sha parameter matches the source SHA when squash is passed as 1 updates the squash attribute on the MR to true merges even when squash is unavailable when squash is passed as 0 updates the squash attribute on the MR to false POST #rebase approvals pending returns 200 with a forked project behaves like approvals approve approves the merge request approvals shows approval information unapprove unapproves the merge request GlobalSearch Respect feature visibility levels Private projects does not find items if features are disabled shows items to member only if features are enabled Internal projects does not find items if features are disabled shows items to member only if features are enabled shows items to member only if features are private Public projects does not find items if features are disabled finds items if features are enabled shows items to member only if features are private Dropdown weight Starting the Capybara driver server... behavior opens when the search bar has weight: closes when the search bar is unfocused should load all the weights when opened selecting from dropdown fills in weight 1 fills in weight 2 fills in weight 3 fills in `no weight` input has existing content opens weight dropdown with existing search term opens weight dropdown with existing assignee opens weight dropdown with existing label opens weight dropdown with existing milestone GroupPolicy when epics feature is disabled should be disallowed :read_epic, :create_epic, :admin_epic, and :destroy_epic when epics feature is enabled should be allowed :read_epic, :create_epic, :admin_epic, and :destroy_epic per group SAML should be disallowed :admin_group_saml owner should be allowed :admin_group_saml admin should be allowed :admin_group_saml when LDAP sync is not enabled owner should be disallowed :override_group_member should be allowed :admin_ldap_group_links does not allow group owners to manage ldap should be disallowed :admin_ldap_group_links admin should be disallowed :override_group_member should be allowed :admin_ldap_group_links when LDAP sync is enabled with no user should be disallowed :override_group_member should be disallowed :admin_ldap_group_links guests should be disallowed :override_group_member should be disallowed :admin_ldap_group_links reporter should be disallowed :override_group_member should be disallowed :admin_ldap_group_links developer should be disallowed :override_group_member should be disallowed :admin_ldap_group_links master should be disallowed :override_group_member should be disallowed :admin_ldap_group_links owner allow group owners to manage ldap should be allowed :override_group_member does not allow group owners to manage ldap should be disallowed :override_group_member should be disallowed :admin_ldap_group_links admin should be allowed :override_group_member should be allowed :admin_ldap_group_links create_projects project_creation_level enabled when group has no project creation level set reporter should be disallowed :create_projects developer should be allowed :create_projects master should be allowed :create_projects owner should be allowed :create_projects when group has project creation level set to no one reporter should be disallowed :create_projects developer should be disallowed :create_projects master should be disallowed :create_projects owner should be disallowed :create_projects when group has project creation level set to master only reporter should be disallowed :create_projects developer should be disallowed :create_projects master should be allowed :create_projects owner should be allowed :create_projects when group has project creation level set to developers + master reporter should be disallowed :create_projects developer should be allowed :create_projects master should be allowed :create_projects owner should be allowed :create_projects project_creation_level disabled when group has no project creation level set reporter should be disallowed :create_projects developer should be disallowed :create_projects master should be allowed :create_projects owner should be allowed :create_projects when group has project creation level set to no one reporter should be disallowed :create_projects developer should be disallowed :create_projects master should be allowed :create_projects owner should be allowed :create_projects when group has project creation level set to master only reporter should be disallowed :create_projects developer should be disallowed :create_projects master should be allowed :create_projects owner should be allowed :create_projects when group has project creation level set to developers + master reporter should be disallowed :create_projects developer should be disallowed :create_projects master should be allowed :create_projects owner should be allowed :create_projects New/edit issue new issue allows user to create new issue correctly updates the selected user when changing assignee shorten users API pagination limit should display selected users even if they are not part of the original API call multiple assignees unselects other assignees when unassigned is selected toggles assign to me when current user is selected and unselected Project elastic search searching finds issues finds merge requests finds milestones finds wiki pages finds notes finds commits finds blobs Issue Boards assignee updates the issues assignee adds multiple assignees removes the assignee assignees to current user updates assignee dropdown epic when the issue is not associated with an epic displays `None` for value of epic when the issue is associated with an epic displays name of epic and links to it weight displays weight async updates weight in sidebar to 1 updates weight in sidebar to no weight Squashing merge requests when the MR has only one commit does not show the squash checkbox when squash is enabled on merge request creation shows the squash checkbox as checked when accepting with squash checked squashes the commits into a single commit, and adds a merge commit when accepting and unchecking squash accepts the merge request without squashing when squash is not enabled on merge request creation shows the squash checkbox as unchecked when accepting and checking squash squashes the commits into a single commit, and adds a merge commit when accepting with squash unchecked accepts the merge request without squashing squash is unlicensed does not show squash option when creating MR does not show squash option when viewing MR Merge request > User approves Approving by approvers from groups when group is assigned to a project I am able to approve I am able to unapprove when group is assigned to a merge request I am able to approve I am able to unapprove when CI is running but no approval given I am unable to set Merge when pipeline succeeds when merge when discussions resolved is active does not show checking ability text Merge request > User sets approvers when editing an MR with a different author does not allow setting the author as an approver but allows setting the current user as an approver when creating an MR from a fork allows setting other users as approvers but does not allow setting the current user as an approver, and filters non members from approvers list Group approvers when creating an MR allows setting groups as approvers allows delete approvers group when it is set in project when editing an MR with a different author allows setting groups as approvers allows delete approvers group when it`s set in project allows changing approvals number MergeRequest should delegate #expose_sast_data? to #head_pipeline object should delegate #base_has_sast_data? to #base_pipeline object as #has_sast_data? should delegate #head_sast_artifact to #head_pipeline object as #sast_artifact should delegate #base_sast_artifact to #base_pipeline object as #sast_artifact should delegate #expose_dast_data? to #head_pipeline object should delegate #base_has_dast_data? to #base_pipeline object as #has_dast_data? should delegate #head_dast_artifact to #head_pipeline object as #dast_artifact should delegate #base_dast_artifact to #base_pipeline object as #dast_artifact should delegate #expose_sast_container_data? to #head_pipeline object should delegate #base_has_sast_container_data? to #base_pipeline object as #has_sast_container_data? should delegate #head_sast_container_artifact to #head_pipeline object as #sast_container_artifact should delegate #base_sast_container_artifact to #base_pipeline object as #sast_container_artifact associations should have many approvals dependent => delete_all should have many approvers dependent => delete_all should have many approver_groups dependent => delete_all should have many approved_by_users #squash_in_progress? when Gitaly squash_in_progress is enabled behaves like checking whether a squash is in progress Preparing /builds/gitlab-org/gitlab-ee/tmp/tests/repositories/@hashed/2c/58/2c58b3a68ac99f845a207a613ce245b3fd2dd839320355a9778e9319f96363b2.git/gitlab-worktree/squash-126 (identifier squash-126) HEAD is now at b83d6e3 Merge branch 'branch-merged' into 'master' returns true when there is a current squash directory Preparing /builds/gitlab-org/gitlab-ee/tmp/tests/repositories/@hashed/02/52/0252b081bda70b478f0131b310a93cb8d79086d785fb4ae392a8c5ffc3ddc5fe.git/gitlab-worktree/squash-127 (identifier squash-127) HEAD is now at b83d6e3 Merge branch 'branch-merged' into 'master' returns false when there is no squash directory Preparing /builds/gitlab-org/gitlab-ee/tmp/tests/repositories/@hashed/c7/b9/c7b96125d8bb1b5ac26f057909f1a29dcd87d00ced1a9b563f3220b6d6038d66.git/gitlab-worktree/squash-128 (identifier squash-128) HEAD is now at b83d6e3 Merge branch 'branch-merged' into 'master' returns false when the squash directory has expired Preparing /builds/gitlab-org/gitlab-ee/tmp/tests/repositories/@hashed/48/e1/48e1ff78f2967629663434954e7034e9a16116b94c678174f080fb20509144dc.git/gitlab-worktree/squash-129 (identifier squash-129) HEAD is now at b83d6e3 Merge branch 'branch-merged' into 'master' returns false when the source project has been removed when Gitaly squash_in_progress is disabled behaves like checking whether a squash is in progress Preparing /builds/gitlab-org/gitlab-ee/tmp/tests/repositories/@hashed/d4/05/d40535ac09aac0ef32f8a23b8bb8e04bc2e8f9d6b0981fa98a16d0382f558d83.git/gitlab-worktree/squash-130 (identifier squash-130) HEAD is now at b83d6e3 Merge branch 'branch-merged' into 'master' returns true when there is a current squash directory Preparing /builds/gitlab-org/gitlab-ee/tmp/tests/repositories/@hashed/ef/ec/efec9aaf21433bf806e7681de337cac7dbecfbf17b22ad3bcdfe5e46e564f32f.git/gitlab-worktree/squash-131 (identifier squash-131) HEAD is now at b83d6e3 Merge branch 'branch-merged' into 'master' returns false when there is no squash directory Preparing /builds/gitlab-org/gitlab-ee/tmp/tests/repositories/@hashed/27/48/274897360371d52c0d6f5e7dcc285f914c51a39bb714f51a7a547433b143c151.git/gitlab-worktree/squash-132 (identifier squash-132) HEAD is now at b83d6e3 Merge branch 'branch-merged' into 'master' returns false when the squash directory has expired Preparing /builds/gitlab-org/gitlab-ee/tmp/tests/repositories/@hashed/ca/15/ca153fc499ffc25f1118ad5e58ff242584f3b3a285d4d9428615325613633e3e.git/gitlab-worktree/squash-133 (identifier squash-133) HEAD is now at b83d6e3 Merge branch 'branch-merged' into 'master' returns false when the source project has been removed #squash? unlicensed disabled in database should be falsy enabled in database should be falsy licensed disabled in database should be falsy licensed should be truthy #approvals_before_merge license_value: true, db_value: 5, expected: 5 should eq 5 license_value: true, db_value: nil, expected: nil should eq nil license_value: false, db_value: 5, expected: nil should eq nil license_value: false, db_value: nil, expected: nil should eq nil #base_pipeline should eq #<Ci::Pipeline id: 2, ref: "master", sha: "ae73cb07c9eeaf35924a10f713b364d32b2dd34f", before_sha: nil...il, pipeline_schedule_id: nil, source: 1, config_source: nil, protected: false, failure_reason: nil> #base_codeclimate_artifact WARNING: An expectation of `:codeclimate_artifact` was set on `nil`. To allow expectations on `nil` and suppress this message, set `RSpec::Mocks.configuration.allow_message_expectations_on_nil` to `true`. To disallow expectations on `nil`, set `RSpec::Mocks.configuration.allow_message_expectations_on_nil` to `false`. Called from /builds/gitlab-org/gitlab-ee/ee/spec/models/merge_request_spec.rb:125:in `block (3 levels) in <top (required)>'. delegates to merge request diff #head_codeclimate_artifact WARNING: An expectation of `:codeclimate_artifact` was set on `nil`. To allow expectations on `nil` and suppress this message, set `RSpec::Mocks.configuration.allow_message_expectations_on_nil` to `true`. To disallow expectations on `nil`, set `RSpec::Mocks.configuration.allow_message_expectations_on_nil` to `false`. Called from /builds/gitlab-org/gitlab-ee/ee/spec/models/merge_request_spec.rb:136:in `block (3 levels) in <top (required)>'. delegates to merge request diff #base_performance_artifact WARNING: An expectation of `:performance_artifact` was set on `nil`. To allow expectations on `nil` and suppress this message, set `RSpec::Mocks.configuration.allow_message_expectations_on_nil` to `true`. To disallow expectations on `nil`, set `RSpec::Mocks.configuration.allow_message_expectations_on_nil` to `false`. Called from /builds/gitlab-org/gitlab-ee/ee/spec/models/merge_request_spec.rb:147:in `block (3 levels) in <top (required)>'. delegates to merge request diff #head_performance_artifact WARNING: An expectation of `:performance_artifact` was set on `nil`. To allow expectations on `nil` and suppress this message, set `RSpec::Mocks.configuration.allow_message_expectations_on_nil` to `true`. To disallow expectations on `nil`, set `RSpec::Mocks.configuration.allow_message_expectations_on_nil` to `false`. Called from /builds/gitlab-org/gitlab-ee/ee/spec/models/merge_request_spec.rb:158:in `block (3 levels) in <top (required)>'. delegates to merge request diff #expose_codeclimate_data? with codeclimate data should be truthy without codeclimate data should be falsey #expose_performance_data? with performance data should be truthy without performance data should be falsey New project repository mirrors when licensed shows mirror repository checkbox enabled when unlicensed does not show mirror repository option CI/CD for external repositories when licensed shows CI/CD tab and pane "Import project" tab creates projects with features enabled creates CI/CD project from repo URL creates CI/CD project from GitHub new GitHub CI/CD project page has link to status page with ?ci_cd_only=true param stays on GitHub import page after access token failure when unlicensed does not show CI/CD only tab User approves a merge request when user can approve approves a merge request when a merge request is approved additionally shows multiple approvers beyond the needed count doesn't show the add approval when a merge request is closed when user cannot approve does not approves a merge request Service Desk Issue Tracker navigation to service desk can navigate to the service desk from link in the sidebar issues list when service desk has not been activated service desk info content when user has permissions to edit project settings displays the large info box has a link to the documentation does show a button configure service desk when user does not have permission to edit project settings does not show a button configure service desk when service desk has been activated when there are no issues service desk info content displays the large info box has a link to the documentation does not show a button configure service desk shows the service desk email address when there are issues service desk info content displays the small info box has a link to the documentation does not show a button configure service desk shows the service desk email address issues list only displays issues created by support bot search box adds hidden support bot author token support bot author token cannot be deleted Boards::IssuesController GET index with invalid board id returns a not found 404 response when list id is present with valid list id returns issues that have the list label applied with invalid list id returns a not found 404 response when list id is missing returns opened issues without board labels applied with unauthorized user returns a forbidden 403 response with external authorization returns a 404 for group boards is successful for project boards POST create with valid params returns a successful 200 response returns the created issue with invalid params when title is nil returns an unprocessable entity 422 response when list does not belongs to project board returns a not found 404 response with invalid board id returns a not found 404 response with invalid list id returns a not found 404 response with unauthorized user returns a forbidden 403 response PATCH update with valid params returns a successful 200 response moves issue to the desired list with invalid params returns a unprocessable entity 422 response for invalid lists returns a not found 404 response for invalid board id returns a not found 404 response for invalid issue id with unauthorized user returns a forbidden 403 response Project settings > [EE] Merge Requests adds approver filter approvers adds approver group with an approver group removes approver group issuable default templates feature not available input to configure merge request template is not shown issuable default templates feature is available input to configure merge request template is not shown Geo::RepositorySyncService behaves like geo base sync execution #execute when can acquire exclusive lease executes the synchronization when exclusive lease is not acquired is does not execute synchronization behaves like geo base sync fetch and repack #fetch_repository cleans up temporary repository updates registry fetches repository from geo node redownload fetches repository from geo node into temporary location schedule git repack repository does not exist ensures repository is created schedule git repack #execute fetches project repository with JWT credentials expires repository caches returns the lease when succeed voids the failure message when it succeeds after an error returns the lease when sync fail does not fetch project repository if cannot obtain a lease rescues when Gitlab::Shell::Error is raised rescues when Gitlab::Git::RepositoryMirroring::RemoteError is raised rescues exception and fires after_create hook when Gitlab::Git::Repository::NoRepository is raised increases retry count when Gitlab::Git::Repository::NoRepository is raised marks sync as successful if no repository found tracking database creates a new registry if does not exists does not create a new registry if one exist temporary repositories there is a leftover repository removes leftover repository when repository sync succeed sets last_repository_synced_at sets last_repository_successful_sync_at resets the repository_verification_checksum_sha resets the last_repository_verification_failure resets the repository_checksum_mismatch logs success with timings sets repository_retry_count and repository_retry_at to nil with non empty repositories syncs gitattributes to info/attributes when repository sync fail sets last_repository_synced_at resets last_repository_successful_sync_at resets repository_retry_count resets repository_retry_at sets last_repository_sync_failure retries tries to fetch repo sets the redownload flag to false after success tries to redownload repo tries to redownload repo when force_redownload flag is set cleans temporary repo after redownload successfully redownloads the repository even if the retry time exceeds max value no repository does not raise an error behaves like sync retries use the snapshot RPC snapshot synchronization method does not attempt to snapshot for initial sync does not attempt to snapshot for ordinary retries registry is ready to be snapshotted attempts to snapshot attempts to fetch if snapshotting raises an exception does not attempt to snapshot if the feature flag is disabled #schedule_repack schedule GitGarbageCollectWorker for full repack Groups::EpicIssuesController GET #index behaves like unlicensed epics action returns 400 status when epics feature is enabled returns status 200 returns the correct json POST #create behaves like unlicensed epics action returns 400 status when epics feature is enabled when user has permissions to create requested association returns correct response for the correct issue reference creates a new EpicIssue record when user does not have permissions to create requested association returns correct response for the correct issue reference does not create a new EpicIssue record DELETE #destroy behaves like unlicensed epics action returns 400 status when epics feature is enabled when user has permissions to delete the link returns status 200 destroys the link when user does not have permissions to delete the link returns status 404 does not destroy the link when the epic from the association does not equal epic from the path returns status 404 does not destroy the link when the epic_issue record does not exists returns status 404 PUT #update behaves like unlicensed epics action returns 400 status when epics feature is enabled when user has permissions to admin the epic returns status 200 updates the issue position value when user does not have permissions to admin the epic returns status 404 when the epic from the association does not equal epic from the path returns status 404 when the epic_issue record does not exists returns status 404 ElasticIndexerWorker returns true if ES disabled Indexing new records indexes a project indexes an issue indexes a note indexes a milestone indexes a merge request Updating index updates a project updates an issue updates a note updates a milestone updates a merge request Delete deletes a project with all nested objects deletes an issue deletes a note deletes a milestone deletes a merge request Discussion Comments Epic behaves like discussion comments clicking "Comment" will post a comment when the toggle is clicked has a "Comment" item (selected by default) and "Start discussion" item closes the menu when clicking the toggle or body clicking the ul padding or divider should not change the text when selecting "Start discussion" updates the submit button text and closes the dropdown creating a discussion clicking "Start discussion" will post a discussion when opening the menu should have "Start discussion" selected when selecting "Comment" updates the submit button text and closes the dropdown should have "Comment" selected when opening the menu Projects::UpdateRemoteMirrorService #execute 2018-05-02T15:22:36.318Z 130 TID-bla08 INFO: Removing remote remote_mirror_1 from project 1342 2018-05-02T15:22:36.321Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_1 from project 1342 does nothing when unlicensed 2018-05-02T15:22:36.620Z 130 TID-bla08 INFO: Removing remote remote_mirror_2 from project 1344 2018-05-02T15:22:36.623Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_2 from project 1344 fetches the remote repository 2018-05-02T15:22:37.091Z 130 TID-bla08 INFO: Removing remote remote_mirror_3 from project 1346 2018-05-02T15:22:37.094Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_3 from project 1346 succeeds Syncing branches 2018-05-02T15:22:37.494Z 130 TID-bla08 INFO: Removing remote remote_mirror_4 from project 1348 2018-05-02T15:22:37.498Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_4 from project 1348 push all the branches the first time 2018-05-02T15:22:37.880Z 130 TID-bla08 INFO: Removing remote remote_mirror_5 from project 1350 2018-05-02T15:22:37.883Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_5 from project 1350 does not push anything is remote is up to date 2018-05-02T15:22:38.252Z 130 TID-bla08 INFO: Removing remote remote_mirror_6 from project 1352 2018-05-02T15:22:38.255Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_6 from project 1352 sync new branches 2018-05-02T15:22:38.621Z 130 TID-bla08 INFO: Removing remote remote_mirror_7 from project 1354 2018-05-02T15:22:38.624Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_7 from project 1354 sync updated branches when push only protected branches option is set 2018-05-02T15:22:39.011Z 130 TID-bla08 INFO: Removing remote remote_mirror_8 from project 1356 2018-05-02T15:22:39.015Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_8 from project 1356 sync updated protected branches 2018-05-02T15:22:39.414Z 130 TID-bla08 INFO: Removing remote remote_mirror_9 from project 1358 2018-05-02T15:22:39.418Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_9 from project 1358 does not sync unprotected branches when branch exists in local and remote repo when it has diverged 2018-05-02T15:22:39.797Z 130 TID-bla08 INFO: Removing remote remote_mirror_10 from project 1360 2018-05-02T15:22:39.800Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_10 from project 1360 syncs branches for delete when branch exists in local and remote repo 2018-05-02T15:22:40.178Z 130 TID-bla08 INFO: Removing remote remote_mirror_11 from project 1362 2018-05-02T15:22:40.182Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_11 from project 1362 deletes the branch from remote repo when push only protected branches option is set when branch exists in local and remote repo 2018-05-02T15:22:40.557Z 130 TID-bla08 INFO: Removing remote remote_mirror_12 from project 1364 2018-05-02T15:22:40.560Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_12 from project 1364 deletes the protected branch from remote repo 2018-05-02T15:22:41.013Z 130 TID-bla08 INFO: Removing remote remote_mirror_13 from project 1366 2018-05-02T15:22:41.016Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_13 from project 1366 does not delete the unprotected branch from remote repo when branch only exists on remote repo when it has diverged 2018-05-02T15:22:41.382Z 130 TID-bla08 INFO: Removing remote remote_mirror_14 from project 1368 2018-05-02T15:22:41.385Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_14 from project 1368 does not delete the remote branch when it has not diverged 2018-05-02T15:22:41.746Z 130 TID-bla08 INFO: Removing remote remote_mirror_15 from project 1370 2018-05-02T15:22:41.749Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_15 from project 1370 deletes the remote branch when branch only exists on remote repo when it has diverged 2018-05-02T15:22:42.109Z 130 TID-bla08 INFO: Removing remote remote_mirror_16 from project 1372 2018-05-02T15:22:42.113Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_16 from project 1372 does not delete the remote branch when it has not diverged 2018-05-02T15:22:42.466Z 130 TID-bla08 INFO: Removing remote remote_mirror_17 from project 1374 2018-05-02T15:22:42.469Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_17 from project 1374 deletes the remote branch Syncing tags when there are not tags to push 2018-05-02T15:22:42.826Z 130 TID-bla08 INFO: Removing remote remote_mirror_18 from project 1376 2018-05-02T15:22:42.829Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_18 from project 1376 does not try to push tags when there are some tags to push 2018-05-02T15:22:43.199Z 130 TID-bla08 INFO: Removing remote remote_mirror_19 from project 1378 2018-05-02T15:22:43.202Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_19 from project 1378 pushes tags to remote when there are some tags to delete 2018-05-02T15:22:43.639Z 130 TID-bla08 INFO: Removing remote remote_mirror_20 from project 1380 2018-05-02T15:22:43.643Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_20 from project 1380 deletes tags from remote Ldap::OmniauthCallbacksController displays LDAP sync flash on first sign in skips LDAP sync flash on subsequent sign ins access denied logs a failure event Groups::AnalyticsController returns 404 when feature is not available and we dont show promotions sets instance variables properly returns member contributions JSON when format is JSON does not cause N+1 queries when the format is JSON unlicensed but we show promotions returns page when feature is not available and we show promotions with views avoids a N+1 query in #show GET #index behaves like disabled when using an external authorization service works when the feature is not enabled renders a 404 with a message when the feature is enabled Projects::CreateService#execute with a CI/CD only project when CI/CD projects feature is available calls the service to setup CI/CD on the project when CI/CD projects feature is not available doesn't call the service to setup CI/CD on the project repository_size_limit assignment as Bytes when param present assign repository_size_limit as Bytes when param not present assign nil value without repository mirror sets the mirror to false with repository mirror when licensed sets the correct attributes with mirror trigger builds sets the mirror trigger builds with checks on the namespace when not licensed on a namespace does not allow enabeling mirrors when licensed on a namespace allows enabling mirrors when unlicensed does not set mirror attributes with mirror trigger builds sets the mirror trigger builds git hook sample creates git hook from sample push rules unlicensed ignores the push rule sample when running on a primary node logs an event to the Geo event log does not log event to the Geo log if project creation fails when importing Project by repo URL and check namespace plan is enabled creates the project audit events does not log audit event if project operation fails if operation succeed logs an audit event if operation succeed logs the project info admin Geo Nodes show all public Geo Nodes and create new node link create a new Geo Nodes creates a new Geo Node returns an error message when a duplicate primary is added update an existing Geo Node updates an existing Geo Node remove an existing Geo Node removes an existing Geo Node Notify for a project for merge requests that are new with approver contains the approvers list that are approved is sent as the last approver has the correct subject contains the new status contains a link to the merge request contains the names of all of the approvers behaves like a multiple recipients email is sent to the given recipient behaves like an answer to an existing thread with reply-by-email enabled has X-GitLab-Project headers has X-GitLab-Project headers has the characteristics of a threaded reply when reply-by-email is enabled with incoming address with %{key} has a Reply-To header when reply-by-email is enabled with incoming address without %{key} has X-GitLab-Project headers has the characteristics of a threaded reply has a Reply-To header behaves like it should show Gmail Actions View Merge request link should have body including "View Merge request" behaves like it should have Gmail Actions links should have body including "ViewAction" behaves like an unsubscribeable thread has a List-Unsubscribe header in the correct format, and a body link behaves like an unsubscribeable thread with incoming address without %{key} has a List-Unsubscribe header in the correct format, and a body link when merge request has no assignee does not show the assignee that are unapproved is sent as the last unapprover has the correct subject contains the new status contains a link to the merge request contains the names of all of the approvers behaves like a multiple recipients email is sent to the given recipient behaves like an answer to an existing thread with reply-by-email enabled has X-GitLab-Project headers has X-GitLab-Project headers has the characteristics of a threaded reply when reply-by-email is enabled with incoming address with %{key} has a Reply-To header when reply-by-email is enabled with incoming address without %{key} has X-GitLab-Project headers has the characteristics of a threaded reply has a Reply-To header behaves like it should show Gmail Actions View Merge request link should have body including "View Merge request" behaves like it should have Gmail Actions links should have body including "ViewAction" behaves like an unsubscribeable thread has a List-Unsubscribe header in the correct format, and a body link behaves like an unsubscribeable thread with incoming address without %{key} has a List-Unsubscribe header in the correct format, and a body link for merge requests without assignee that are unapproved contains the new status Projects > Push Rules reject_unsigned_commits rule unlicensed does not render the setting checkbox licensed renders the setting checkbox with GL.com plans when disabled does not render the setting checkbox when enabled renders the setting checkbox commit_committer_check rule unlicensed does not render the setting checkbox licensed renders the setting checkbox with GL.com plans when disabled does not render the setting checkbox when enabled renders the setting checkbox Ci::Build .codequality when a job name is codequality should include #<Ci::Build id: 1, status: "pending", finished_at: nil, trace: nil, created_at: "2018-05-02 08:50:29"... 1, artifacts_file_store: nil, artifacts_metadata_store: nil, protected: false, failure_reason: nil> when a job name is codeclimate should include #<Ci::Build id: 2, status: "pending", finished_at: nil, trace: nil, created_at: "2018-05-02 08:50:29"... 2, artifacts_file_store: nil, artifacts_metadata_store: nil, protected: false, failure_reason: nil> when a job name is irrelevant should not include #<Ci::Build id: 3, status: "pending", finished_at: nil, trace: nil, created_at: "2018-05-02 08:50:29"... 3, artifacts_file_store: nil, artifacts_metadata_store: nil, protected: false, failure_reason: nil> #shared_runners_minutes_limit_enabled? for shared runner should be truthy with specific runner should be falsey without runner should be falsey updates pipeline minutes for event success for event drop for event cancel #stick_build_if_status_changed sticks the build if the status changed #variables when environment specific variable is defined when variable environment scope is available should include {:key => "ENV_KEY", :value => "environment", :public => false} when variable environment scope is not available should not include {:key => "ENV_KEY", :value => "environment", :public => false} when there is a plan for the group GITLAB_FEATURES should include the features for that plan #has_codeclimate_json? valid build should be truthy invalid build should be falsey #has_performance_json? valid build should be truthy invalid build should be falsey #has_sast_json? valid build should be truthy invalid build should be falsey #has_dependency_scanning_json? valid build should be truthy invalid build should be falsey #has_sast_container_json? valid build should be truthy invalid build should be falsey #has_dast_json? valid build should be truthy invalid build should be falsey RemoteMirror URL validation with a valid URL should be valid with an invalid URL should not be valid encrypting credentials when setting URL for a first time 2018-05-02T15:24:41.029Z 130 TID-bla08 INFO: Removing remote remote_mirror_21 from project 1444 2018-05-02T15:24:41.035Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_21 from project 1444 stores the URL without credentials 2018-05-02T15:24:41.206Z 130 TID-bla08 INFO: Removing remote remote_mirror_22 from project 1445 2018-05-02T15:24:41.211Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_22 from project 1445 stores the credentials on a separate field 2018-05-02T15:24:41.376Z 130 TID-bla08 INFO: Removing remote remote_mirror_23 from project 1446 2018-05-02T15:24:41.383Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_23 from project 1446 handles credentials with large content when updating the URL 2018-05-02T15:24:41.545Z 130 TID-bla08 INFO: Removing remote remote_mirror_24 from project 1447 2018-05-02T15:24:41.551Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_24 from project 1447 2018-05-02T15:24:41.564Z 130 TID-bla08 INFO: Removing remote remote_mirror_7f96f03770537d8bc3adb6bb3c321fb1 from project 1447 2018-05-02T15:24:41.570Z 130 TID-bla08 INFO: Remote remote_mirror_7f96f03770537d8bc3adb6bb3c321fb1 was successfully removed from project 1447 allows a new URL without credentials 2018-05-02T15:24:41.733Z 130 TID-bla08 INFO: Removing remote remote_mirror_25 from project 1448 2018-05-02T15:24:41.738Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_25 from project 1448 2018-05-02T15:24:41.754Z 130 TID-bla08 INFO: Removing remote remote_mirror_d88ad509409e32291d13c60618be5a87 from project 1448 2018-05-02T15:24:41.760Z 130 TID-bla08 INFO: Remote remote_mirror_d88ad509409e32291d13c60618be5a87 was successfully removed from project 1448 allows a new URL with credentials 2018-05-02T15:24:41.929Z 130 TID-bla08 INFO: Removing remote remote_mirror_26 from project 1449 2018-05-02T15:24:41.937Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_26 from project 1449 2018-05-02T15:24:41.953Z 130 TID-bla08 INFO: Removing remote remote_mirror_4b270e030e828b272383b8e6f4ffb3d9 from project 1449 2018-05-02T15:24:41.961Z 130 TID-bla08 INFO: Remote remote_mirror_4b270e030e828b272383b8e6f4ffb3d9 was successfully removed from project 1449 updates the remote config if credentials changed 2018-05-02T15:24:42.202Z 130 TID-bla08 INFO: Removing remote remote_mirror_27 from project 1450 2018-05-02T15:24:42.209Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_27 from project 1450 2018-05-02T15:24:42.227Z 130 TID-bla08 INFO: Removing remote remote_mirror_707af8ad7719e600f076eb6280fcbd28 from project 1450 2018-05-02T15:24:42.233Z 130 TID-bla08 INFO: Remote remote_mirror_707af8ad7719e600f076eb6280fcbd28 was successfully removed from project 1450 removes previous remote #remote_name when remote name is persisted in the database 2018-05-02T15:24:42.395Z 130 TID-bla08 INFO: Removing remote remote_mirror_28 from project 1451 2018-05-02T15:24:42.400Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_28 from project 1451 returns remote name with random value when remote name is not persisted in the database 2018-05-02T15:24:42.566Z 130 TID-bla08 INFO: Removing remote remote_mirror_29 from project 1452 2018-05-02T15:24:42.572Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_29 from project 1452 returns remote name with remote mirror id when remote is not persisted in the database returns nil #safe_url when URL contains credentials 2018-05-02T15:24:42.893Z 130 TID-bla08 INFO: Removing remote remote_mirror_30 from project 1454 2018-05-02T15:24:42.898Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_30 from project 1454 masks the credentials when URL does not contain credentials 2018-05-02T15:24:43.300Z 130 TID-bla08 INFO: Removing remote remote_mirror_31 from project 1455 2018-05-02T15:24:43.306Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_31 from project 1455 shows the full URL when remote mirror gets destroyed 2018-05-02T15:24:43.481Z 130 TID-bla08 INFO: Removing remote remote_mirror_32 from project 1456 2018-05-02T15:24:43.486Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_32 from project 1456 2018-05-02T15:24:43.491Z 130 TID-bla08 INFO: Removing remote remote_mirror_833a911b5b6e04104f952496a8ef396e from project 1456 2018-05-02T15:24:43.496Z 130 TID-bla08 INFO: Remote remote_mirror_833a911b5b6e04104f952496a8ef396e was successfully removed from project 1456 removes remote stuck mirrors 2018-05-02T15:24:43.675Z 130 TID-bla08 INFO: Removing remote remote_mirror_33 from project 1457 2018-05-02T15:24:43.680Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_33 from project 1457 includes mirrors stuck in started with no last_update_at set #sync repository mirrors not licensed 2018-05-02T15:24:43.685Z 130 TID-bla08 INFO: Removing remote remote_mirror_34 from project 1458 2018-05-02T15:24:43.685Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_34 from project 1458 does not schedule RepositoryUpdateRemoteMirrorWorker with remote mirroring disabled 2018-05-02T15:24:43.866Z 130 TID-bla08 INFO: Removing remote remote_mirror_35 from project 1459 2018-05-02T15:24:43.866Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_35 from project 1459 returns nil as a Geo secondary 2018-05-02T15:24:44.096Z 130 TID-bla08 INFO: Removing remote remote_mirror_36 from project 1460 2018-05-02T15:24:44.096Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_36 from project 1460 returns nil with remote mirroring enabled with only protected branches enabled when it did not update in the last minute 2018-05-02T15:24:44.302Z 130 TID-bla08 INFO: Removing remote remote_mirror_37 from project 1461 2018-05-02T15:24:44.302Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_37 from project 1461 schedules a RepositoryUpdateRemoteMirrorWorker to run now when it did update in the last minute 2018-05-02T15:24:44.483Z 130 TID-bla08 INFO: Removing remote remote_mirror_38 from project 1462 2018-05-02T15:24:44.483Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_38 from project 1462 schedules a RepositoryUpdateRemoteMirrorWorker to run in the next minute with only protected branches disabled when it did not update in the last 5 minutes 2018-05-02T15:24:44.663Z 130 TID-bla08 INFO: Removing remote remote_mirror_39 from project 1463 2018-05-02T15:24:44.663Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_39 from project 1463 schedules a RepositoryUpdateRemoteMirrorWorker to run now when it did update within the last 5 minutes 2018-05-02T15:24:44.842Z 130 TID-bla08 INFO: Removing remote remote_mirror_40 from project 1464 2018-05-02T15:24:44.842Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_40 from project 1464 schedules a RepositoryUpdateRemoteMirrorWorker to run in the next 5 minutes #updated_since? when remote mirror does not have status failed 2018-05-02T15:24:45.075Z 130 TID-bla08 INFO: Removing remote remote_mirror_41 from project 1465 2018-05-02T15:24:45.075Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_41 from project 1465 returns true when last update started after the timestamp 2018-05-02T15:24:45.298Z 130 TID-bla08 INFO: Removing remote remote_mirror_42 from project 1466 2018-05-02T15:24:45.298Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_42 from project 1466 returns false when last update started before the timestamp when remote mirror has status failed 2018-05-02T15:24:45.563Z 130 TID-bla08 INFO: Removing remote remote_mirror_43 from project 1467 2018-05-02T15:24:45.563Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_43 from project 1467 returns false when last update started after the timestamp no project 2018-05-02T15:24:45.910Z 130 TID-bla08 INFO: Removing remote remote_mirror_44 from project 1468 2018-05-02T15:24:45.915Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_44 from project 1468 includes mirror with a project in pending_delete PushRulesHelper global_setting: true, enabled_globally: true, enabled_in_project: false, current_user: :admin, help_text: :default_admin_help, invalid_text: nil has the correct help text has the correct help text global_setting: true, enabled_globally: false, enabled_in_project: false, current_user: :admin, help_text: :default_admin_help, invalid_text: nil has the correct help text has the correct help text global_setting: true, enabled_globally: true, enabled_in_project: true, current_user: :admin, help_text: :default_admin_help, invalid_text: nil has the correct help text has the correct help text global_setting: true, enabled_globally: false, enabled_in_project: true, current_user: :admin, help_text: :default_admin_help, invalid_text: nil has the correct help text has the correct help text global_setting: false, enabled_globally: true, enabled_in_project: nil, current_user: :admin, help_text: :setting_can_be_overridden, invalid_text: nil has the correct help text has the correct help text global_setting: false, enabled_globally: true, enabled_in_project: nil, current_user: :owner, help_text: :setting_can_be_overridden, invalid_text: nil has the correct help text has the correct help text global_setting: false, enabled_globally: true, enabled_in_project: nil, current_user: :owner, help_text: :requires_admin_contact, invalid_text: nil has the correct help text has the correct help text global_setting: false, enabled_globally: true, enabled_in_project: false, current_user: :admin, help_text: :setting_has_been_overridden, invalid_text: nil has the correct help text has the correct help text global_setting: false, enabled_globally: true, enabled_in_project: false, current_user: :owner, help_text: :setting_has_been_overridden, invalid_text: nil has the correct help text has the correct help text global_setting: false, enabled_globally: true, enabled_in_project: false, current_user: :owner, help_text: :requires_admin_contact, invalid_text: nil has the correct help text has the correct help text global_setting: false, enabled_globally: true, enabled_in_project: true, current_user: :owner, help_text: :setting_can_be_overridden, invalid_text: nil has the correct help text has the correct help text global_setting: false, enabled_globally: true, enabled_in_project: false, current_user: :owner, help_text: :setting_has_been_overridden, invalid_text: nil has the correct help text has the correct help text global_setting: false, enabled_globally: true, enabled_in_project: true, current_user: :owner, help_text: :requires_admin_contact, invalid_text: :setting_has_been_overridden has the correct help text has the correct help text global_setting: false, enabled_globally: true, enabled_in_project: false, current_user: :owner, help_text: :requires_admin_contact, invalid_text: :setting_can_be_overridden has the correct help text has the correct help text global_setting: false, enabled_globally: false, enabled_in_project: true, current_user: :admin, help_text: :base_help, invalid_text: :setting_can_be_overridden has the correct help text has the correct help text global_setting: false, enabled_globally: false, enabled_in_project: true, current_user: :admin, help_text: :base_help, invalid_text: :setting_has_been_overridden has the correct help text has the correct help text User activates GitHub Service without a license is excluded from the integrations index renders 404 when trying to access service settings directly with valid license activates service with pipelines tests service before save EpicIssues::UpdateService #execute when moving issues between different epics returns an error does not change the relative_position values moving issue to the first position when some positions are close to each other orders issues correctly when there is enough place between positions orders issues correctly moving issue to the third position when some positions are close to each other orders issues correctly when all positions are same orders affected 2 issues correctly when there is enough place between positions orders issues correctly moving issues to the last position when index of the last possition is correct orders issues correctly Global elastic search I search through the issues and I see pagination has a pagination I search through the blobs finds files I search through the wiki blobs finds files I search through the commits finds commits group epic roadmap when epics exist for the group roadmap page renders the filtered search bar correctly renders roadmap view renders all group epics within roadmap roadmap page with filter applied renders filtered search bar with applied filter token renders roadmap view with matching epic when no epics exist for the group roadmap page does not render the filtered search bar API::ProjectPushRule ProjectPushRule GET /projects/:id/push_rule authorized user returns project push rule unauthorized user does not have access to project push rule POST /projects/:id/push_rule adds push rule to project with no file size returns 400 if no parameter is given authorized user adds push rule to project unauthorized user does not add push rule to project POST /projects/:id/push_rule with existing push rule does not add push rule to project PUT /projects/:id/push_rule updates an existing project push rule returns 400 if no parameter is given PUT /projects/:id/push_rule gets error on non existing project push rule does not update push rule for unauthorized user DELETE /projects/:id/push_rule authorized user deletes push rule from project unauthorized user returns a 403 error DELETE /projects/:id/push_rule for non existing push rule deletes push rule from project returns a 403 error if not authorized Admin::AuditLogs unlicensed returns 404 licensed has Audit Log button in head nav bar user events filters by user group events filters by group project events filters by project API::ProjectMirror POST /projects/:id/mirror/pull when the project is not mirrored returns error when the project is mirrored when import state is none it triggers the pull mirroring operation failed it triggers the pull mirroring operation finished it triggers the pull mirroring operation scheduled does not trigger the pull mirroring operation and returns 200 started does not trigger the pull mirroring operation and returns 200 when user is unauthenticated returns authentication error is authenticated as developer returns forbidden error is authenticated as reporter returns forbidden error is authenticated as guest returns forbidden error is authenticated as master triggers the pull mirroring operation is authenticated as owner triggers the pull mirroring operation authenticating from GitHub signature when it's valid syncs the mirror when it's invalid doesn't sync the mirror with a public project returns a 401 status with an internal project returns a 404 status with a private project returns a 404 status Assign labels to an epic when label is referenced creates new system note with label pointing to epics index page when labels icon is clicked on collapsed sidebar expands sidebar opens labels dropdown collapses sidebar when clicked outside Projects::IssuesController GET #index behaves like unauthorized when external service denies access allows access when the authorization service allows it allows access when the authorization service denies it POST export_csv unlicensed returns 404 globally licensed allows CSV export anonymous user redirects to the sign in page licensed by namespace allows CSV export issue weights licensed #index allows sorting by weight allows filtering by weight #update sets issue weight #create sets issue weight unlicensed #index ignores filtering by weight #update does not set issue weight #create does not set issue weight GET service_desk when Service Desk is available on the project adds an author filter for the support bot user does not allow any other author to be set supports other filters allows an assignee to be specified by id when Service Desk is not available on the project returns a 404 EpicsFinder #execute when epics feature is disabled raises an exception when epics feature is enabled without param raises an error when group_id param is missing when user can not read epics of a group raises an error when group_id param is missing with correct params returns all epics that belong to the given group by created_at returns all epics created before the given date returns all epics created after the given date returns all epics created within the given interval by search returns all epics that match the search by author returns all epics authored by the given user by label returns all epics with given label when subgroups are supported returns all epics that belong to the given group and its subgroups by timeframe returns epics which start in the timeframe returns epics which end in the timeframe returns epics which start before and end after the timeframe #row_count returns number of rows when epics are grouped Groups > Pipeline Quota with no quota is not linked within the group settings dropdown shows correct group quota info with no projects using shared runners is not linked within the group settings dropdown shows correct group quota info minutes under quota is linked within the group settings tab shows correct group quota info minutes over quota is linked within the group settings tab shows correct group quota and projects info with shared_runner_minutes_on_root_namespace disabled when accessing group with subgroups does not show project of subgroup with shared_runner_minutes_on_root_namespace enabled when accessing subgroup does not show subproject when accesing root group does show projects of subgroup Projects::MergeRequests::CreationsController POST #create the approvals_before_merge param when it is less than the one in the target project sets the param to nil creates the merge request when it is equal to the one in the target project sets the param to nil creates the merge request when it is greater than the one in the target project saves the param in the merge request creates the merge request when the target project is a fork of a deleted project uses the default from the target project creates the merge request Milestones on EE burndown charts with the burndown chart feature available shows a burndown chart when a closed issue do not have closed events shows warning when all closed issues do not have closed events shows warning and hides burndown data is accurate does not show warning with due & start date not set shows a mention to fill in dates with the burndown chart feature disabled has a link to upgrade to Bronze when checking the namespace plan has a link to upgrade to starter on premise with the issuable weights feature disabled has a link to upgrade to Bronze when checking the namespace plan has a link to upgrade to starter on premise milestone summary shows the total weight when sum is greater than zero hides the total weight when sum is equal to zero ProjectImportData validations should validate that :auth_method is either ‹nil›, ‹""›, ‹"password"›, or ‹"ssh_public_key"› #ssh_key_auth? import_url: "ssh://example.com", auth_method: "ssh_public_key", expected: true should eq true import_url: "ssh://example.com", auth_method: "password", expected: false should eq false import_url: "http://example.com", auth_method: "ssh_public_key", expected: false should eq false import_url: "http://example.com", auth_method: "password", expected: false should eq false #ssh_known_hosts_verified_by is a user when ssh_known_hosts_verified_by_id is a valid id is nil when ssh_known_hosts_verified_by_id is an invalid id is nil when ssh_known_hosts_verified_by_id is nil auth_method returns 'password' when nil returns 'password' when "" credential fields accessors should contain exactly :auth_method, :password, :ssh_known_hosts, :ssh_known_hosts_verified_at, :ssh_known_hosts_verified_by_id, :ssh_private_key, and :user field: :auth_method sets the value in the credentials hash sets a not-present value to nil returns the data in the credentials hash field: :password sets the value in the credentials hash sets a not-present value to nil returns the data in the credentials hash field: :ssh_known_hosts sets the value in the credentials hash sets a not-present value to nil returns the data in the credentials hash field: :ssh_known_hosts_verified_at sets the value in the credentials hash sets a not-present value to nil returns the data in the credentials hash field: :ssh_known_hosts_verified_by_id sets the value in the credentials hash sets a not-present value to nil returns the data in the credentials hash field: :ssh_private_key sets the value in the credentials hash sets a not-present value to nil returns the data in the credentials hash field: :user sets the value in the credentials hash sets a not-present value to nil returns the data in the credentials hash #ssh_import? import_url: "ssh://example.com", expected: true should eq true import_url: "git://example.com", expected: false should eq false import_url: "http://example.com", expected: false should eq false import_url: "https://example.com", expected: false should eq false import_url: nil, expected: nil should eq nil #ssh_known_hosts_fingerprints defers to SshHostKey#fingerprint_host_keys #ssh_public_key no SSH key should be nil with SSH key returns the public counterpart of the SSH private key #regenerate_ssh_private_key auth_method is password regenerates the SSH private key auth_method is ssh_public_key regenerates the SSH private key Gitlab::Chat::Command #try_create_pipeline returns nil when the command is not valid tries to create the pipeline when a command is valid #create_pipeline creates the pipeline creates the chat data for the pipeline stores the chat name ID in the chat data stores the response URL in the chat data creates the environment variables for the pipeline API::MergeRequestApprovals GET :id/merge_requests/:merge_request_iid/approvals retrieves the approval status POST :id/merge_requests/:merge_request_iid/approvals as a project admin behaves like user allowed to override approvals required when disable_overriding_approvers_per_merge_request is false on the project allows you to override approvals required does not allow approvals required under what the project requires when project approvals are not enabled does not allow you to override approvals required when disable_overriding_approvers_per_merge_request is true on the project does not allow you to override approvals required as a global admin behaves like user allowed to override approvals required when disable_overriding_approvers_per_merge_request is false on the project allows you to override approvals required does not allow approvals required under what the project requires when project approvals are not enabled does not allow you to override approvals required when disable_overriding_approvers_per_merge_request is true on the project does not allow you to override approvals required as a random user does not allow you to override approvals required PUT :id/merge_requests/:merge_request_iid/approvers as a project admin behaves like user allowed to change approvers when disable_overriding_approvers_per_merge_request is true on the project does not allow overriding approvers when disable_overriding_approvers_per_merge_request is false on the project allows overriding approvers removes approvers not in the payload as a global admin behaves like user allowed to change approvers when disable_overriding_approvers_per_merge_request is true on the project does not allow overriding approvers when disable_overriding_approvers_per_merge_request is false on the project allows overriding approvers removes approvers not in the payload as a random user does not allow overriding approvers POST :id/merge_requests/:merge_request_iid/approve as the author of the merge request returns a 401 as a valid approver when the sha param is not set approves the merge request when the sha param is correct approves the merge request when the sha param is incorrect returns a 409 does not approve the merge request POST :id/merge_requests/:merge_request_iid/unapprove as a user who has approved the merge request unapproves the merge request ProjectsController POST create with licensed repository mirrors has mirror enabled in new project with unlicensed repository mirrors has mirror disabled in new project PUT #update updates EE attributes updates Merge Request Approvers attributes updates Issuable Default Templates attributes updates Service Desk attributes repository mirrors when licensed updates repository mirror attributes when unlicensed does not update repository mirror attributes external authaurization service attributes updates the project classification label does not update the project classification label when the feature is not available behaves like unauthorized when external service denies access allows access when the authorization service allows it allows access when the authorization service denies it updates when the service allows access does not update when the service rejects access Projects::PushRulesController #update updates the push rule push rules unlicensed returns 404 Updating reject_unsigned_commits rule as an admin updates the setting as a master user when global setting is disabled updates the setting when global setting is enabled does not update the setting as a developer user does not update the setting Updating commit_committer_check rule as an admin updates the setting as a master user when global setting is disabled updates the setting when global setting is enabled does not update the setting as a developer user does not update the setting IssueLinks::ListService #execute user can see all issues ensures no N+1 queries are made returns related issues JSON referencing a public project issue presents issue referencing issue with removed relationships when referenced a deleted issue ignores issue when referenced an issue with deleted project ignores issue when referenced an issue with deleted namespace ignores issue user cannot see relations when user cannot see the referenced issue returns an empty list when user cannot see the issue that referenced returns an empty list remove relations user can admin related issues just on target project returns no destroy relation path user can admin related issues just on source project returns no destroy relation path when user can admin related issues on both projects returns related issue destroy relation path EE::NotificationService with external authentication service sends email when the service is not enabled when the service is enabled does not send an email still delivers email to admins service desk issues a non-service-desk issue doesn't send the email a service-desk issue sends the email where the project has disabled the feature doesn't send the email when the license doesn't allow service desk doesn't send the email when the support bot has unsubscribed doesn't send the email mirror hard failed when the project has invited members sends email when user is owner sends email when owner is blocked does not send email when project belongs to group does not send email to the blocked owner when user is master sends email when user is not owner nor master does not send email when user is group owner sends email when user is group master sends email mirror user changed sends email Merge request > User merges with Push Rules commit message is invalid displays error message after merge request is clicked author email is invalid displays error message after merge request is clicked New Epic empty epic list when user who is not a group member views the epic list does not show the create button when user with owner views the epic list does show the create button has epics in list when user who is not a group member views the epic list does not show the create button when user with owner views the epic list does show the create button can create epic Pipeline GET /:project/pipelines/:id/security with a sast artifact shows jobs tab pane as active shows security report section without sast artifact displays the pipeline graph EE::DeploymentPlatform #deployment_platform when environment is specified when environment scope is exactly matched behaves like matching environment scope when multiple clusters license is available returns environment specific cluster when multiple clusters licence is unavailable returns a kubernetes platform when environment scope is matched by wildcard behaves like matching environment scope when multiple clusters license is available returns environment specific cluster when multiple clusters licence is unavailable returns a kubernetes platform when environment scope does not match behaves like not matching environment scope when multiple clusters license is available returns default cluster when multiple clusters license is unavailable returns a kubernetes platform when environment scope has _ does not treat it as wildcard when environment name contains an underscore matches literally for _ when environment scope has % does not treat it as wildcard when environment name contains a percent char matches literally for % when perfectly matched cluster exists returns perfectly matched cluster as highest precedence with multiple clusters and multiple environments should return the appropriate cluster Namespace should have one namespace_statistics should belong to plan should delegate #shared_runners_minutes to #namespace_statistics object should delegate #shared_runners_seconds to #namespace_statistics object should delegate #shared_runners_seconds_last_reset to #namespace_statistics object scopes .with_plan plan is set returns namespaces with plan plan is not set plan is empty string returns no namespace plan is nil returns no namespace custom validations #validate_plan_name with a valid plan name is valid with an invalid plan name is invalid #validate_shared_runner_minutes_support when changing :shared_runners_minutes_limit when group is subgroup is invalid when group is root is valid #move_dir when running on a primary node logs the Geo::RepositoryRenamedEvent for each project inside namespace #feature_available? uses the global setting when running on premise only checks the plan once when checking namespace plan combines the global setting with the group setting when not running on premise when feature available on the plan when feature available for current group returns true when license is applied to parent group child group has feature available when feature not available in the plan returns false when the feature is temporarily available on the entire instance returns true when the feature is available globally returns `false` when the feature is not included in the global license #max_active_pipelines when there is no limit defined returns zero when free plan has limit defined returns a free plan limits when associated plan has no limit defined returns zero when limit is defined returns a number of maximum active pipelines #max_pipeline_size when there are no limits defined returns zero when free plan has limit defined returns a free plan limits when associated plan has no limits defined returns zero when limit is defined returns a number of maximum pipeline size #shared_runners_enabled? without projects should be falsey with project and disabled shared runners should be falsey and enabled shared runners should be truthy #actual_shared_runners_minutes_limit when no limit defined should be zero when application settings limit is set returns global limit when namespace limit is set returns namespace limit #shared_runner_minutes_supported? when is subgroup when shared_runner_minutes_on_root_namespace is disabled returns true when shared_runner_minutes_on_root_namespace is enabled returns false when is root returns true #shared_runners_minutes_limit_enabled? with project when no limit defined should be falsey when limit is defined should be truthy when is subgroup should be falsey without project should be falsey #shared_runners_enabled? subgroup with shared runners enabled project when shared_runner_minutes_on_root_namespace is disabled returns false when shared_runner_minutes_on_root_namespace is enabled returns true group with shared runners enabled project returns true group without projects returns false #shared_runners_minutes_used? with project when limit is defined when limit is used should be truthy when limit not yet used should be falsey when minutes are not yet set should be falsey without limit should be falsey without project should be falsey #actual_plan when namespace has a plan associated returns an associated plan when namespace does not have plan associated returns a free plan object #actual_plan_name when namespace has a plan associated returns an associated plan name when namespace does not have plan associated returns a free plan name epics list when epics exist for the group shows the epics in the navigation sidebar renders the filtered search bar correctly renders the list correctly renders the epic detail correctly after clicking the link when no epics exist for the group renders the empty list page Repository #after_sync expires repository cache does not call expire_branch_cache if repository does not exist Elastic search class method find_commits_by_message_with_elastic returns commits find_commits_by_message_with_elastic returns commits Projects::IssueLinksController GET /*namespace_id/:project_id/issues/:issue_id/links returns JSON response POST /*namespace_id/:project_id/issues/:issue_id/links with success returns success JSON with failure when unauthorized returns 403 when failing service result returns failure JSON DELETE /*namespace_id/:project_id/issues/:issue_id/link/:id when unauthorized when no authorization on current project returns 403 when no authorization on the related issue project returns 404 when authorized returns success JSON when non of issues of the link is not the issue requested in the path returns 404 does not delete the link API::LdapGroupLinks POST /groups/:id/ldap_group_links when unauthenticated returns authentication error when a less priviledged user does not allow less priviledged user to add LDAP group link when owner of the group returns ok and add ldap group link returns ok and add ldap group link even if no provider specified (PENDING: Temporarily skipped with xit) returns error if LDAP group link already exists returns a 400 error when cn is not given returns a 400 error when group access is not given returns a 422 error when group access is not known DELETE /groups/:id/ldap_group_links/:cn when unauthenticated returns authentication error when a less priviledged user does not remove the LDAP group link when owner of the group removes ldap group link returns 404 if LDAP group cn not used for a LDAP group link DELETE /groups/:id/ldap_group_links/:provider/:cn when unauthenticated returns authentication error when a less priviledged user does not remove the LDAP group link when owner of the group returns 404 if LDAP group cn not used for a LDAP group link for the specified provider removes ldap group link Ci::RegisterJobService #execute for project with shared runners when global minutes limit is set allow to pick builds should be a kind of Ci::Build(id: integer, status: string, finished_at: datetime, trace: text, created_at: datetime, upda...file_store: integer, artifacts_metadata_store: integer, protected: boolean, failure_reason: integer) when over the global quota does not return a build when project is public does return the build when namespace limit is set to unlimited does return the build when namespace quota is bigger than a global one does return the build when group is subgroup when shared_runner_minutes_on_root_namespace is disabled does return a build when we are over limit on subnamespace does not return a build when shared_runner_minutes_on_root_namespace is enabled does return a build when we are over limit on subnamespace limit is ignored and build is returned when we are over limit on root namespace does not return a build GithubService Associations should belong to project #owner is determined from the repo URL #repository_name is determined from the repo URL #api_url uses github.com by default with GitHub Enterprise repo URL is set to the Enterprise API URL #detailed_description links to mirroring settings #execute notifies GitHub of a status change uses StatusMessage to build message uses GitHub API to update status passes StatusMessage values to StatusNotifier sha status context target_url description with custom api endpoint hands custom api url to StatusNotifier without a license does nothing #can_test? is false if there are no pipelines is true if the project has a pipeline #test_data raises error if no pipeline found generates data for latest pipeline #test mentions creator in success message forwards failure message on error without a license fails gracefully MergeRequestPolicy for a merge request within the same project when overwriting approvers is disabled on the project does not allow anyone to update approvers when overwriting approvers is enabled on the project allows only project developers and above to update the approvers for a merge request from a fork when overwriting approvers is disabled on the target project does not allow anyone to update approvers when overwriting approvers is disabled on the source project has no effect - project developers and above, as well as the author, can update the approvers when overwriting approvers is enabled on the target project allows project developers and above, as well as the author, to update the approvers with external authorization enabled can read the issue iid without accessing the external service AuditEventService #for_member generates event handles deleted users has the IP address admin audit log licensed has the entity full path #security_event unlicensed does not create an event licensed creates an event #entity_audit_events_enabled?? entity is a project returns false when project is unlicensed returns true when project is licensed entity is a group returns false when group is unlicensed returns true when group is licensed entity is a user returns false when unlicensed returns true when licensed with extended events auth event returns true when unlicensed #for_failed_login has the right type has the right author has the right IP address has the right auth method for OAUTH license has the audit_admin feature logs an audit event has the entity_path has the extended_audit_events feature logs an audit event has not the entity_path entity has the audit_events feature logs an audit event has not the entity_path has not any audit event feature does not log the audit event JenkinsService Associations should belong to project should have one service_hook username validation when the service is active when password was not touched should not validate that :username cannot be empty/falsy when password was touched should validate that :username cannot be empty/falsy when the service is inactive should not validate that :username cannot be empty/falsy #hook_url when the jenkins_url has no relative path should eq "http://jenkins.example.com/project/my_project" when the jenkins_url has relative path should eq "http://organization.example.com/jenkins/project/my_project" userinfo is missing and username and password are set should eq "http://u%24ername:pas%24%20word@organization.example.com/jenkins/project/my_project" userinfo is provided and username and password are set should eq "http://username:password@organization.example.com/jenkins/project/my_project" userinfo is provided username and password are not set should eq "http://u:p@organization.example.com/jenkins/project/my_project" #test returns the right status #execute without a license key behaves like project with disabled Jenkins service does not invoke the Jenkins API with a license key when namespace plan check is not enabled behaves like project with enabled Jenkins service invokes the Jenkins API when namespace plan check is enabled when namespace does not have a plan behaves like project with disabled Jenkins service does not invoke the Jenkins API when namespace has a plan adds default web hook headers to the request request url contains properly serialized username and password Stored password invalidation when a password was previously set resets password if url changed resets password if username is blank does not reset password if username changed does not reset password if new url is set together with password, even if it's the same password resets password if url changed, even if setter called multiple times when no password was previously set saves password if new url is set together with password Boards::Issues::ListService #execute when list_id is missing when board does not have a milestone returns opened issues without board labels applied when board have a milestone returns opened issues without board labels and milestone applied when milestone is predefined as upcoming returns open issue for backlog without board label as started returns open issue for backlog without board label MergeRequests::MergeService #execute project has exceeded size limit returns the correct error message #hooks_validation_pass? returns true when valid commit message validation returns false and saves error when invalid behaves like hook validations are skipped when push rules unlicensed should be truthy authors email validation returns false and saves error when invalid behaves like hook validations are skipped when push rules unlicensed should be truthy fast forward merge request returns true when fast forward is enabled Projects::PathLocksController POST #toggle when locking a file when LFS is enabled locks the file locks the file in LFS when LFS is not enabled locks the file doesn't lock the file in LFS when unlocking a file when LFS is enabled unlocks the file unlocks the file in LFS when LFS is not enabled unlocks the file Admin::ApplicationSettingsController PUT #update updates the EE specific application settings updates the default_project_creation for string value mirror settings behaves like settings for licensed features does not update settings when licesed feature is not available updates settings when the feature is available external policy classification settings behaves like settings for licensed features does not update settings when licesed feature is not available updates settings when the feature is available additional email footer behaves like settings for licensed features does not update settings when licesed feature is not available updates settings when the feature is available Reset namespace pipeline minutes for user namespace reset pipeline minutes button is visible when namespace has namespace statistics resets pipeline minutes when resetting pipeline minutes fails renders edit page with an error when creating a new group does not display reset pipeline minutes callout for group namespace reset pipeline minutes button is visible when namespace has namespace statistics resets pipeline minutes when resetting pipeline minutes fails renders edit page with an error GeoNode associations should belong to oauth_application dependent => destroy should have many geo_node_namespace_links should have many namespaces through geo_node_namespace_links validations should validate that :selective_sync_type is either ‹nil›, ‹"namespaces"›, or ‹"shards"› default values attribute: :url, value: "http://localhost/" should eq "http://localhost/" attribute: :primary, value: false should eq false attribute: :repos_max_capacity, value: 25 should eq 25 attribute: :files_max_capacity, value: 10 should eq 10 prevent locking yourself out does not accept adding a non primary node with same details as current_node dependent models and attributes for GeoNode on create saves a corresponding oauth application if it is a secondary node when is a primary node has no oauth_application persists current clone_url_prefix cache expiration expires cache when saved expires cache when removed #repair creates an oauth application for a Geo secondary node #current? returns true when node is the current node returns false when node is not the current node #uri when all fields are filled returns an URI object includes schema, host, port and relative_url_root with a terminating / when required fields are not filled returns an URI object #url returns a string includes schema home port and relative_url with a terminating / defaults to existing HTTPS and relative URL with a terminating / if present #url= sets schema field based on url sets host field based on url sets port field based on specified by url when unspecified ports sets port 80 when http and no port is specified sets port 443 when https and no port is specified #geo_transfers_url returns api url based on node uri #geo_status_url returns api url based on node uri #snapshot_url returns snapshot URL based on node URI adds ?wiki=1 to the snapshot URL when the repository is a wiki #find_or_build_status returns a new status #oauth_callback_url returns oauth callback url based on node uri returns url that matches rails url_helpers generated one #oauth_logout_url returns oauth logout url based on node uri returns url that matches rails url_helpers generated one #missing_oauth_application? returns false when present returns true when it is not present on a primary node returns false #projects_include? returns true without selective sync selective sync by namespaces returns true when project belongs to one of the namespaces returns false when project does not belong to one of the namespaces selective sync by shards returns true when project belongs to one of the namespaces returns false when project does not belong to one of the namespaces #projects returns all projects without selective sync returns projects that belong to the namespaces with selective sync by namespace returns projects that belong to the shards with selective sync by shard returns nothing if an unrecognised selective sync type is used #selective_sync? returns true when selective sync is by namespaces returns true when selective sync is by shards returns false when selective sync is disabled Projects::ApproversController #destroy on a merge request when the user cannot update approvers because they do not have access returns a 404 does not destroy any approvers when the user cannot update approvers because of the project setting returns a 404 does not destroy any approvers when the user can update approvers destroys the provided approver on a project when the user cannot update approvers because they do not have access returns a 404 does not destroy any approvers when the user can update approvers destroys the provided approver Projects::UpdateService#execute repository mirror when licensed updates the correct attributes when unlicensed does not update mirror attributes audit events #name does not log audit event if project operation fails if operation succeed logs an audit event if operation succeed logs the project info #path does not log audit event if project operation fails if operation succeed logs an audit event if operation succeed logs the project info #visibility does not log audit event if project operation fails if operation succeed logs an audit event if operation succeed logs the project info Geo::RepositoryVerification::Primary::ShardWorker #perform performs Geo::RepositoryVerification::Primary::SingleWorker for each project performs Geo::RepositoryVerification::Primary::SingleWorker for verified projects updated recently performs Geo::RepositoryVerification::Primary::SingleWorker for projects missing repository verification performs Geo::RepositoryVerification::Primary::SingleWorker for projects missing wiki verification does not perform Geo::RepositoryVerification::Primary::SingleWorker when shard becomes unhealthy does not perform Geo::RepositoryVerification::Primary::SingleWorker when not running on a primary does not schedule jobs when number of scheduled jobs exceeds capacity does not perform Geo::RepositoryVerification::Primary::SingleWorker for projects on unhealthy shards resource loading handles multiple batches of projects needing verification handles multiple batches of projects needing verification, skipping failed repos ProjectPolicy admin_mirror with remote mirror setting enabled with admin should be allowed :admin_mirror with owner should be allowed :admin_mirror with developer should be disallowed :admin_mirror with remote mirror setting disabled with admin should be allowed :admin_mirror with owner should be disallowed :admin_mirror with remote mirrors feature disabled with admin should be disallowed :admin_mirror with owner should be disallowed :admin_mirror with remote mirrors feature enabled with admin should be allowed :admin_mirror with owner should be allowed :admin_mirror reading a project allows access when a user has read access to the repo never checks the external service with an external authorization service allows access when the external service allows it does not check the external service for admins and allows access allows auditors prevents all but seeing a public project in a list when access is denied passes the full path to external authorization for logging purposes Display system header and footer bar when authenticated when system header and footer are not configured behaves like system header is not configured does not show system header behaves like system footer is not configured does not show system footer when only system header is defined behaves like system header is configured shows system header shows the correct content behaves like system footer is not configured does not show system footer when only system footer is defined behaves like system header is not configured does not show system header behaves like system footer is configured shows system footer shows the correct content when system header and footer are defined behaves like system header is configured shows system header shows the correct content behaves like system footer is configured shows system footer shows the correct content when not authenticated when system header and footer are not configured behaves like system header is not configured does not show system header behaves like system footer is not configured does not show system footer when only system header is defined behaves like system header is configured shows system header shows the correct content behaves like system footer is not configured does not show system footer when only system footer is defined behaves like system header is not configured does not show system header behaves like system footer is configured shows system footer shows the correct content when system header and footer are defined behaves like system header is configured shows system header shows the correct content behaves like system footer is configured shows system footer shows the correct content Geo::FileRegistryRemovalService #execute delegates log_error to the Geo logger with LFS object behaves like removes file from disk registry when file was deleted successfully migrated to object storage behaves like removes file from disk registry when file was deleted successfully with job artifact behaves like removes artifact file from disk registry when file was deleted successfully migrated to object storage behaves like removes artifact file from disk registry when file was deleted successfully with avatar behaves like removes file from disk registry when file was deleted successfully migrated to object storage behaves like removes file from disk registry when file was deleted successfully with attachment behaves like removes file from disk registry when file was deleted successfully migrated to object storage behaves like removes file from disk registry when file was deleted successfully with file behaves like removes file from disk registry when file was deleted successfully migrated to object storage behaves like removes file from disk registry when file was deleted successfully with namespace_file behaves like removes file from disk registry when file was deleted successfully migrated to object storage behaves like removes file from disk registry when file was deleted successfully with personal_file behaves like removes file from disk registry when file was deleted successfully migrated to object storage behaves like removes file from disk registry when file was deleted successfully Projects::ApproverGroupsController #destroy on a merge request when the user cannot update approvers because they do not have access returns a 404 does not destroy any approver groups when the user cannot update approvers because of the project setting returns a 404 does not destroy any approver groups when the user can update approvers destroys the provided approver group on a project when the user cannot update approvers because they do not have access returns a 404 does not destroy any approver groups when the user can update approvers destroys the provided approver Edit group settings with webhook feature enabled shows the menu item with webhook feature enabled shows the menu item with project_creation_level feature enabled shows the selection menu with project_creation_level feature disabled shows the selection menu Member Lock setting without a license key is not visible with a license key is visible when current user is not the Owner is not visible Projects::DestroyService when project is a mirror decrements capacity if mirror was scheduled when running on a primary node logs an event to the Geo event log does not log event to the Geo log if project deletion fails audit events does not log audit event if project operation fails if operation succeed logs an audit event if operation succeed logs the project info system hooks exception logs an audit event User creates issue with weight set creates issue Groups > Contribution Analytics visit Contribution Analytics page for group displays Contribution Analytics RepositoryUpdateMirrorWorker #perform sets status as finished when update mirror service executes successfully sets status as failed when update mirror service executes with errors marks mirror as failed when an error occurs with another worker already running returns nil when worker was reset without cleanup sets status as finished when update mirror service executes successfully reschedule mirrors does not perform UpdateAllMirrorsWorker when we cannot obtain the lease does not perform UpdateAllMirrorsWorker when the lease already exists when we obtain the lease performs UpdateAllMirrorsWorker when reschedule_immediately? returns true does not perform UpdateAllMirrorsWorker when reschedule_immediately? returns false AdminEmailsWorker recipients sending emails to members of a group only sends email to subscribed users sending emails to members of a project only sends email to subscribed users sending emails to users directly sends email to subscribed users ProjectWiki searches wiki page API::Geo GET /geo/transfers/attachment/1 responds with 401 with invalid auth header attachment file exists responds with 200 with X-Sendfile attachment does not exist responds with 404 GET /geo/transfers/avatar/1 responds with 401 with invalid auth header avatar file exists responds with 200 with X-Sendfile avatar does not exist responds with 404 GET /geo/transfers/file/1 responds with 401 with invalid auth header when the Upload record exists when the file exists responds with 200 with X-Sendfile file does not exist responds with 404 and a specific geo code when the Upload record does not exist responds with 404 GET /geo/transfers/lfs/1 responds with 401 with invalid auth header LFS object exists file exists responds with 200 with X-Sendfile file does not exist responds with 404 and a specific geo code LFS object does not exist responds with 404 GET /geo/status responds with 401 with invalid auth header responds with 401 when the db_key_base is wrong when requesting secondary node with valid auth header responds with 200 when requesting primary node with valid auth header responds with 200 API::V3::LdapGroupLinks DELETE /groups/:id/ldap_group_links/:cn when unauthenticated returns authentication error when a less priviledged user does not remove the LDAP group link when owner of the group removes ldap group link returns 404 if LDAP group cn not used for a LDAP group link DELETE /groups/:id/ldap_group_links/:provider/:cn when unauthenticated returns authentication error when a less priviledged user does not remove the LDAP group link when owner of the group returns 404 if LDAP group cn not used for a LDAP group link for the specified provider removes ldap group link label issues adds a new group label from sidebar Groups::GroupMembersController with external authorization enabled GET #index is successful POST #create is successful PUT #update is successful DELETE #destroy is successful POST #destroy is successful POST #approve_request_access is successful DELETE #leave is successful POST #resend_invite is successful POST #override is successful shared/issuable/_approvals.html.haml has no approvers shows empty approvers list can override approvers shows suggested approvers shows select approvers field shows select approver groups field can not override approvers hides suggested approvers hides select approvers field hides select approver groups field has approvers shows approver in table can override approvers shows remove button for approver can not override approvers hides remove button Issue searches issues returns json with all needed elements behaves like no results when the user cannot read cross project returns the record if a single project was passed does not return anything when trying to search cross project Group routing routing subgroup "boards" shows group show page shows boards index page legacy redirection analytics behaves like redirecting a legacy path redirects /groups/complex.group-namegit/analytics to /groups/complex.group-namegit/-/analytics when the resource does not exist does not redirect /groups/complex.group-namegit/analytics to /groups/complex.group-namegit/-/analytics when the resource exists boards behaves like redirecting a legacy path redirects /groups/complex.group-namegit/boards to /groups/complex.group-namegit/-/boards when the resource does not exist does not redirect /groups/complex.group-namegit/boards to /groups/complex.group-namegit/-/boards when the resource exists ldap behaves like redirecting a legacy path redirects /groups/complex.group-namegit/ldap to /groups/complex.group-namegit/-/ldap when the resource does not exist does not redirect /groups/complex.group-namegit/ldap to /groups/complex.group-namegit/-/ldap when the resource exists ldap_group_links behaves like redirecting a legacy path redirects /groups/complex.group-namegit/ldap_group_links to /groups/complex.group-namegit/-/ldap_group_links when the resource does not exist does not redirect /groups/complex.group-namegit/ldap_group_links to /groups/complex.group-namegit/-/ldap_group_links when the resource exists notification_setting behaves like redirecting a legacy path redirects /groups/complex.group-namegit/notification_setting to /groups/complex.group-namegit/-/notification_setting when the resource does not exist does not redirect /groups/complex.group-namegit/notification_setting to /groups/complex.group-namegit/-/notification_setting when the resource exists audit_events behaves like redirecting a legacy path redirects /groups/complex.group-namegit/audit_events to /groups/complex.group-namegit/-/audit_events when the resource does not exist does not redirect /groups/complex.group-namegit/audit_events to /groups/complex.group-namegit/-/audit_events when the resource exists pipeline_quota behaves like redirecting a legacy path redirects /groups/complex.group-namegit/pipeline_quota to /groups/complex.group-namegit/-/pipeline_quota when the resource does not exist does not redirect /groups/complex.group-namegit/pipeline_quota to /groups/complex.group-namegit/-/pipeline_quota when the resource exists hooks behaves like redirecting a legacy path redirects /groups/complex.group-namegit/hooks to /groups/complex.group-namegit/-/hooks when the resource does not exist does not redirect /groups/complex.group-namegit/hooks to /groups/complex.group-namegit/-/hooks when the resource exists multiple redirects follows multiple redirects redirects when the nested group does not exist does not redirect when the nested group exists IssueLinks::DestroyService #execute when successfully removes an issue link removes related issue creates notes returns success message when failing to remove an issue link does not remove relation does not create notes returns error message Issues::MoveService #rewrite_epic_issue issue assigned to epic updates epic issue reference ignores epic issue reference if user can not update the epic KubernetesService when user configured kubernetes from Integration > Kubernetes behaves like same behavior between KubernetesService and Platform::Kubernetes #rollout_status with valid deployments creates a matching RolloutStatus with empty list of deployments creates a matching RolloutStatus not yet loaded deployments creates a matching RolloutStatus when user configured kubernetes from CI/CD > Clusters behaves like same behavior between KubernetesService and Platform::Kubernetes #rollout_status with valid deployments creates a matching RolloutStatus with empty list of deployments creates a matching RolloutStatus not yet loaded deployments creates a matching RolloutStatus EpicIssues::ListService #execute when epics feature is disabled returns an empty array when epics feature is enabled owner can see all issues and destroy their associations returns related issues JSON user can see only some issues returns related issues JSON Search::GroupService elasticsearch finding projects by name in parent group should contain exactly #<Project id:2079 group411/group410/inner_project_name_1>, #<Project id:2080 group411/group410/inner_project_name_2>, and #<Project id:2081 group411/outer_project_name> in subgroup should contain exactly #<Project id:2085 group413/group412/inner_project_name_1> and #<Project id:2086 group413/group412/inner_project_name_2> Gitlab::Database::LoadBalancing::LoadBalancer #read yields a connection for a read marks hosts that are offline retries a query in the event of a serialization failure retries every host at most 3 times when a query conflict is raised uses the primary if no secondaries are available #read_write yields a connection for a write uses a retry with exponential backoffs #host returns the secondary host to use stores the host in a thread-local variable #release_host releases the host and its connection #release_primary_connection releases the connection to the primary #primary_write_location returns a String raises an error if the write location could not be retrieved #all_caught_up? returns true if all hosts caught up to the write location returns false if a host has not yet caught up #retry_with_backoff returns the value returned by the block re-raises errors not related to database connections retries the block when a connection error is raised re-raises the connection error if the retries did not succeed #connection_error? returns true for a connection error returns true for a wrapped connection error returns true for a wrapped connection error from a view returns true for deeply wrapped/nested errors returns true for an invalid encoding error returns false for errors not related to database connections #serialization_failure? returns for a serialization error returns true for a wrapped error AutocompleteController GET users project members GET #users that can push to protected branches returns authorized users GET #users that can push code returns authorized users GET #users that can push to protected branches, including the current user returns authorized users groups while fetching all groups belonging to a project returns a single group while fetching all groups belonging to a project the current user cannot access should be not found while fetching all groups belonging to an invalid project ID should be not found Geo::HashedStorageMigrationService #execute does not move project backed by hashed storage project backed by legacy storage moves the project repositories raises an error when project repository can not be moved raises an error when wiki repository can not be moved #async_execute starts the worker returns job id ProjectMirrorEntity pull mirror password authentication represents the pull mirror SSH public-key authentication represents the pull mirror push mirror 2018-05-02T15:29:31.745Z 130 TID-bla08 INFO: Removing remote remote_mirror_45 from project 2103 2018-05-02T15:29:31.750Z 130 TID-bla08 ERROR: Could not remove remote remote_mirror_45 from project 2103 represents the push mirror Merge request > User sees approval widget when merge when discussions resolved is active does not show checking ability text Gitlab::Ci::External::File::Local #valid? when is a valid local path should return true when is not a valid local path should return false when is not a yaml file should return false #content with a a valid file should return the content of the file with an invalid file should be nil #error_message should return an error message Geo::RepositoryUpdatedEvent relationships should belong to project validations should validate that :project cannot be empty/falsy #source should define :source as an enum with [:repository, :wiki] and store the value in a column with an integer type Admin sends notification 2nd Try error in ./ee/spec/features/admin/admin_sends_notification_spec.rb:17: RSpec::Core::MultipleExceptionError RSpec::Retry: 2nd try ./ee/spec/features/admin/admin_sends_notification_spec.rb:17 /builds/gitlab-org/gitlab-ee/ee/spec/features/admin/admin_sends_notification_spec.rb:19: warning: already initialized constant NOTIFICATION_TEXT /builds/gitlab-org/gitlab-ee/ee/spec/features/admin/admin_sends_notification_spec.rb:19: warning: previous definition of NOTIFICATION_TEXT was here 3rd Try error in ./ee/spec/features/admin/admin_sends_notification_spec.rb:17: expected: 1 got: 5 (compared using eql?) RSpec::Retry: 3rd try ./ee/spec/features/admin/admin_sends_notification_spec.rb:17 /builds/gitlab-org/gitlab-ee/ee/spec/features/admin/admin_sends_notification_spec.rb:19: warning: already initialized constant NOTIFICATION_TEXT /builds/gitlab-org/gitlab-ee/ee/spec/features/admin/admin_sends_notification_spec.rb:19: warning: previous definition of NOTIFICATION_TEXT was here RSpec::Retry: 4th try ./ee/spec/features/admin/admin_sends_notification_spec.rb:17 /builds/gitlab-org/gitlab-ee/ee/spec/features/admin/admin_sends_notification_spec.rb:19: warning: already initialized constant NOTIFICATION_TEXT /builds/gitlab-org/gitlab-ee/ee/spec/features/admin/admin_sends_notification_spec.rb:19: warning: previous definition of NOTIFICATION_TEXT was here sends notification (FAILED - 1) [0;33mHTML screenshot: file:///builds/gitlab-org/gitlab-ee/tmp/capybara/screenshot_2018-05-02-15-29-46.389.html[0m [0;33mImage screenshot: file:///builds/gitlab-org/gitlab-ee/tmp/capybara/screenshot_2018-05-02-15-29-46.389.png[0m Knapsack report was generated. Preview: { "ee/spec/models/burndown_spec.rb": 375.0898690223694, "ee/spec/lib/gitlab/elastic/search_results_spec.rb": 89.7494866847992, "ee/spec/controllers/projects/merge_requests_controller_spec.rb": 48.041356325149536, "ee/spec/elastic_integration/global_search_spec.rb": 34.76005482673645, "ee/spec/features/issues/filtered_search/dropdown_weight_spec.rb": 37.158318519592285, "ee/spec/policies/group_policy_spec.rb": 26.143836498260498, "ee/spec/features/issues/form_spec.rb": 26.027339935302734, "ee/spec/features/search/elastic/project_search_spec.rb": 24.67595148086548, "ee/spec/features/boards/sidebar_spec.rb": 36.38293981552124, "ee/spec/features/merge_requests/squash_spec.rb": 27.503933429718018, "ee/spec/features/merge_request/user_approves_spec.rb": 15.332407474517822, "ee/spec/features/merge_request/user_sets_approvers_spec.rb": 22.247653484344482, "ee/spec/models/merge_request_spec.rb": 12.335455656051636, "ee/spec/features/projects/new_project_spec.rb": 14.702252864837646, "ee/spec/features/projects/merge_requests/user_approves_merge_request_spec.rb": 12.743454694747925, "ee/spec/features/issues/service_desk_spec.rb": 16.090914726257324, "ee/spec/controllers/boards/issues_controller_spec.rb": 9.030691385269165, "ee/spec/features/projects/settings/merge_requests_settings_spec.rb": 9.864329099655151, "ee/spec/services/geo/repository_sync_service_spec.rb": 8.2549147605896, "ee/spec/controllers/groups/epic_issues_controller_spec.rb": 7.508012533187866, "ee/spec/workers/elastic_indexer_worker_spec.rb": 11.78231406211853, "ee/spec/features/discussion_comments/epic_spec.rb": 13.109373092651367, "ee/spec/services/projects/update_remote_mirror_service_spec.rb": 7.65458607673645, "ee/spec/controllers/ldap/omniauth_callbacks_controller_spec.rb": 7.766350984573364, "ee/spec/controllers/groups/analytics_controller_spec.rb": 6.715375900268555, "ee/spec/services/projects/create_service_spec.rb": 65.56358432769775, "ee/spec/features/admin/admin_geo_nodes_spec.rb": 8.114001750946045, "ee/spec/mailers/notify_spec.rb": 8.18470549583435, "ee/spec/features/projects/push_rules_spec.rb": 9.417293071746826, "ee/spec/models/ci/build_spec.rb": 7.450213432312012, "ee/spec/models/remote_mirror_spec.rb": 5.322330713272095, "ee/spec/helpers/push_rules_helper_spec.rb": 9.464516162872314, "ee/spec/features/projects/services/user_activates_github_spec.rb": 6.881407976150513, "ee/spec/services/epic_issues/update_service_spec.rb": 5.928539276123047, "ee/spec/features/search/elastic/global_search_spec.rb": 7.547546148300171, "ee/spec/features/groups/group_roadmap_spec.rb": 6.97889518737793, "ee/spec/requests/api/project_push_rule_spec.rb": 4.676842212677002, "ee/spec/features/admin/admin_audit_logs_spec.rb": 6.188428163528442, "ee/spec/requests/api/project_mirror_spec.rb": 5.543070077896118, "ee/spec/features/epics/epic_labels_spec.rb": 5.999692440032959, "ee/spec/controllers/projects/issues_controller_spec.rb": 5.091524362564087, "ee/spec/finders/epics_finder_spec.rb": 5.445454120635986, "ee/spec/features/groups/pipeline_quota_spec.rb": 5.416158437728882, "ee/spec/controllers/projects/merge_requests/creations_controller_spec.rb": 4.72404146194458, "ee/spec/features/projects/milestones/milestone_spec.rb": 5.303261995315552, "ee/spec/models/project_import_data_spec.rb": 8.098426342010498, "ee/spec/lib/gitlab/chat/command_spec.rb": 4.352232933044434, "ee/spec/requests/api/merge_request_approvals_spec.rb": 4.181734085083008, "ee/spec/controllers/projects_controller_spec.rb": 4.483926296234131, "ee/spec/controllers/projects/push_rules_controller_spec.rb": 4.404677391052246, "ee/spec/services/issue_links/list_service_spec.rb": 5.341504812240601, "ee/spec/services/ee/notification_service_spec.rb": 4.416101694107056, "ee/spec/features/merge_request/user_merges_with_push_rules_spec.rb": 4.391493797302246, "ee/spec/features/epics/new_epic_spec.rb": 4.650759220123291, "ee/spec/features/projects/pipelines/pipeline_spec.rb": 4.214967966079712, "ee/spec/models/concerns/ee/deployment_platform_spec.rb": 3.9233808517456055, "ee/spec/models/namespace_spec.rb": 4.11854100227356, "ee/spec/features/epics/epics_list_spec.rb": 4.43137264251709, "ee/spec/models/repository_spec.rb": 3.620518922805786, "ee/spec/requests/projects/issue_links_controller_spec.rb": 3.371831178665161, "ee/spec/requests/api/ldap_group_links_spec.rb": 3.6920480728149414, "ee/spec/services/ci/register_job_service_spec.rb": 3.406644105911255, "ee/spec/models/project_services/github_service_spec.rb": 3.6870644092559814, "ee/spec/policies/merge_request_policy_spec.rb": 4.605401515960693, "ee/spec/services/audit_event_service_spec.rb": 3.2668185234069824, "ee/spec/models/project_services/jenkins_service_spec.rb": 3.2317121028900146, "ee/spec/services/boards/issues/list_service_spec.rb": 3.6131532192230225, "ee/spec/services/merge_requests/merge_service_spec.rb": 3.05918025970459, "ee/spec/requests/projects/path_locks_controller_spec.rb": 2.5278725624084473, "ee/spec/controllers/admin/application_settings_controller_spec.rb": 2.9629557132720947, "ee/spec/features/admin/admin_reset_pipeline_minutes_spec.rb": 2.866290330886841, "ee/spec/models/geo_node_spec.rb": 3.097580671310425, "ee/spec/controllers/projects/approvers_controller_spec.rb": 2.849379777908325, "ee/spec/services/projects/update_service_spec.rb": 2.219879150390625, "ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb": 2.726644992828369, "ee/spec/policies/project_policy_spec.rb": 2.7903425693511963, "ee/spec/features/display_system_header_and_footer_bar_spec.rb": 2.744051694869995, "ee/spec/services/geo/file_registry_removal_service_spec.rb": 3.023852825164795, "ee/spec/controllers/projects/approver_groups_controller_spec.rb": 2.725897789001465, "ee/spec/features/groups/group_settings_spec.rb": 2.6311471462249756, "ee/spec/services/projects/destroy_service_spec.rb": 2.417842388153076, "ee/spec/features/projects/issues/user_creates_issue_spec.rb": 3.061816453933716, "ee/spec/features/groups/analytics_spec.rb": 2.72245192527771, "ee/spec/workers/repository_update_mirror_worker_spec.rb": 3.163198947906494, "ee/spec/workers/admin_emails_worker_spec.rb": 2.4495837688446045, "ee/spec/models/concerns/elastic/project_wiki_spec.rb": 2.2062017917633057, "ee/spec/requests/api/geo_spec.rb": 1.9630680084228516, "ee/spec/requests/api/v3/ldap_group_links_spec.rb": 1.8313560485839844, "ee/spec/features/boards/group_boards/user_edits_issues_spec.rb": 2.8028085231781006, "ee/spec/controllers/groups/group_members_controller_spec.rb": 2.107511281967163, "ee/spec/views/shared/issuable/_approvals.html.haml_spec.rb": 1.7978427410125732, "ee/spec/models/concerns/elastic/issue_spec.rb": 1.9382903575897217, "ee/spec/routing/group_routing_spec.rb": 2.0223007202148438, "ee/spec/services/issue_links/destroy_service_spec.rb": 1.9899778366088867, "ee/spec/services/ee/issues/move_service_spec.rb": 1.8424091339111328, "ee/spec/models/project_services/kubernetes_service_spec.rb": 1.783569574356079, "ee/spec/services/epic_issues/list_service_spec.rb": 1.6197073459625244, "ee/spec/services/search/group_service_spec.rb": 1.7559125423431396, "ee/spec/lib/gitlab/database/load_balancing/load_balancer_spec.rb": 1.7773735523223877, "ee/spec/controllers/autocomplete_controller_spec.rb": 1.5352764129638672, "ee/spec/services/geo/hashed_storage_migration_service_spec.rb": 1.167602777481079, "ee/spec/serializers/project_mirror_entity_spec.rb": 1.6572282314300537, "ee/spec/features/merge_request/user_sees_approval_widget_spec.rb": 1.688849925994873, "ee/spec/lib/gitlab/ci/external/file/local_spec.rb": 0.9615917205810547, "ee/spec/models/geo/repository_updated_event_spec.rb": 0.01826167106628418, "ee/spec/features/admin/admin_sends_notification_spec.rb": 10.916559219360352 } Knapsack global time execution for tests: 21m 18s Pending: (Failures listed here are expected and do not affect your suite's status) 1) API::LdapGroupLinks POST /groups/:id/ldap_group_links when owner of the group returns ok and add ldap group link even if no provider specified # Temporarily skipped with xit # ./ee/spec/requests/api/ldap_group_links_spec.rb:55 Failures: 1) Admin sends notification sends notification Failure/Error: expect(emails.count).to eql(group.users.count) expected: 1 got: 7 (compared using eql?) # ./ee/spec/features/admin/admin_sends_notification_spec.rb:47:in `block (2 levels) in <top (required)>' Finished in 22 minutes 17 seconds (files took 31.51 seconds to load) 1439 examples, 1 failure, 1 pending Failed examples: rspec ./ee/spec/features/admin/admin_sends_notification_spec.rb:17 # Admin sends notification sends notification ! Generating reports is disabled. To enable it, please set the `FLAKY_RSPEC_GENERATE_REPORT=1` ! section_end:1525275002:build_script [0Ksection_start:1525275002:after_script [0K[32;1mRunning after script...[0;m [32;1m$ date[0;m Wed May 2 15:30:02 UTC 2018 section_end:1525275003:after_script [0Ksection_start:1525275003:upload_artifacts [0K[32;1mUploading artifacts...[0;m coverage/: found 5 matching files [0;m knapsack/: found 6 matching files [0;m rspec_flaky/: found 2 matching files [0;m tmp/capybara/: found 9 matching files [0;m Uploading artifacts to coordinator... ok [0;m id[0;m=66076779 responseStatus[0;m=201 Created token[0;m=ZxyoNQBK section_end:1525275006:upload_artifacts [0K[31;1mERROR: Job failed: exit code 1 [0;m