From 84c4312a25b42720523ecd883480dc5db079b15b Mon Sep 17 00:00:00 2001 From: Harry Lascelles Date: Mon, 4 Apr 2022 20:47:26 +0100 Subject: [PATCH] Formalise que_scheduler_check_job_exists function change This changed in a PR without an accompanying migration. This may cause structure diffs when run on a clean DB. We should perform the change with a migration for it to be correct in all environments. --- CHANGELOG.md | 1 + README.md | 4 ++-- lib/que/scheduler/migrations/6/up.sql | 2 +- lib/que/scheduler/migrations/7/down.sql | 13 +++++++++++++ lib/que/scheduler/migrations/7/up.sql | 13 +++++++++++++ spec/que/scheduler/migrations_spec.rb | 8 ++++++++ 6 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 lib/que/scheduler/migrations/7/down.sql create mode 100644 lib/que/scheduler/migrations/7/up.sql diff --git a/CHANGELOG.md b/CHANGELOG.md index 1299e3f8..ec572e96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## Unreleased +- Formalise que_scheduler_check_job_exists function change [#334](https://github.com/hlascelles/que-scheduler/pull/335) - Remove Ruby 2.5, Ruby 2.6 and Que 0.12.x support [#334](https://github.com/hlascelles/que-scheduler/pull/334) ## 4.2.2 (2022-02-23) diff --git a/README.md b/README.md index 46772f3f..ffc1eb53 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ resque-scheduler files, but with additional features. ```ruby class CreateQueSchedulerSchema < ActiveRecord::Migration def change - Que::Scheduler::Migrations.migrate!(version: 6) + Que::Scheduler::Migrations.migrate!(version: 7) end end ``` @@ -211,7 +211,7 @@ performed. ```ruby class CreateQueSchedulerSchema < ActiveRecord::Migration def change - Que::Scheduler::Migrations.migrate!(version: 6) + Que::Scheduler::Migrations.migrate!(version: 7) end end ``` diff --git a/lib/que/scheduler/migrations/6/up.sql b/lib/que/scheduler/migrations/6/up.sql index 59f8f639..3487286c 100644 --- a/lib/que/scheduler/migrations/6/up.sql +++ b/lib/que/scheduler/migrations/6/up.sql @@ -13,7 +13,7 @@ DECLARE BEGIN IF OLD.job_class = 'Que::Scheduler::SchedulerJob' THEN IF NOT que_scheduler_check_job_exists() THEN - raise exception 'Deletion of que_scheduler job prevented. Deleting the que_scheduler job is almost certainly a mistake.'; + raise exception 'Deletion of que_scheduler job % prevented. Deleting the que_scheduler job is almost certainly a mistake.', OLD.job_id; END IF; END IF; RETURN OLD; diff --git a/lib/que/scheduler/migrations/7/down.sql b/lib/que/scheduler/migrations/7/down.sql new file mode 100644 index 00000000..03f8a5b2 --- /dev/null +++ b/lib/que/scheduler/migrations/7/down.sql @@ -0,0 +1,13 @@ +CREATE OR REPLACE FUNCTION que_scheduler_prevent_job_deletion() RETURNS TRIGGER AS +$BODY$ +DECLARE +BEGIN + IF OLD.job_class = 'Que::Scheduler::SchedulerJob' THEN + IF NOT que_scheduler_check_job_exists() THEN + raise exception 'Deletion of que_scheduler job % prevented. Deleting the que_scheduler job is almost certainly a mistake.', OLD.job_id; + END IF; + END IF; + RETURN OLD; +END; +$BODY$ +LANGUAGE 'plpgsql'; diff --git a/lib/que/scheduler/migrations/7/up.sql b/lib/que/scheduler/migrations/7/up.sql new file mode 100644 index 00000000..d4a7d84f --- /dev/null +++ b/lib/que/scheduler/migrations/7/up.sql @@ -0,0 +1,13 @@ +CREATE OR REPLACE FUNCTION que_scheduler_prevent_job_deletion() RETURNS TRIGGER AS +$BODY$ +DECLARE +BEGIN + IF OLD.job_class = 'Que::Scheduler::SchedulerJob' THEN + IF NOT que_scheduler_check_job_exists() THEN + raise exception 'Deletion of que_scheduler job prevented. Deleting the que_scheduler job is almost certainly a mistake.'; + END IF; + END IF; + RETURN OLD; +END; +$BODY$ +LANGUAGE 'plpgsql'; diff --git a/spec/que/scheduler/migrations_spec.rb b/spec/que/scheduler/migrations_spec.rb index 239d5081..3921c08f 100644 --- a/spec/que/scheduler/migrations_spec.rb +++ b/spec/que/scheduler/migrations_spec.rb @@ -16,6 +16,10 @@ def check_index_existence(index_name, expect) ::Que::Scheduler::SchedulerJob.enqueue ::Que::Scheduler::StateChecks.check + expect(described_class.db_version).to eq(7) + + # Check 7 change down + described_class.migrate!(version: 6) expect(described_class.db_version).to eq(6) migration_5_index = "index_que_scheduler_audit_on_scheduler_job_id" @@ -110,6 +114,10 @@ def check_index_existence(index_name, expect) described_class.migrate!(version: 6) check_index_existence(migration_6_index, true) + # Check 7 change up + described_class.migrate!(version: 7) + expect(described_class.db_version).to eq(7) + Que::Scheduler::StateChecks.check end # rubocop:enable RSpec/MultipleExpectations