diff --git a/app/jobs/runtime/pollable_job_cleanup.rb b/app/jobs/runtime/pollable_job_cleanup.rb index 6b106c4c11..5148323b13 100644 --- a/app/jobs/runtime/pollable_job_cleanup.rb +++ b/app/jobs/runtime/pollable_job_cleanup.rb @@ -2,10 +2,14 @@ module VCAP::CloudController module Jobs module Runtime class PollableJobCleanup < VCAP::CloudController::Jobs::CCJob - CUTOFF_AGE_IN_DAYS = 90 + attr_accessor :cutoff_age_in_days + + def initialize(cutoff_age_in_days) + @cutoff_age_in_days = cutoff_age_in_days + end def perform - old_pollable_jobs = PollableJobModel.where(Sequel.lit("created_at < CURRENT_TIMESTAMP - INTERVAL '?' DAY", CUTOFF_AGE_IN_DAYS)) + old_pollable_jobs = PollableJobModel.where(Sequel.lit("created_at < CURRENT_TIMESTAMP - INTERVAL '?' DAY", cutoff_age_in_days)) logger = Steno.logger('cc.background.pollable-job-cleanup') logger.info("Cleaning up #{old_pollable_jobs.count} Jobs rows") old_pollable_jobs.delete diff --git a/config/cloud_controller.yml b/config/cloud_controller.yml index 71041f6bce..302ae48b63 100644 --- a/config/cloud_controller.yml +++ b/config/cloud_controller.yml @@ -48,6 +48,9 @@ failed_jobs: cutoff_age_in_days: 31 frequency_in_seconds: 144000 #4h +pollable_jobs: + cutoff_age_in_days: 90 + service_operations_initial_cleanup: frequency_in_seconds: 300 diff --git a/lib/cloud_controller/clock/scheduler.rb b/lib/cloud_controller/clock/scheduler.rb index 304be59969..cc2dbb853b 100644 --- a/lib/cloud_controller/clock/scheduler.rb +++ b/lib/cloud_controller/clock/scheduler.rb @@ -13,7 +13,7 @@ class Scheduler { name: 'expired_resource_cleanup', class: Jobs::Runtime::ExpiredResourceCleanup, time: '00:30' }, { name: 'expired_orphaned_blob_cleanup', class: Jobs::Runtime::ExpiredOrphanedBlobCleanup, time: '01:00' }, { name: 'orphaned_blobs_cleanup', class: Jobs::Runtime::OrphanedBlobsCleanup, time: '01:30', priority: Clock::MEDIUM_PRIORITY }, - { name: 'pollable_job_cleanup', class: Jobs::Runtime::PollableJobCleanup, time: '02:00' }, + { name: 'pollable_job_cleanup', class: Jobs::Runtime::PollableJobCleanup, time: '02:00', arg_from_config: %i[pollable_jobs cutoff_age_in_days] }, { name: 'prune_completed_deployments', class: Jobs::Runtime::PruneCompletedDeployments, time: '03:00', arg_from_config: [:max_retained_deployments_per_app] }, { name: 'prune_completed_builds', class: Jobs::Runtime::PruneCompletedBuilds, time: '03:30', arg_from_config: [:max_retained_builds_per_app] }, { name: 'prune_excess_app_revisions', class: Jobs::Runtime::PruneExcessAppRevisions, time: '03:35', arg_from_config: [:max_retained_revisions_per_app] } diff --git a/lib/cloud_controller/config_schemas/base/clock_schema.rb b/lib/cloud_controller/config_schemas/base/clock_schema.rb index f16dfc24bd..09cf2f8544 100644 --- a/lib/cloud_controller/config_schemas/base/clock_schema.rb +++ b/lib/cloud_controller/config_schemas/base/clock_schema.rb @@ -26,6 +26,9 @@ class ClockSchema < VCAP::Config optional(:max_number_of_failed_delayed_jobs) => Integer, frequency_in_seconds: Integer }, + pollable_jobs: { + cutoff_age_in_days: Integer + }, service_operations_initial_cleanup: { frequency_in_seconds: Integer }, diff --git a/spec/unit/jobs/runtime/pollable_job_cleanup_spec.rb b/spec/unit/jobs/runtime/pollable_job_cleanup_spec.rb index 3b12d54e96..070e0388b0 100644 --- a/spec/unit/jobs/runtime/pollable_job_cleanup_spec.rb +++ b/spec/unit/jobs/runtime/pollable_job_cleanup_spec.rb @@ -3,9 +3,10 @@ module VCAP::CloudController module Jobs::Runtime RSpec.describe PollableJobCleanup, job_context: :worker do - subject(:job) { PollableJobCleanup.new } - let!(:old_job) { PollableJobModel.create(created_at: 91.days.ago) } - let!(:new_job) { PollableJobModel.create(created_at: 1.day.ago) } + let(:cutoff_age_in_days) { 30 } + subject(:job) { PollableJobCleanup.new(cutoff_age_in_days) } + let!(:old_job) { PollableJobModel.create(created_at: (cutoff_age_in_days + 1).days.ago) } + let!(:new_job) { PollableJobModel.create(created_at: (cutoff_age_in_days - 1).day.ago) } it { is_expected.to be_a_valid_job } diff --git a/spec/unit/lib/cloud_controller/clock/scheduler_spec.rb b/spec/unit/lib/cloud_controller/clock/scheduler_spec.rb index ce56028a26..4a44cd3c30 100644 --- a/spec/unit/lib/cloud_controller/clock/scheduler_spec.rb +++ b/spec/unit/lib/cloud_controller/clock/scheduler_spec.rb @@ -19,6 +19,7 @@ module VCAP::CloudController app_usage_events: { cutoff_age_in_days: 1 }, audit_events: { cutoff_age_in_days: 3 }, failed_jobs: { frequency_in_seconds: 400, cutoff_age_in_days: 4, max_number_of_failed_delayed_jobs: 10 }, + pollable_jobs: { cutoff_age_in_days: 2 }, service_operations_initial_cleanup: { frequency_in_seconds: 600 }, service_usage_events: { cutoff_age_in_days: 5 }, completed_tasks: { cutoff_age_in_days: 6 }, @@ -108,7 +109,7 @@ module VCAP::CloudController expect(clock).to receive(:schedule_daily_job) do |args, &block| expect(args).to eql(name: 'pollable_job_cleanup', at: '02:00', priority: 0) - expect(Jobs::Runtime::PollableJobCleanup).to receive(:new).with(no_args).and_call_original + expect(Jobs::Runtime::PollableJobCleanup).to receive(:new).with(2).and_call_original expect(block.call).to be_instance_of(Jobs::Runtime::PollableJobCleanup) end