diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2019-01-08 00:07:02 +0000 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2019-01-08 00:07:02 +0000 |
commit | 31f2c7b00ee52516c288b1b2f7e2064897e36ad8 (patch) | |
tree | 4e40daa89f18eb34642d58855b9ed63df0c087e8 /app/models | |
parent | 30572739b0664da481d4cded68c91c7d13246e93 (diff) | |
parent | ee4af0c64cdf00d2c34ce7feb773e057f9758cff (diff) | |
download | gitlab-ce-31f2c7b00ee52516c288b1b2f7e2064897e36ad8.tar.gz |
Merge branch '53966-hashed-storage-read-only' into 'master'
Hashed Storage: Only set as `read_only` when starting the per-project migration
See merge request gitlab-org/gitlab-ce!24128
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/project.rb | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index d57098407d0..cab173503ce 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1789,6 +1789,24 @@ class Project < ActiveRecord::Base handle_update_attribute_error(e, value) end + # Tries to set repository as read_only, checking for existing Git transfers in progress beforehand + # + # @return [Boolean] true when set to read_only or false when an existing git transfer is in progress + def set_repository_read_only! + with_lock do + break false if git_transfer_in_progress? + + update_column(:repository_read_only, true) + end + end + + # Set repository as writable again + def set_repository_writable! + with_lock do + update_column(repository_read_only, false) + end + end + def pushes_since_gc Gitlab::Redis::SharedState.with { |redis| redis.get(pushes_since_gc_redis_shared_state_key).to_i } end @@ -1903,15 +1921,17 @@ class Project < ActiveRecord::Base def migrate_to_hashed_storage! return unless storage_upgradable? - update!(repository_read_only: true) - - if repo_reference_count > 0 || wiki_reference_count > 0 + if git_transfer_in_progress? ProjectMigrateHashedStorageWorker.perform_in(Gitlab::ReferenceCounter::REFERENCE_EXPIRE_TIME, id) else ProjectMigrateHashedStorageWorker.perform_async(id) end end + def git_transfer_in_progress? + repo_reference_count > 0 || wiki_reference_count > 0 + end + def storage_version=(value) super |