From 6d40e9ec6a20e7f79deb8c291a1868d234111740 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Fri, 22 Mar 2019 19:06:10 +0200 Subject: [PATCH] Support "force delete" procedure when releasing a domain - `DomainCron.destroy_delete_candidates` runner is removed from `config/schedule.rb` with `domains:release` rake task as a replacement Closes #1119 --- app/models/concerns/domain/releasable.rb | 8 ++++++-- app/models/domain_cron.rb | 14 -------------- config/schedule.rb | 4 ---- test/models/domain/releasable/auctionable_test.rb | 9 +++++++++ test/models/domain/releasable/discardable_test.rb | 10 ++++++++++ 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/app/models/concerns/domain/releasable.rb b/app/models/concerns/domain/releasable.rb index c25af44be..8a5e7b5a5 100644 --- a/app/models/concerns/domain/releasable.rb +++ b/app/models/concerns/domain/releasable.rb @@ -15,13 +15,17 @@ module Concerns def releasable_domains if release_to_auction - where('delete_at < ? AND ? != ALL(coalesce(statuses, array[]::varchar[]))', + where('(delete_at < ? OR force_delete_date <= ?)' \ + ' AND ? != ALL(coalesce(statuses, array[]::varchar[]))', Time.zone.now, + Time.zone.today, DomainStatus::SERVER_DELETE_PROHIBITED) else - where('delete_at < ? AND ? != ALL(coalesce(statuses, array[]::varchar[])) AND' \ + where('(delete_at < ? OR force_delete_date <= ?)' \ + ' AND ? != ALL(coalesce(statuses, array[]::varchar[])) AND' \ ' ? != ALL(COALESCE(statuses, array[]::varchar[]))', Time.zone.now, + Time.zone.today, DomainStatus::SERVER_DELETE_PROHIBITED, DomainStatus::DELETE_CANDIDATE) end diff --git a/app/models/domain_cron.rb b/app/models/domain_cron.rb index c05167a82..1414d4dc5 100644 --- a/app/models/domain_cron.rb +++ b/app/models/domain_cron.rb @@ -78,18 +78,4 @@ class DomainCron STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{marked} of #{real} domains\n" unless Rails.env.test? marked end - - def self.destroy_delete_candidates - STDOUT << "#{Time.zone.now.utc} - Destroying domains\n" unless Rails.env.test? - - c = 0 - - Domain.where('force_delete_date <= ?', Time.zone.now.end_of_day.utc).each do |x| - DomainDeleteJob.enqueue(x.id, run_at: rand(((24*60) - (DateTime.now.hour * 60 + DateTime.now.minute))).minutes.from_now) - STDOUT << "#{Time.zone.now.utc} DomainCron.destroy_delete_candidates: job added by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test? - c += 1 - end - - STDOUT << "#{Time.zone.now.utc} - Job destroy added for #{c} domains\n" unless Rails.env.test? - end end diff --git a/config/schedule.rb b/config/schedule.rb index f58e5b07b..d47b45ea9 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -38,10 +38,6 @@ if @cron_group == 'registry' runner 'Certificate.update_crl' end - every 42.minutes do - runner 'DomainCron.destroy_delete_candidates' - end - every 45.minutes do runner 'DomainCron.start_expire_period' end diff --git a/test/models/domain/releasable/auctionable_test.rb b/test/models/domain/releasable/auctionable_test.rb index 84f298b0a..b4cb9098b 100644 --- a/test/models/domain/releasable/auctionable_test.rb +++ b/test/models/domain/releasable/auctionable_test.rb @@ -40,6 +40,15 @@ class DomainReleasableAuctionableTest < ActiveSupport::TestCase assert_not @domain.domain_name.at_auction? end + def test_sells_domains_with_scheduled_force_delete_procedure_at_auction + @domain.update!(force_delete_date: '2010-07-05') + travel_to Time.zone.parse('2010-07-05') + + Domain.release_domains + + assert @domain.domain_name.at_auction? + end + def test_deletes_registered_domain @domain.update!(delete_at: Time.zone.parse('2010-07-05 07:59')) travel_to Time.zone.parse('2010-07-05 08:00') diff --git a/test/models/domain/releasable/discardable_test.rb b/test/models/domain/releasable/discardable_test.rb index b8b6aff59..b1603e7fa 100644 --- a/test/models/domain/releasable/discardable_test.rb +++ b/test/models/domain/releasable/discardable_test.rb @@ -15,6 +15,16 @@ class DomainReleasableDiscardableTest < ActiveSupport::TestCase assert @domain.discarded? end + def test_discards_domains_with_scheduled_force_delete_procedure + @domain.update!(force_delete_date: '2010-07-05') + travel_to Time.zone.parse('2010-07-05') + + Domain.release_domains + @domain.reload + + assert @domain.discarded? + end + def test_ignores_domains_with_delete_at_in_the_future_or_now @domain.update!(delete_at: Time.zone.parse('2010-07-05 08:00')) travel_to Time.zone.parse('2010-07-05 08:00')