eventbrite-sdk-ruby icon indicating copy to clipboard operation
eventbrite-sdk-ruby copied to clipboard

`token` is `nil` in threaded envrionment like Sidekiq

Open krisleech opened this issue 3 years ago • 0 comments

Using EventbriteSDK in a threaded environment does not work because EventbriteSDK.token is nil inside child threads.

This is because the token is stored in a thread local var which is local to the parent thread.

Therefore we need to set the token before every use of EventbriteSDK in any sidekiq jobs instead of setting it once in an initializer. I assume this would also be a problem in threaded servers like Puma.

Example:

test.rb

#!/usr/bin/env ruby
require 'bundler/inline'

gemfile true do
  source 'https://rubygems.org'
  gem 'eventbrite_sdk'
end

EventbriteSDK.token = SecureRandom.uuid

puts(EventbriteSDK.token.inspect)

10.times.map { Thread.new { puts(EventbriteSDK.token.inspect)  } }.each(&:join)

The output is something like:

ruby test.rb
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
<SNIP>
"c2f45df8-fe6c-4a60-b5ee-ab38c1716363"
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil

The solution would be to use a regular class variable instead. I'm happy to prepare a PR, please let me know.

krisleech avatar Feb 23 '22 12:02 krisleech