Commit d33dad88 authored by Stan Hu's avatar Stan Hu

Merge branch '48239-performance-info-ref' into 'master'

Performance tuning on Projects::GitHttpController#info_refs

Closes #48239

See merge request gitlab-org/gitlab-ce!22013
parents c6d4449f b47e6660
...@@ -4,6 +4,7 @@ class DeployToken < ActiveRecord::Base ...@@ -4,6 +4,7 @@ class DeployToken < ActiveRecord::Base
include Expirable include Expirable
include TokenAuthenticatable include TokenAuthenticatable
include PolicyActor include PolicyActor
include Gitlab::Utils::StrongMemoize
add_authentication_token_field :token add_authentication_token_field :token
AVAILABLE_SCOPES = %i(read_repository read_registry).freeze AVAILABLE_SCOPES = %i(read_repository read_registry).freeze
...@@ -49,8 +50,10 @@ class DeployToken < ActiveRecord::Base ...@@ -49,8 +50,10 @@ class DeployToken < ActiveRecord::Base
# to a single project, later we're going to extend # to a single project, later we're going to extend
# that to be for multiple projects and namespaces. # that to be for multiple projects and namespaces.
def project def project
strong_memoize(:project) do
projects.first projects.first
end end
end
def expires_at def expires_at
expires_at = read_attribute(:expires_at) expires_at = read_attribute(:expires_at)
......
...@@ -95,8 +95,7 @@ class Project < ActiveRecord::Base ...@@ -95,8 +95,7 @@ class Project < ActiveRecord::Base
unless: :ci_cd_settings, unless: :ci_cd_settings,
if: proc { ProjectCiCdSetting.available? } if: proc { ProjectCiCdSetting.available? }
after_create :set_last_activity_at after_create :set_timestamps_for_create
after_create :set_last_repository_updated_at
after_update :update_forks_visibility_level after_update :update_forks_visibility_level
before_destroy :remove_private_deploy_keys before_destroy :remove_private_deploy_keys
...@@ -2103,13 +2102,8 @@ class Project < ActiveRecord::Base ...@@ -2103,13 +2102,8 @@ class Project < ActiveRecord::Base
gitlab_shell.exists?(repository_storage, "#{disk_path}.git") gitlab_shell.exists?(repository_storage, "#{disk_path}.git")
end end
# set last_activity_at to the same as created_at def set_timestamps_for_create
def set_last_activity_at update_columns(last_activity_at: self.created_at, last_repository_updated_at: self.created_at)
update_column(:last_activity_at, self.created_at)
end
def set_last_repository_updated_at
update_column(:last_repository_updated_at, self.created_at)
end end
def cross_namespace_reference?(from) def cross_namespace_reference?(from)
......
# frozen_string_literal: true
class AddIndexToProjectDeployTokensDeployTokenId < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
def up
# MySQL already has index inserted
add_concurrent_index :project_deploy_tokens, :deploy_token_id if Gitlab::Database.postgresql?
end
def down
remove_concurrent_index(:project_deploy_tokens, :deploy_token_id) if Gitlab::Database.postgresql?
end
end
...@@ -1589,6 +1589,7 @@ ActiveRecord::Schema.define(version: 20181101144347) do ...@@ -1589,6 +1589,7 @@ ActiveRecord::Schema.define(version: 20181101144347) do
t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "created_at", null: false
end end
add_index "project_deploy_tokens", ["deploy_token_id"], name: "index_project_deploy_tokens_on_deploy_token_id", using: :btree
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 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
create_table "project_features", force: :cascade do |t| create_table "project_features", force: :cascade do |t|
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment