Skip to content

Commit e8e7cf9

Browse files
committed
Add adjustable timeout to Service::LinkingWorkflow
The default timeout for any `::Job` is 5 minutes, it is possible that some large `EmsRefresh` full refreshes can exceed that and there is currently no way to extend the `Service::LinkingWorkflow` timeout.
1 parent 808eded commit e8e7cf9

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

app/models/manageiq/providers/ems_refresh_workflow.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ def queue_signal(*args, deliver_on: nil)
5959
super(*args, :role => role, :priority => priority, :deliver_on => deliver_on)
6060
end
6161

62+
def current_job_timeout(_timeout_adjustment = 1)
63+
options[:timeout] || super
64+
end
65+
6266
alias_method :initializing, :dispatch_start
6367
alias_method :start, :run_native_op
6468
alias_method :finish, :process_finished

app/models/service/resource_linking.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module Service::ResourceLinking
22
extend ActiveSupport::Concern
33

4-
def add_provider_vms(provider, uid_ems_array)
4+
def add_provider_vms(provider, uid_ems_array, timeout: nil)
55
vm_uid_array = Array(uid_ems_array).compact.uniq
66
raise _("no uid_ems_array defined for linking to service") if vm_uid_array.blank?
77

@@ -13,7 +13,8 @@ def add_provider_vms(provider, uid_ems_array)
1313
:userid => evm_owner.userid,
1414
:sync_key => guid,
1515
:service_id => id,
16-
:zone => my_zone
16+
:zone => my_zone,
17+
:timeout => timeout
1718
}
1819

1920
_log.info("NAME [#{options[:name]}] for user #{evm_owner.userid}")

spec/models/service/resource_linking_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,17 @@
1515
end.and_return(double(:signal_start => nil))
1616
service.add_provider_vms(provider, uid_ems_array)
1717
end
18+
19+
it 'sets Job options timeout' do
20+
job = service.add_provider_vms(provider, uid_ems_array, :timeout => 600)
21+
22+
expect(job.current_job_timeout(nil)).to eq(600)
23+
end
24+
25+
it 'defaults to base Job class default timeout' do
26+
job = service.add_provider_vms(provider, uid_ems_array)
27+
28+
expect(job.current_job_timeout(nil)).to eq(Job::DEFAULT_TIMEOUT)
29+
end
1830
end
1931
end

0 commit comments

Comments
 (0)