Commit 74eec89e authored by Yorick Peterse's avatar Yorick Peterse

Merge branch 'repopulate_site_statistics' into 'master'

Fix SiteStatistics wikis_count

See merge request gitlab-org/gitlab-ce!21030
parents 65d48623 7336bd48
...@@ -49,7 +49,7 @@ class SiteStatistic < ActiveRecord::Base ...@@ -49,7 +49,7 @@ class SiteStatistic < ActiveRecord::Base
# #
# @return [SiteStatistic] record with tracked information # @return [SiteStatistic] record with tracked information
def self.fetch def self.fetch
SiteStatistic.transaction(requires_new: true) do transaction(requires_new: true) do
SiteStatistic.first_or_create! SiteStatistic.first_or_create!
end end
rescue ActiveRecord::RecordNotUnique rescue ActiveRecord::RecordNotUnique
......
---
title: Migrate NULL wiki_access_level to correct number so we count active wikis correctly
merge_request: 21030
author:
type: changed
# frozen_string_literal: true
class MigrateNullWikiAccessLevels < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
class ProjectFeature < ActiveRecord::Base
include EachBatch
self.table_name = 'project_features'
end
def up
ProjectFeature.where(wiki_access_level: nil).each_batch do |relation|
relation.update_all(wiki_access_level: 20)
end
# We need to re-count wikis as previous attempt was not considering the NULLs.
transaction do
execute('SET LOCAL statement_timeout TO 0') if Gitlab::Database.postgresql? # see https://gitlab.com/gitlab-org/gitlab-ce/issues/48967
execute("UPDATE site_statistics SET wikis_count = (SELECT COUNT(*) FROM project_features WHERE wiki_access_level != 0)")
end
end
def down
# there is no way to rollback this change, there are no downsides in keeping migrated data.
end
end
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20180808162000) do ActiveRecord::Schema.define(version: 20180809195358) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
......
namespace :gitlab do
desc "GitLab | Refresh Site Statistics counters"
task refresh_site_statistics: :environment do
puts 'Updating Site Statistics counters: '
print '* Repositories... '
SiteStatistic.transaction do
# see https://gitlab.com/gitlab-org/gitlab-ce/issues/48967
ActiveRecord::Base.connection.execute('SET LOCAL statement_timeout TO 0') if Gitlab::Database.postgresql?
SiteStatistic.update_all('repositories_count = (SELECT COUNT(*) FROM projects)')
end
puts 'OK!'.color(:green)
print '* Wikis... '
SiteStatistic.transaction do
# see https://gitlab.com/gitlab-org/gitlab-ce/issues/48967
ActiveRecord::Base.connection.execute('SET LOCAL statement_timeout TO 0') if Gitlab::Database.postgresql?
SiteStatistic.update_all('wikis_count = (SELECT COUNT(*) FROM project_features WHERE wiki_access_level != 0)')
end
puts 'OK!'.color(:green)
puts
end
end
...@@ -10,9 +10,6 @@ describe Gitlab::BareRepositoryImport::Importer, :seed_helper do ...@@ -10,9 +10,6 @@ describe Gitlab::BareRepositoryImport::Importer, :seed_helper do
subject(:importer) { described_class.new(admin, bare_repository) } subject(:importer) { described_class.new(admin, bare_repository) }
before do before do
@rainbow = Rainbow.enabled
Rainbow.enabled = false
allow(described_class).to receive(:log) allow(described_class).to receive(:log)
end end
...@@ -20,7 +17,6 @@ describe Gitlab::BareRepositoryImport::Importer, :seed_helper do ...@@ -20,7 +17,6 @@ describe Gitlab::BareRepositoryImport::Importer, :seed_helper do
FileUtils.rm_rf(base_dir) FileUtils.rm_rf(base_dir)
TestEnv.clean_test_path TestEnv.clean_test_path
ensure_seeds ensure_seeds
Rainbow.enabled = @rainbow
end end
shared_examples 'importing a repository' do shared_examples 'importing a repository' do
......
...@@ -98,15 +98,6 @@ describe SystemCheck::SimpleExecutor do ...@@ -98,15 +98,6 @@ describe SystemCheck::SimpleExecutor do
end end
end end
before do
@rainbow = Rainbow.enabled
Rainbow.enabled = false
end
after do
Rainbow.enabled = @rainbow
end
describe '#component' do describe '#component' do
it 'returns stored component name' do it 'returns stored component name' do
expect(subject.component).to eq('Test') expect(subject.component).to eq('Test')
......
# frozen_string_literal: true
require 'spec_helper'
require Rails.root.join('db', 'post_migrate', '20180809195358_migrate_null_wiki_access_levels.rb')
describe MigrateNullWikiAccessLevels, :migration do
let(:namespaces) { table('namespaces') }
let(:projects) { table(:projects) }
let(:project_features) { table(:project_features) }
let(:migration) { described_class.new }
before do
namespace = namespaces.create(name: 'foo', path: 'foo')
projects.create!(id: 1, name: 'gitlab1', path: 'gitlab1', namespace_id: namespace.id)
projects.create!(id: 2, name: 'gitlab2', path: 'gitlab2', namespace_id: namespace.id)
projects.create!(id: 3, name: 'gitlab3', path: 'gitlab3', namespace_id: namespace.id)
project_features.create!(id: 1, project_id: 1, wiki_access_level: nil)
project_features.create!(id: 2, project_id: 2, wiki_access_level: 10)
project_features.create!(id: 3, project_id: 3, wiki_access_level: 20)
end
describe '#up' do
it 'migrates existing project_features with wiki_access_level NULL to 20' do
expect { migration.up }.to change { project_features.where(wiki_access_level: 20).count }.by(1)
end
end
end
...@@ -29,6 +29,7 @@ end ...@@ -29,6 +29,7 @@ end
# require rainbow gem String monkeypatch, so we can test SystemChecks # require rainbow gem String monkeypatch, so we can test SystemChecks
require 'rainbow/ext/string' require 'rainbow/ext/string'
Rainbow.enabled = false
# Requires supporting ruby files with custom matchers and macros, etc, # Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories. # in spec/support/ and its subdirectories.
......
# frozen_string_literal: true
require 'rake_helper'
describe 'rake gitlab:refresh_site_statistics' do
before do
Rake.application.rake_require 'tasks/gitlab/site_statistics'
create(:project)
SiteStatistic.fetch.update(repositories_count: 0, wikis_count: 0)
end
let(:task) { 'gitlab:refresh_site_statistics' }
it 'recalculates existing counters' do
run_rake_task(task)
expect(SiteStatistic.fetch.repositories_count).to eq(1)
expect(SiteStatistic.fetch.wikis_count).to eq(1)
end
it 'displays message listing counters' do
expect { run_rake_task(task) }.to output(/Updating Site Statistics counters:.* Repositories\.\.\. OK!.* Wikis\.\.\. OK!/m).to_stdout
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment