summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorImre Farkas <ifarkas@gitlab.com>2019-02-07 15:36:50 +0100
committerImre Farkas <ifarkas@gitlab.com>2019-02-14 11:14:00 +0100
commita0e97b1c6a786462733a73b681cff60b103d729c (patch)
tree4d687deaffeed2400daa166b188c8d49a07b5fff
parentc8fe0d6a8a76ee5865c71b5b6627608e5075797d (diff)
downloadgitlab-ce-if-24642-activity_service_optimization.tar.gz
Optimize Redis usage in User::ActivityServiceif-24642-activity_service_optimization
Avoid checking Redis when User#last_activity_on is already up to date.
-rw-r--r--app/services/users/activity_service.rb7
-rw-r--r--changelogs/unreleased/24642-activity_service_optimization.yml5
-rw-r--r--spec/services/users/activity_service_spec.rb12
3 files changed, 22 insertions, 2 deletions
diff --git a/app/services/users/activity_service.rb b/app/services/users/activity_service.rb
index db03ba8756f..e50840a9158 100644
--- a/app/services/users/activity_service.rb
+++ b/app/services/users/activity_service.rb
@@ -26,12 +26,15 @@ module Users
def record_activity
return if Gitlab::Database.read_only?
+ today = Date.today
+
+ return if @user.last_activity_on == today
+
lease = Gitlab::ExclusiveLease.new("acitvity_service:#{@user.id}",
timeout: LEASE_TIMEOUT)
return unless lease.try_obtain
- @user.update_attribute(:last_activity_on, Date.today)
- Rails.logger.debug("Recorded activity: #{@activity} for User ID: #{@user.id} (username: #{@user.username})")
+ @user.update_attribute(:last_activity_on, today)
end
end
end
diff --git a/changelogs/unreleased/24642-activity_service_optimization.yml b/changelogs/unreleased/24642-activity_service_optimization.yml
new file mode 100644
index 00000000000..bdfa769959e
--- /dev/null
+++ b/changelogs/unreleased/24642-activity_service_optimization.yml
@@ -0,0 +1,5 @@
+---
+title: Optimize Redis usage in User::ActivityService
+merge_request: 25005
+author:
+type: performance
diff --git a/spec/services/users/activity_service_spec.rb b/spec/services/users/activity_service_spec.rb
index 719b4adf212..3c0a4ac8e18 100644
--- a/spec/services/users/activity_service_spec.rb
+++ b/spec/services/users/activity_service_spec.rb
@@ -26,6 +26,12 @@ describe Users::ActivityService do
.from(last_activity_on)
.to(Date.today)
end
+
+ it 'tries to obtain ExclusiveLease' do
+ expect(Gitlab::ExclusiveLease).to receive(:new).and_call_original
+
+ subject.execute
+ end
end
context 'when a bad object is passed' do
@@ -46,6 +52,12 @@ describe Users::ActivityService do
it 'does not update last_activity_on' do
expect { subject.execute }.not_to change(user, :last_activity_on)
end
+
+ it 'does not try to obtain ExclusiveLease' do
+ expect(Gitlab::ExclusiveLease).not_to receive(:new)
+
+ subject.execute
+ end
end
context 'when in GitLab read-only instance' do