Skip to content

features: run single-shot multi-query sub-queries concurrently#558

Open
cportele wants to merge 1 commit into
multi-feature-query-scopesfrom
multi-feature-query-parallel-subqueries
Open

features: run single-shot multi-query sub-queries concurrently#558
cportele wants to merge 1 commit into
multi-feature-query-scopesfrom
multi-feature-query-parallel-subqueries

Conversation

@cportele

Copy link
Copy Markdown
Contributor

Depends on #555.
Depends on ldproxy/xtraplatform#428.

Single-shot multi-queries read every sub-query in one pass with no cross-sub-query dependency, so the sub-queries can now execute concurrently while their rows are still emitted in sub-query order:

  • the value phase uses an order-preserving concurrent flat-map over the sub-queries (Transformer.flatMapConcurrent);
  • each sub-query's value queries are subscribed on a worker thread (SqlQueryOptions.isParallel) so the blocking JDBC reads actually overlap instead of running on a single thread;
  • a shared connection-budget semaphore (sized to the pool) bounds the connections held by the in-flight sub-queries and acquires each sub-query's permits as a block, so concurrent requests cannot deadlock by each holding part of the pool.

Paged and single-feature reads keep the serial path. Requires the matching xtraplatform-core operators flatMapConcurrent and guarded.

Single-shot multi-queries read every sub-query in one pass with no
cross-sub-query dependency, so the sub-queries can now execute concurrently
while their rows are still emitted in sub-query order:

- the value phase uses an order-preserving concurrent flat-map over the
  sub-queries (Transformer.flatMapConcurrent);
- each sub-query's value queries are subscribed on a worker thread
  (SqlQueryOptions.isParallel) so the blocking JDBC reads actually overlap
  instead of running on a single thread;
- a shared connection-budget semaphore (sized to the pool) bounds the
  connections held by the in-flight sub-queries and acquires each sub-query's
  permits as a block, so concurrent requests cannot deadlock by each holding
  part of the pool.

Paged and single-feature reads keep the serial path. Requires the matching
xtraplatform-core operators flatMapConcurrent and guarded.
@cportele cportele requested a review from azahnen as a code owner June 29, 2026 11:14
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.

1 participant