@@ -6,9 +6,10 @@ module CloudController
66 class FakeJob < Jobs ::ReoccurringJob
77 attr_reader :calls , :expired , :expiry_time , :iterations , :warnings
88
9- def initialize ( iterations : 10 )
9+ def initialize ( iterations : 10 , retry_after : [ ] )
1010 @iterations = iterations
1111 @calls = 0
12+ @retry_after = retry_after
1213 super ( )
1314 end
1415
@@ -25,6 +26,7 @@ def resource_type
2526 end
2627
2728 def perform
29+ self . polling_interval_seconds = @retry_after [ @calls ] if @retry_after . length > @calls
2830 @calls += 1
2931 finish if @calls == iterations
3032 end
@@ -78,11 +80,11 @@ def perform
7880 Jobs ::Enqueuer . new ( job , queue : Jobs ::Queues . generic ) . enqueue_pollable
7981 execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
8082
81- Timecop . freeze ( enqueued_time + 94 . second ) do
83+ Timecop . freeze ( 94 . seconds . after enqueued_time ) do
8284 execute_all_jobs ( expected_successes : 0 , expected_failures : 0 )
8385 end
8486
85- Timecop . freeze ( enqueued_time + 96 . seconds ) do
87+ Timecop . freeze ( 96 . seconds . after enqueued_time ) do
8688 execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
8789 end
8890 end
@@ -96,6 +98,92 @@ def perform
9698 expect ( job . polling_interval_seconds ) . to eq ( 24 . hours )
9799 end
98100
101+ context 'updates the polling interval if config changes' do
102+ it 'when changed from the job only' do
103+ job = FakeJob . new ( retry_after : [ 20 , 30 ] )
104+ TestConfig . config [ :broker_client_default_async_poll_interval_seconds ] = 10
105+
106+ enqueued_time = Time . now
107+
108+ Jobs ::Enqueuer . new ( job , queue : Jobs ::Queues . generic ) . enqueue_pollable
109+ execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
110+
111+ Timecop . freeze ( 19 . seconds . after enqueued_time ) do
112+ execute_all_jobs ( expected_successes : 0 , expected_failures : 0 )
113+ end
114+
115+ Timecop . freeze ( 22 . seconds . after enqueued_time ) do
116+ enqueued_time = Time . now
117+ execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
118+ end
119+
120+ Timecop . freeze ( 29 . seconds . after enqueued_time ) do
121+ execute_all_jobs ( expected_successes : 0 , expected_failures : 0 )
122+ end
123+
124+ Timecop . freeze ( 32 . seconds . after enqueued_time ) do
125+ execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
126+ end
127+
128+ end
129+
130+ it 'when default changed after changing from the job' do
131+ job = FakeJob . new ( retry_after : [ 20 ] )
132+ TestConfig . config [ :broker_client_default_async_poll_interval_seconds ] = 10
133+
134+ enqueued_time = Time . now
135+
136+ Jobs ::Enqueuer . new ( job , queue : Jobs ::Queues . generic ) . enqueue_pollable
137+ execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
138+
139+ Timecop . freeze ( 19 . seconds . after enqueued_time ) do
140+ execute_all_jobs ( expected_successes : 0 , expected_failures : 0 )
141+ end
142+
143+ Timecop . freeze ( 21 . seconds . after enqueued_time ) do
144+ TestConfig . config [ :broker_client_default_async_poll_interval_seconds ] = 30
145+ enqueued_time = Time . now
146+ execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
147+ end
148+
149+ Timecop . freeze ( 29 . seconds . after enqueued_time ) do
150+ execute_all_jobs ( expected_successes : 0 , expected_failures : 0 )
151+ end
152+
153+ Timecop . freeze ( 31 . seconds . after enqueued_time ) do
154+ execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
155+ end
156+ end
157+
158+ it 'when changing default only' do
159+ job = FakeJob . new
160+ TestConfig . config [ :broker_client_default_async_poll_interval_seconds ] = 10
161+
162+ enqueued_time = Time . now
163+
164+ Jobs ::Enqueuer . new ( job , queue : Jobs ::Queues . generic ) . enqueue_pollable
165+ execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
166+
167+ Timecop . freeze ( 9 . seconds . after enqueued_time ) do
168+ execute_all_jobs ( expected_successes : 0 , expected_failures : 0 )
169+ end
170+
171+ Timecop . freeze ( 11 . seconds . after enqueued_time ) do
172+ TestConfig . config [ :broker_client_default_async_poll_interval_seconds ] = 30
173+ enqueued_time = Time . now
174+ execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
175+ end
176+
177+ Timecop . freeze ( 29 . seconds . after enqueued_time ) do
178+ execute_all_jobs ( expected_successes : 0 , expected_failures : 0 )
179+ end
180+
181+ Timecop . freeze ( 31 . seconds . after enqueued_time ) do
182+ execute_all_jobs ( expected_successes : 1 , expected_failures : 0 )
183+ end
184+ end
185+ end
186+
99187 it 'continues to run until finished' do
100188 Jobs ::Enqueuer . new ( FakeJob . new , queue : Jobs ::Queues . generic ) . enqueue_pollable
101189
@@ -120,7 +208,7 @@ def perform
120208 execute_all_jobs ( expected_successes : 0 , expected_failures : 1 )
121209 expect ( PollableJobModel . first . state ) . to eq ( 'FAILED' )
122210
123- Timecop . freeze ( Time . now + 61 . seconds ) do
211+ Timecop . freeze ( 61 . seconds . after Time . now ) do
124212 execute_all_jobs ( expected_successes : 0 , expected_failures : 0 )
125213 end
126214 end
@@ -163,7 +251,7 @@ def handle_timeout
163251
164252 Jobs ::Enqueuer . new ( job , queue : Jobs ::Queues . generic ) . enqueue_pollable
165253
166- Timecop . freeze ( Time . now + 61 . seconds ) do
254+ Timecop . freeze ( 61 . seconds . after Time . now ) do
167255 execute_all_jobs ( expected_successes : 0 , expected_failures : 1 , jobs_to_execute : 1 )
168256 expect ( PollableJobModel . first . state ) . to eq ( 'FAILED' )
169257 end
0 commit comments