Skip to content

parrallel get flag from context#3192

Open
danoswaltCL wants to merge 1 commit into
release/6.5from
feature/optimized-feature-flag-from-context
Open

parrallel get flag from context#3192
danoswaltCL wants to merge 1 commit into
release/6.5from
feature/optimized-feature-flag-from-context

Conversation

@danoswaltCL

@danoswaltCL danoswaltCL commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

This breaks up the primary feature-flag fetcher getFlagsFromContext() into 3 parallel calls, instead of a 10 left-joiner, which apparently is another 'Cartesian Product' combinatorial explosion if several joins have several rows returned.

It also avoids getting inclusion lists at all when INCLUDE_ALL.

With a prod snapshot restored in my local, when i get flags for a user in clc context, this fetches in a tenth of the speed (~80ms vs 800ms).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors FeatureFlagRepository.getFlagsFromContext() to reduce query cost by splitting the previous large left-join query into separate, parallelized queries keyed by filterMode, avoiding cross-join/cartesian blowups when segment relations contain multiple rows.

Changes:

  • Split getFlagsFromContext() into two parallel queries (INCLUDE_ALL and EXCLUDE_ALL) and removed inclusion-joins for INCLUDE_ALL flags.
  • Introduced small query-builder helper functions to share base conditions/joins across both queries.
  • Added unit tests to validate query structure, join behavior, and result merging/error behavior.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
packages/backend/src/api/repositories/FeatureFlagRepository.ts Refactors getFlagsFromContext() into two parallel queries and conditionally applies joins to reduce cartesian explosion risk.
packages/backend/test/unit/repositories/FeatureFlagRepository.test.ts Adds unit coverage for the new query-splitting behavior and join expectations.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +183 to +185
beforeEach(() => {
mock.getMany.mockResolvedValue([]);
});
@danoswaltCL danoswaltCL requested a review from bcb37 June 24, 2026 21:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants