summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2017-11-16 15:48:41 +0000
committerDouwe Maan <douwe@gitlab.com>2017-11-16 15:48:41 +0000
commit66bf283d0af91d916a00f269eab062b19f690c6a (patch)
tree648e52ffefa61a49f0c3ebeb4bfefc4102f03412 /app/models
parent5b57f72de9800df2263bf634bfef6893c3c6538c (diff)
parent3e561736b2eb4866b75c57c01769586f058a2f8d (diff)
downloadgitlab-ce-66bf283d0af91d916a00f269eab062b19f690c6a.tar.gz
Merge branch 'cache-user-keys-count' into 'master'
Cache the number of user SSH keys See merge request gitlab-org/gitlab-ce!15401
Diffstat (limited to 'app/models')
-rw-r--r--app/models/key.rb8
-rw-r--r--app/models/user.rb9
2 files changed, 16 insertions, 1 deletions
diff --git a/app/models/key.rb b/app/models/key.rb
index f119b15c737..815fd1de909 100644
--- a/app/models/key.rb
+++ b/app/models/key.rb
@@ -27,8 +27,10 @@ class Key < ActiveRecord::Base
after_commit :add_to_shell, on: :create
after_create :post_create_hook
+ after_create :refresh_user_cache
after_commit :remove_from_shell, on: :destroy
after_destroy :post_destroy_hook
+ after_destroy :refresh_user_cache
def key=(value)
value&.delete!("\n\r")
@@ -76,6 +78,12 @@ class Key < ActiveRecord::Base
)
end
+ def refresh_user_cache
+ return unless user
+
+ Users::KeysCountService.new(user).refresh_cache
+ end
+
def post_destroy_hook
SystemHooksService.new.execute_hooks_for(self, :destroy)
end
diff --git a/app/models/user.rb b/app/models/user.rb
index ea10e2854d6..be8112749bf 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -170,6 +170,7 @@ class User < ActiveRecord::Base
after_save :ensure_namespace_correct
after_update :username_changed_hook, if: :username_changed?
after_destroy :post_destroy_hook
+ after_destroy :remove_key_cache
after_commit :update_emails_with_primary_email, on: :update, if: -> { previous_changes.key?('email') }
after_commit :update_invalid_gpg_signatures, on: :update, if: -> { previous_changes.key?('email') }
@@ -624,7 +625,9 @@ class User < ActiveRecord::Base
end
def require_ssh_key?
- keys.count == 0 && Gitlab::ProtocolAccess.allowed?('ssh')
+ count = Users::KeysCountService.new(self).count
+
+ count.zero? && Gitlab::ProtocolAccess.allowed?('ssh')
end
def require_password_creation?
@@ -886,6 +889,10 @@ class User < ActiveRecord::Base
system_hook_service.execute_hooks_for(self, :destroy)
end
+ def remove_key_cache
+ Users::KeysCountService.new(self).delete_cache
+ end
+
def delete_async(deleted_by:, params: {})
block if params[:hard_delete]
DeleteUserWorker.perform_async(deleted_by.id, id, params)