diff options
author | Nick Thomas <nick@gitlab.com> | 2018-02-19 11:39:54 +0000 |
---|---|---|
committer | Ian Baum <ibaum@gitlab.com> | 2018-02-23 12:14:55 -0600 |
commit | c49d45f1d0f5475dee461b11e0c05fd08cc86e7d (patch) | |
tree | db72149702b247b5beeff71b30ad3aa509c8bf86 | |
parent | bfe4c2c4be1eabdb3b318725611c83ad8ad065fe (diff) | |
download | gitlab-ce-c49d45f1d0f5475dee461b11e0c05fd08cc86e7d.tar.gz |
Merge branch 'sh-guard-read-only-user-updates' into 'master'
Don't attempt to update user tracked fields if database is in read-only
Closes gitlab-ee#4972
See merge request gitlab-org/gitlab-ce!17200
-rw-r--r-- | app/models/user.rb | 2 | ||||
-rw-r--r-- | changelogs/unreleased/sh-guard-read-only-user-updates.yml | 5 | ||||
-rw-r--r-- | spec/models/user_spec.rb | 8 |
3 files changed, 15 insertions, 0 deletions
diff --git a/app/models/user.rb b/app/models/user.rb index 5cea1077a09..e81e555c090 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -59,6 +59,8 @@ class User < ActiveRecord::Base # Override Devise::Models::Trackable#update_tracked_fields! # to limit database writes to at most once every hour def update_tracked_fields!(request) + return if Gitlab::Database.read_only? + update_tracked_fields(request) lease = Gitlab::ExclusiveLease.new("user_update_tracked_fields:#{id}", timeout: 1.hour.to_i) diff --git a/changelogs/unreleased/sh-guard-read-only-user-updates.yml b/changelogs/unreleased/sh-guard-read-only-user-updates.yml new file mode 100644 index 00000000000..b8dbd840ed9 --- /dev/null +++ b/changelogs/unreleased/sh-guard-read-only-user-updates.yml @@ -0,0 +1,5 @@ +--- +title: Don't attempt to update user tracked fields if database is in read-only +merge_request: +author: +type: fixed diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index cb02d526a98..dd1bfba1421 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -496,6 +496,14 @@ describe User do user2.update_tracked_fields!(request) end.to change { user2.reload.current_sign_in_at } end + + it 'does not write if the DB is in read-only mode' do + expect(Gitlab::Database).to receive(:read_only?).and_return(true) + + expect do + user.update_tracked_fields!(request) + end.not_to change { user.reload.current_sign_in_at } + end end shared_context 'user keys' do |