-
Notifications
You must be signed in to change notification settings - Fork 2.8k
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
fix(api_service): exclude health checks from throttling with ConcurrencyLimitLayer #2320
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice stuff! Just a nit suggestion, but feel free to skip it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good, I just have one minor question.
Co-authored-by: Rafał Chabowski <[email protected]>
let unthrottled_routes = Router::new() | ||
.route("/v1/health", get(health)) | ||
.route("/health", get(health)); | ||
|
||
let throttled_routes = Router::new() | ||
.route("/v1/playground", get(graphql_playground)) | ||
.route("/v1/graphql", post(graphql_handler).options(ok)) | ||
.route( | ||
"/v1/graphql-sub", | ||
post(graphql_subscription_handler).options(ok), | ||
) | ||
.route("/v1/metrics", get(metrics)) | ||
.route("/v1/health", get(health)) | ||
.route("/health", get(health)) | ||
.layer(ConcurrencyLimitLayer::new(concurrency_limit)) | ||
.layer(ConcurrencyLimitLayer::new(concurrency_limit)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Throteling metrics doesn't allow request data=)
are you saying that because metrics are throttled, it affects how graphql and graphql-sub are throttled as well?
why shouldn't we throttle the metrics?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because if we have a lot of queries, it becomes impossible for us to track the state of the node from the Grafana=)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
okay, making the change
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
addressed in 1a66422
## Version v0.39.0 ### Added - [2324](#2324): Added metrics for sync, async processor and for all GraphQL queries. - [2320](#2320): Added new CLI flag `graphql-max-resolver-recursive-depth` to limit recursion within resolver. The default value it "1". ## Fixed - [2320](#2320): Prevent `/health` and `/v1/health` from being throttled by the concurrency limiter. - [2322](#2322): Set the salt of genesis contracts to zero on execution. - [2324](#2324): Ignore peer if we already are syncing transactions from it. #### Breaking - [2320](#2330): Reject queries that are recursive during the resolution of the query. ### Changed #### Breaking - [2311](#2311): Changed the text of the error returned by the executor if gas overflows. ## What's Changed * chore(executor): instrument errors to be more meaningful by @rymnc in #2311 * fix(dummy_da_block_costs): remove dependency on polling_interval and use channel instead by @rymnc in #2314 * fix(txpool): Error in GossipsubMessageAcceptance variant docstrings by @netrome in #2316 * refactor: Eager returns in txpool_v2::service::Task::run by @netrome in #2325 * fix(api_service): exclude health checks from throttling with ConcurrencyLimitLayer by @rymnc in #2320 * Remove the `normalize_rewards_and_costs()` function by @rafal-ch in #2293 * fix(genesis): set salt of contract on execution of genesis state configuration by @rymnc in #2322 * Fixing the issue with duplicate transaction synchronization processes by @xgreenx in #2324 * Reject queries that are recursive during the resolution by @xgreenx in #2330 **Full Changelog**: v0.38.0...v0.39.0
Linked Issues/PRs
closes #2319
Description
Uses axum's
merge
chaining operator to add theConcurrencyLimit Layer
only on subsets of the routes we serve, and exclude/health
from it.We retain
/metrics
to be throttled, because it acquires a lock on theGLOBAL_REGISTER
, which may prevent Prometheus from reading metrics. This is a double-edged sword though i think.Checklist
Before requesting review
After merging, notify other teams
[Add or remove entries as needed]