0
0
Fork 0

Deal with collation-related index corruption (#14860)

* Add tootctl maintenance fix-duplicates

This tool goes through the database to detect and fix duplicates.
This operation is very slow and may cause data loss (of data that would be
inaccessible without intervention because of the existing index corruptions).
It tries its best to make sensible decisions, and asks the user in some cases.

* Add warning message in db:migrate hook

* Clear Rails cache after being done with database deduplication

Avoids followers hash cache being incorrect, among other things
This commit is contained in:
ThibG 2020-11-19 17:37:49 +01:00 committed by GitHub
parent 29e76f994e
commit 1242e57c27
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 625 additions and 0 deletions

View file

@ -48,6 +48,17 @@ namespace :db do
end
end
task :post_migration_hook do
at_exit do
unless %w(C POSIX).include?(ActiveRecord::Base.connection.execute('SELECT datcollate FROM pg_database WHERE datname = current_database();').first['datcollate'])
Rails.logger.warn 'WARNING: Your database is using an unsafe collation setting, which might result in index corruption.'
Rails.logger.warn 'WARNING: See https://docs.joinmastodon.org/admin/troubleshooting/index-corruption/#am-i-affected'
end
end
end
Rake::Task['db:migrate'].enhance(['db:post_migration_hook'])
# Before we load the schema, define the timestamp_id function.
# Idiomatically, we might do this in a migration, but then it
# wouldn't end up in schema.rb, so we'd need to figure out a way to