From 438d2f65fded1c7f57a370f6f3d6ccc752cadaec Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 17 Jun 2018 14:51:24 +0000 Subject: [PATCH] Update User#last_login_on only once per minute and user to reduce DB lock contention on users table (#28952). Patch by Holger Just. git-svn-id: http://svn.redmine.org/redmine/trunk@17403 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/user.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 03c6b55ee..23d897649 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -239,7 +239,7 @@ class User < Principal end end end - user.update_column(:last_login_on, Time.now) if user && !user.new_record? && user.active? + user.update_last_login_on! if user && !user.new_record? && user.active? user rescue => text raise text @@ -249,7 +249,7 @@ class User < Principal def self.try_to_autologin(key) user = Token.find_active_user('autologin', key, Setting.autologin.to_i) if user - user.update_column(:last_login_on, Time.now) + user.update_last_login_on! user end end @@ -315,6 +315,12 @@ class User < Principal update_attribute(:status, STATUS_LOCKED) end + def update_last_login_on! + return if last_login_on.present? && last_login_on >= 1.minute.ago + + update_column(:last_login_on, Time.now) + end + # Returns true if +clear_password+ is the correct user's password, otherwise false def check_password?(clear_password) if auth_source_id.present?