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.
In our current implementation, although there are guards around the Rails::Patcher module, there are no such guards around the constituent modules (e.g. in
CoreExtensions
) it uses to actually patch Rails code. It's possible to call these and overpatch Rails methods, causing infinite loops and other nasty behaviors. This has actually occurred when Railties reload, as they do in our test suite.This pull request adds a helper function to
Datadog::Patcher
calleddo_once
which is a really simple singleton-like function that prevents a function being called more than once. It's equivalent to the oldreturn @patched if @patched; patcher.patch_code; @patched = true
, just a little nicer looking and abstracts away the pattern.I think this one could warrant some critical opinion, since the new function brings up questions about the direction of our patching API.