diff options
author | Andreas Brandl <abrandl@gitlab.com> | 2018-02-26 16:44:35 +0100 |
---|---|---|
committer | Andreas Brandl <abrandl@gitlab.com> | 2018-03-06 12:53:13 +0100 |
commit | 375a5c9f1e69a5fbf49a98cecc7f0c0cb61df989 (patch) | |
tree | f748f286a26b82535ad9b261806ee84bee6d66e1 /app | |
parent | 8dde03012f0f3c66333916740483643b193664ad (diff) | |
download | gitlab-ce-375a5c9f1e69a5fbf49a98cecc7f0c0cb61df989.tar.gz |
Only track contributions if table is available.
This is due to the problem that the callback can be called while running
an earlier database schema version (for example during earlier
migrations). We work around this by checking the current schema version
and only track contributions if the table is available.
Diffstat (limited to 'app')
-rw-r--r-- | app/models/event.rb | 5 | ||||
-rw-r--r-- | app/models/user_contributed_projects.rb | 8 |
2 files changed, 12 insertions, 1 deletions
diff --git a/app/models/event.rb b/app/models/event.rb index f0cc99a9242..e855ed02274 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -392,6 +392,9 @@ class Event < ActiveRecord::Base end def track_user_contributed_projects - UserContributedProjects.track(self) + # Note the call to .available? is due to earlier migrations + # that would otherwise conflict with the call to .track + # (because the table does not exist yet). + UserContributedProjects.track(self) if UserContributedProjects.available? end end diff --git a/app/models/user_contributed_projects.rb b/app/models/user_contributed_projects.rb index 1f8e9a3f480..2965b956f3f 100644 --- a/app/models/user_contributed_projects.rb +++ b/app/models/user_contributed_projects.rb @@ -7,6 +7,9 @@ class UserContributedProjects < ActiveRecord::Base CACHE_EXPIRY_TIME = 1.day + # Schema version required for this model + REQUIRED_SCHEMA_VERSION = 20180223120443 + class << self def track(event) # For events without a project, we simply don't care. @@ -35,6 +38,11 @@ class UserContributedProjects < ActiveRecord::Base end end + # Check if we can safely call .track (table exists) + def available? + @available_flag ||= ActiveRecord::Migrator.current_version >= REQUIRED_SCHEMA_VERSION # rubocop:disable Gitlab/PredicateMemoization + end + private def cached_exists?(project_id:, user_id:, &block) |