Repository navigation
InfluxDB3Operator: add deferrable variant #67107
Description
Description
The InfluxDB3Operator added in #58929 currently executes queries synchronously, which means each task holds an Airflow worker slot for the entire duration of the query. For long-running analytics or aggregation queries over InfluxDB 3 clusters, this prevents the worker from picking up other tasks while the query runs on the database.
This issue proposes adding a deferrable: bool = False parameter (and a separate trigger class) to InfluxDB3Operator, following the pattern already established in:
SnowflakeSqlApiOperator(deferrable variant withSnowflakeSqlApiTrigger)BigQueryInsertJobOperator(deferrable mode withBigQueryInsertJobTrigger)RedshiftDataOperator(deferrable withRedshiftDataTrigger)
Proposed API
from airflow.providers.influxdb.operators.influxdb3 import InfluxDB3Operator
InfluxDB3Operator(
task_id="aggregate_metrics",
sql="SELECT ... FROM measurement WHERE ...",
influxdb3_conn_id="influxdb3_default",
deferrable=True,
poll_interval=30,
)When deferrable=True, execute() should:
- Submit the query to InfluxDB 3 using
InfluxDBClient3.query_async(), the asyncio coroutine exposed byinfluxdb3-python. (query_asyncwas introduced ininfluxdb3-python0.12.0; the influxdb provider currently declaresinfluxdb3-python>=0.7.0, so the deferrable implementation will need to bump the lower bound to>=0.12.0.) For very large result sets, the synchronousquery(mode="reader")Apache Arrow Flight stream is also available if a streaming result interface is preferred. - Call
self.defer(trigger=InfluxDB3QueryTrigger(...), method_name="execute_complete"). - The trigger polls the query state on the InfluxDB cluster at
poll_intervaland yields aTriggerEventwhen the query finishes or fails. execute_complete()retrieves the result and pushes it to XCom in the same shape as the sync path.
Acceptance criteria
- New
deferrable: boolparameter onInfluxDB3Operator(defaultFalsefor backward compatibility). - New
InfluxDB3QueryTrigger(or similar) implementing the async polling loop usinginfluxdb3-python's async client. - Unit tests covering both
deferrable=Trueanddeferrable=Falsecode paths. - Integration test exercising the trigger end-to-end against a local InfluxDB 3 instance (or mocked equivalent if a real one is impractical in CI).
- Provider documentation updated with a
deferrable=Trueexample.
Scope and tradeoffs
InfluxDBClient3.query_async()is aloop.run_in_executor(None, ...)wrapper around the blocking Apache Arrow Flight calls (seeinfluxdb3-python/influxdb_client_3/query/query_api.py). The interface is a proper coroutine and is suitable for use in a Trigger. Concurrency in the Triggerer is bounded by the executor's thread pool rather than by native async IO. Native async over Arrow Flight is a future improvement on the InfluxData client side, not a blocker for this issue. The provider's currentinfluxdb3-python>=0.7.0lower bound will need to be bumped to>=0.12.0, the release that introducedquery_async.- The deferrable variant frees a worker slot while the query runs, but the result still flows back through the operator and into XCom. This is most useful for long-running queries with small-to-moderate result sets (aggregations, freshness probes, dashboard queries). For very large extracts, the existing
InfluxDB3Hook+ Python task pattern remains the right answer, and this issue does not aim to replace it.
Use case/motivation
Analytics queries on InfluxDB Cloud Dedicated or InfluxDB 3 Enterprise routinely take minutes for windowed aggregations across high-cardinality measurements. In a constrained worker pool, holding a slot per long-running query limits the parallelism the rest of the DAG fleet can achieve. A deferrable variant releases the worker slot back to the pool the moment the query is submitted to InfluxDB. The Triggerer then polls the query state and resumes the task when the result is ready.
This matches established Airflow patterns and unblocks teams that want to standardise on the new InfluxDB3Operator without losing worker-slot efficiency.
Related issues
- Original InfluxDB 3 support: Add support for influx3 in influxdb provider #58929
- Snowflake deferrable reference:
airflow/providers/snowflake/operators/snowflake.py,airflow/providers/snowflake/triggers/snowflake_trigger.py - BigQuery deferrable reference:
airflow/providers/google/cloud/operators/bigquery.py,airflow/providers/google/cloud/triggers/bigquery.py
Are you willing to submit a PR?
- Yes I am willing to submit a PR!
Code of Conduct
- I agree to follow this project's Code of Conduct
Activity
arpitrathore commentedon May 21, 2026
I'd like to take this. Plan: add a
deferrableparameter onInfluxDB3Operatorand a newInfluxDB3QueryTrigger, modelled on the BigQuery and Snowflake deferrable patterns referenced above. Implementation will useInfluxDBClient3.query_async()(introduced ininfluxdb3-python0.12.0), which will also require bumping the provider's lower bound from>=0.7.0to>=0.12.0.Follow-up to my earlier PR #58929. Companion proposal to #67109.
Happy to start once the issue is triaged. If a maintainer can take a quick look and assign it to me, I'll begin the PR.
eladkal commentedon Aug 21, 2026
Hey, we try to avoid assigning individuals as we found many times assigned people are not always delivering and with issue assigned there is less likelihood someone else will work on the issue (see policy)
If you have a fix/feature implementation just raise PR directly. It is much easier to discuss over an actual code proposal.
codemouli commentedon Aug 21, 2026
Hi, I am new to this and I would like to take this
subhramit commentedon Aug 22, 2026
Hey, since the project's policies state (and as also mentioned above) the convention to not expect assignment and directly work on issues, I had already started working on this over the last few days and will be filing a PR soon (expectedly today).
Just so that your effort isn't duplicated, would you mind picking up something else or perhaps helping in review of this?
codemouli commentedon Aug 22, 2026
Sure No problem.
subhramit commentedon Aug 22, 2026
Filed #71976.
Did not follow the exact API shape proposed here (the
poll_intervaldoesn't apply, since InfluxDB 3's async query has no pollable job state to check). Have added more details in the PR description.cc @arpitrathore / @eladkal