Fix/routeoptions-shallow-copy-oom - #11247
Open
puertomontt wants to merge 1 commit into
Open
Conversation
…g per route GetRouteOptionForRouteRule deep-cloned the first RouteOption attachment for every translated route via ShallowMergeRouteOptions' dst==nil branch. When many routes reference the same RouteOption (esp. ones carrying large transformation templates), each route received its own deep copy of identical config, which dominated translation heap (~31% / 4.3GB of a customer's 14GB heap). Add ShallowCopyRouteOptions, which copies only the top-level RouteOptions fields and shares the immutable sub-messages by pointer. This is consistent with the existing dst!=nil merge branch, which already shares src's fields. Each route still gets a distinct top-level message, so route plugins that reassign top-level fields (urlrewrite, headermodifier, mirror) remain isolated; they must not mutate the shared sub-messages in place. Memory now scales with the number of unique RouteOptions rather than the number of routes.
|
Visit the preview URL for this PR (updated for commit f7712a0): https://gloo-edge--pr11247-fix-routeoptions-sha-lge38mhh.web.app (expires Mon, 08 Jun 2026 22:42:04 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: 77c2b86e287749579b7ff9cadb81e099042ef677 |
4 tasks
This file contains hidden or 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.
GetRouteOptionForRouteRule deep-cloned the first RouteOption attachment for
every translated route via ShallowMergeRouteOptions' dst==nil branch. When many
routes reference the same RouteOption (esp. ones carrying large transformation
templates), each route received its own deep copy of identical config, which
dominated translation heap (~31% / 4.3GB of a customer's 14GB heap).
Add ShallowCopyRouteOptions, which copies only the top-level RouteOptions fields
and shares the immutable sub-messages by pointer. This is consistent with the
existing dst!=nil merge branch, which already shares src's fields. Each route
still gets a distinct top-level message, so route plugins that reassign
top-level fields (urlrewrite, headermodifier, mirror) remain isolated; they must
not mutate the shared sub-messages in place.
Memory now scales with the number of unique RouteOptions rather than the number
of routes.
Description
Change Type
Changelog
Additional Notes