Stream grid task-instance summaries as NDJSON to eliminate N+1 requests#62369
Stream grid task-instance summaries as NDJSON to eliminate N+1 requests#62369pierrejeambrun merged 8 commits intoapache:mainfrom
Conversation
|
Congratulations on your first Pull Request and welcome to the Apache Airflow community! If you have any issues or are unsure about any anything please check our Contributors' Guide (https://github.com/apache/airflow/blob/main/contributing-docs/README.rst)
|
696c19e to
84d786b
Compare
5ebf3b3 to
b8d6df7
Compare
|
Please make sure to test with many very large dag runs - we intentionally moved from a single call to 1 per in #51805. There is a dag in there you can use. |
fd62a40 to
7f65f2f
Compare
|
@pierrejeambrun comments addressed |
|
Looks like we need to rerun our type generation and formatting. And then double check our e2e tests |
17f6302 to
900882d
Compare
Fixed the above-mentioned issues 8e2c186 |
3087603 to
a615be4
Compare
|
@bbovenzi >Looks like we need to rerun our type generation and formatting. And then double check our e2e tests I noticed the tests weren’t passing, but they didn’t seem to be related to the changes I made. |
…JSON connection to eliminate N+1 requests
…JSON connection, replacing individual requests to improve performance and eliminate N+1 query issues.
…ove clarity and performance
2ab365a to
40432e1
Compare
|
Awesome work, congrats on your first merged pull request! You are invited to check our Issue Tracker for additional contributions. |
…ts (apache#62369) * Stream task instance summaries for multiple DAG runs over a single NDJSON connection to eliminate N+1 requests * Stream task instance summaries for multiple DAG runs over a single NDJSON connection, replacing individual requests to improve performance and eliminate N+1 query issues. * Fix capitalization of "Dag" in documentation and code comments for consistency * Refactor GridTISummaries schema and update streaming endpoint to improve clarity and performance * Fix formatting and linter issues * Fix static check * Fix static check * Fix static check
…ts (apache#62369) * Stream task instance summaries for multiple DAG runs over a single NDJSON connection to eliminate N+1 requests * Stream task instance summaries for multiple DAG runs over a single NDJSON connection, replacing individual requests to improve performance and eliminate N+1 query issues. * Fix capitalization of "Dag" in documentation and code comments for consistency * Refactor GridTISummaries schema and update streaming endpoint to improve clarity and performance * Fix formatting and linter issues * Fix static check * Fix static check * Fix static check
…ts (apache#62369) * Stream task instance summaries for multiple DAG runs over a single NDJSON connection to eliminate N+1 requests * Stream task instance summaries for multiple DAG runs over a single NDJSON connection, replacing individual requests to improve performance and eliminate N+1 query issues. * Fix capitalization of "Dag" in documentation and code comments for consistency * Refactor GridTISummaries schema and update streaming endpoint to improve clarity and performance * Fix formatting and linter issues * Fix static check * Fix static check * Fix static check
…ts (apache#62369) * Stream task instance summaries for multiple DAG runs over a single NDJSON connection to eliminate N+1 requests * Stream task instance summaries for multiple DAG runs over a single NDJSON connection, replacing individual requests to improve performance and eliminate N+1 query issues. * Fix capitalization of "Dag" in documentation and code comments for consistency * Refactor GridTISummaries schema and update streaming endpoint to improve clarity and performance * Fix formatting and linter issues * Fix static check * Fix static check * Fix static check
This pull request introduces a significant improvement to the Airflow Grid view by adding a new streaming API endpoint for fetching task-instance summaries for multiple DAG runs in a single request. This change reduces the number of HTTP requests from one-per-run to a single NDJSON (newline-delimited JSON) stream, allowing the frontend to progressively render grid columns as data arrives, improving both performance and user experience. The implementation includes both backend (Python/FastAPI) and frontend (TypeScript/React) changes to support the new streaming behavior, as well as updates to API documentation and client code generation.
Backend API and Streaming Implementation:
Added a new endpoint
GET /ui/grid/ti_summaries/{dag_id}that streams task-instance summaries for multiple DAG runs as NDJSON, emitting one JSON object per run, and reuses the serialized DAG structure for runs with the same version to avoid redundant deserialization. (airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid.py,airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml) [1] [2]Refactored backend logic to build and yield summaries efficiently, using a generator and caching the serialized DAG model per version. (
airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid.py)Frontend and Client Code Generation:
useGridServiceGetGridTiSummariesStream, and updated related query, prefetch, and suspense hooks. (airflow-core/src/airflow/ui/openapi-gen/queries/common.ts,airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts,airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts,airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts,airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts) [1] [2] [3] [4] [5]Documentation and Release Notes:
airflow-core/newsfragments/62369.significant.rst)Overall, this change streamlines the Grid view's data fetching, reduces server and network load, and enables a smoother, more responsive UI for users monitoring multiple DAG runs.
Fixes #63720