Errors with concurrent simulator requests due to global interpreter state #282
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.
Currently if the interpreter is not threadsafe as much of the state for an individual request being processed is stored in the interpreter struct itself. This causes problems for the simulator if it receives multiple concurrent requests.
While it might be nice for the interpreter to be threadsafe reworking things for that would be rather involved. A simpler solution to solve this specific issue is to add an interpreter lock which the simulator HTTP handler can acquire before processing a request.
This PR adds lock/unlock behavior for the interpreter http handler as well as setting up the Fastly-FF header to let the handler detect loops. Without that a deadlock could occur if the simulator was configured to be a backend for itself.