Skip to content

perf(model): serve integration plan from the request scope - #3461

Merged
bpamiri merged 1 commit into
developfrom
fix/model-integration-request-cache-3213
Aug 31, 2026
Merged

perf(model): serve integration plan from the request scope#3461
bpamiri merged 1 commit into
developfrom
fix/model-integration-request-cache-3213

Conversation

@bpamiri

@bpamiri bpamiri commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

Part of #3213.

The cached component-integration plan (#3236) was re-read from the application scope on every model/controller/mapper materialization — roughly six synchronized application-scope lookups per instance. The plan is stable within a request (the only invalidation is the #3457 rebuild-on-poison validation, which replaces both copies), so after its first use per request it is now served from a request-scope struct.

Measured on the #3213 benchmark rig (Lucee 7, 2,000 model().new(), instrumented):

  • plan lookup: 123 ms → 2 ms
  • total instantiation: ~1058 ms → ~830 ms (~20%)

Full breakdown of the remaining per-object cost is in the #3213 thread; the copy loop (~45%) and instance setup (~40%) are the next targets.

IntegrationPlanSpec now also pins the request-cache behavior (second call returns the same plan array without touching the application scope) and the rebuild test clears the request cache so it still exercises the poisoned application-scope path.

Verification

  • Local Lucee 7: global 243 pass, model 991 pass, 0 fail.
  • Local RustCFML full suite: no new failures vs baseline.
  • Full local Lucee suite + CI to follow.

The cached component-integration plan (#3236) was re-read from the
application scope on every model/controller/mapper materialization —
roughly six synchronized application-scope lookups per instance. The plan
is stable within a request (the only invalidation is the rebuild-on-poison
validation, which replaces both copies), so after its first use it is now
served from a request-scope struct.

Measured on the #3213 benchmark rig (Lucee 7, 2,000 model().new()):
plan lookup 123ms -> 2ms, ~12-15% off total instantiation time.

IntegrationPlanSpec now also pins the request-cache behavior (second call
returns the same plan array) and the rebuild test clears the request cache
so it still exercises the poisoned application-scope path.

Signed-off-by: Peter Amiri <peter@alurium.com>
@bpamiri
bpamiri merged commit 6cfe50b into develop Aug 31, 2026
12 checks passed
@bpamiri
bpamiri deleted the fix/model-integration-request-cache-3213 branch August 31, 2026 13:19
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