From 60fb3ac88bca087d37e2e1c900cc53a1636e8c0d Mon Sep 17 00:00:00 2001 From: Holger Just Date: Tue, 5 Jun 2018 09:37:13 +0200 Subject: [PATCH] Update User#last_login_on only once per minute and user to reduce DB lock contention on users table --- 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 15d6333c6d..ae3479880b 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? -- 2.17.1