maintenance: add job to check for database corruption.
Add a job to run pg_amcheck hourly to check for corrupt database indexes. https://www.postgresql.org/docs/14/app-pgamcheck.html
This commit is contained in:
18
app/jobs/amcheck_database_job.rb
Normal file
18
app/jobs/amcheck_database_job.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
# A job that runs hourly to check the database for corruption. Spawned by {DanbooruMaintenance}.
|
||||
# Requires at least PostgreSQL 14.0 to be installed for pg_amcheck to be available.
|
||||
#
|
||||
# https://www.postgresql.org/docs/14/app-pgamcheck.html
|
||||
class AmcheckDatabaseJob < ApplicationJob
|
||||
def perform(options: "--verbose --install-missing --heapallindexed --parent-check")
|
||||
return unless system("pg_amcheck --version")
|
||||
|
||||
connection_url = ApplicationRecord.connection_db_config.url
|
||||
output = %x(PGDATABASE="#{connection_url}" pg_amcheck #{options})
|
||||
notify(output) unless $?.success?
|
||||
end
|
||||
|
||||
def notify(output)
|
||||
DanbooruLogger.info(output)
|
||||
Dmail.create_automated(to: User.owner, title: "pg_amcheck failed", body: output)
|
||||
end
|
||||
end
|
||||
@@ -6,6 +6,7 @@ module DanbooruMaintenance
|
||||
queue PrunePostsJob
|
||||
queue PruneRateLimitsJob
|
||||
queue RegeneratePostCountsJob
|
||||
queue AmcheckDatabaseJob
|
||||
end
|
||||
|
||||
def daily
|
||||
|
||||
9
test/jobs/amcheck_database_job_test.rb
Normal file
9
test/jobs/amcheck_database_job_test.rb
Normal file
@@ -0,0 +1,9 @@
|
||||
require 'test_helper'
|
||||
|
||||
class AmcheckDatabaseJobTest < ActiveJob::TestCase
|
||||
context "AmcheckDatabaseJob" do
|
||||
should "work" do
|
||||
AmcheckDatabaseJob.perform_now
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user