Skip to content

Cache Routable#full_path in RequestStore to reduce duplicate route loads

Stan Hu requested to merge sh-optimize-duplicate-routable-full-path into master

We see in #27387 (closed) that a call to polymorphic_path will cause duplicate SELECT route calls for each merge request in a milestone. This happens because calling project.namespace.becomes(Namespace) will instantiate a new instance of a Namespace for each merge request, which causes a N+1 query on the routes table. This change caches the state of the route by the specific class and ID, which dramatically eliminates duplicate work.

Merge request reports