Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit 17401d8

Browse files
author
Derik Evangelista
committed
v3: respect broker retry-after header
[#171649671](https://www.pivotaltracker.com/story/show/171649671)
1 parent 181d374 commit 17401d8

2 files changed

Lines changed: 36 additions & 36 deletions

File tree

app/jobs/v3/services/fetch_last_operation_job.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def pollable_job
8484
end
8585

8686
def try_again
87-
delayed_job = retry_job(retry_after_header: @retry_interval)
87+
delayed_job = retry_job(retry_after_header: @retry_after)
8888
pollable_job.update(
8989
state: PollableJobModel::POLLING_STATE,
9090
delayed_job_guid: delayed_job.guid

spec/unit/jobs/v3/services/fetch_last_operation_job_spec.rb

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ module V3
5252

5353
let(:pollable_job) {
5454
pollable_job = Jobs::Enqueuer.new(fake_job, { queue: Jobs::Queues.generic, run_at: Delayed::Job.db_time_now }).enqueue_pollable
55+
execute_all_jobs(expected_successes: 1, expected_failures: 0)
5556
pollable_job.update(state: PollableJobModel::POLLING_STATE)
5657
}
5758
let(:pollable_job_guid) { pollable_job.guid }
@@ -62,11 +63,10 @@ module V3
6263
request_attrs: request_attrs,
6364
pollable_job_guid: pollable_job_guid,
6465
user_audit_info: user_audit_info,
65-
)
66+
)
6667
end
6768

6869
def enqueue(job)
69-
execute_all_jobs(expected_successes: 1, expected_failures: 0)
7070
delayed_job = Jobs::Enqueuer.new(job, { queue: Jobs::Queues.generic, run_at: Delayed::Job.db_time_now }).enqueue
7171
pollable_job.update(delayed_job_guid: delayed_job.guid)
7272
end
@@ -425,6 +425,39 @@ def run_job(job, successes: 1, failures: 0)
425425
end
426426
end
427427
end
428+
429+
include_examples 'when brokers return Retry-After header', :fetch_service_instance_last_operation
430+
431+
context 'when the poll_interval is changed after the job was created' do
432+
let(:default_polling_interval) { VCAP::CloudController::Config.config.get(:broker_client_default_async_poll_interval_seconds) }
433+
let(:new_polling_interval) { default_polling_interval * 2 }
434+
let(:state) { 'in progress' }
435+
436+
before do
437+
expect(job.poll_interval).to eq(default_polling_interval)
438+
expect(default_polling_interval).not_to eq(new_polling_interval)
439+
TestConfig.override(broker_client_default_async_poll_interval_seconds: new_polling_interval)
440+
end
441+
442+
it 'updates the poll interval after the next run' do
443+
Timecop.freeze(Time.now)
444+
first_run_time = Time.now
445+
446+
Jobs::Enqueuer.new(job, { queue: Jobs::Queues.generic, run_at: first_run_time }).enqueue
447+
execute_all_jobs(expected_successes: 1, expected_failures: 0)
448+
expect(Delayed::Job.count).to eq(1)
449+
450+
old_next_run_time = first_run_time + default_polling_interval.seconds + 1.second
451+
Timecop.travel(old_next_run_time) do
452+
execute_all_jobs(expected_successes: 0, expected_failures: 0)
453+
end
454+
455+
new_next_run_time = first_run_time + new_polling_interval.seconds + 1.second
456+
Timecop.travel(new_next_run_time) do
457+
execute_all_jobs(expected_successes: 1, expected_failures: 0)
458+
end
459+
end
460+
end
428461
end
429462

430463
context 'when the service instance has been purged' do
@@ -535,39 +568,6 @@ def run_job(job, successes: 1, failures: 0)
535568
end
536569
end
537570
end
538-
539-
context 'when the poll_interval is changed after the job was created' do
540-
let(:default_polling_interval) { VCAP::CloudController::Config.config.get(:broker_client_default_async_poll_interval_seconds) }
541-
let(:new_polling_interval) { default_polling_interval * 2 }
542-
let(:state) { 'in progress' }
543-
544-
before do
545-
expect(job.poll_interval).to eq(default_polling_interval)
546-
expect(default_polling_interval).not_to eq(new_polling_interval)
547-
TestConfig.override(broker_client_default_async_poll_interval_seconds: new_polling_interval)
548-
end
549-
550-
it 'updates the poll interval after the next run' do
551-
Timecop.freeze(Time.now)
552-
first_run_time = Time.now
553-
554-
Jobs::Enqueuer.new(job, { queue: Jobs::Queues.generic, run_at: first_run_time }).enqueue
555-
execute_all_jobs(expected_successes: 1, expected_failures: 0)
556-
expect(Delayed::Job.count).to eq(1)
557-
558-
old_next_run_time = first_run_time + default_polling_interval.seconds + 1.second
559-
Timecop.travel(old_next_run_time) do
560-
execute_all_jobs(expected_successes: 0, expected_failures: 0)
561-
end
562-
563-
new_next_run_time = first_run_time + new_polling_interval.seconds + 1.second
564-
Timecop.travel(new_next_run_time) do
565-
execute_all_jobs(expected_successes: 1, expected_failures: 0)
566-
end
567-
end
568-
end
569-
570-
include_examples 'when brokers return Retry-After header', :fetch_service_instance_last_operation
571571
end
572572
end
573573
end

0 commit comments

Comments
 (0)