4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/sidekiq/sync/class_methods.rb', line 4
def perform_sync(*args)
real_args = []
options = Sidekiq::Sync::Options.new
for arg in args
if arg.is_a? Sidekiq::Sync::Options
options = arg
else
real_args << arg
end
end
return_channel = "sidekiq-sync:#{SecureRandom::uuid}"
self.perform_async(return_channel, *real_args)
queue_or_nil_if_timeout, value = Sidekiq.redis do |r|
r.blpop return_channel, timeout: options.timeout
end
unless queue_or_nil_if_timeout
raise Sidekiq::Sync::TimeoutError if options.raise
end
value
end
|