Skip to content

Fix/routeoptions-shallow-copy-oom - #11247

Open
puertomontt wants to merge 1 commit into
mainfrom
fix/routeoptions-shallow-copy-oom
Open

Fix/routeoptions-shallow-copy-oom#11247
puertomontt wants to merge 1 commit into
mainfrom
fix/routeoptions-shallow-copy-oom

Conversation

@puertomontt

Copy link
Copy Markdown

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

…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.
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant