-
Notifications
You must be signed in to change notification settings - Fork 25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP: Cache restructure middleware args in HTTP endpoint macros #1400
Closed
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This is a followup to #1394 where we pushed all binding restructure middleware to the HTTP endpoint macros. It did not fix original problem of
POST /bundle/import
reevaluating its schema.The HTTP endpoint macros reevaluate their arguments. This is by design, but very bad for performance. For example, the following benchmark simulates a route with a
:body
schema that takes 100ms (just an arbitrary round number) to evaluate/initialize. On master, 10 calls to this endpoint takes ~1030 ms. After this PR, it takes ~3ms.master bench result
Bench results for this PR included in the tests.
This PR rewrites compojure endpoint macro calls when it's safe. In particular, if the macro does not bind
req
likeinstead of
then we can rewrite args like
to
If it is not safe, then this PR throws a compile-time error and shows the user how to make the most performant endpoint. For example, if
req
is bound like here:then the following error is thrown during expansion of
ANY
:§ QA
No QA is needed.
§ Release Notes
§ Squashed Commits