Fix session initialization for multi-threaded environments #534
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
r? @brandur-stripe
cc @stripe/api-libraries
Fixes #533.
In #531, we initialized the session in a thread-local store in
RequestsClient
's constructor. However, a single client instance is initialized for all threads, so only the first thread (that initializes the client) gets a session, and all other threads crash when trying to make a request becauseself._thread_local.session
doesn't exist.This PR fixes this issue by moving the session initialization in the
request()
method. A new session is only initialized if one doesn't already exist in the thread-local store. This way, each thread gets a session the first time it tries to make a request.We should probably have an automated test for this, but in the meantime I've tested this with a trivial script: