Skip to content

Upgrade to airflow 3.1.6 breaks PowerBIDatasetRefreshOperator #61081

@ryan-dyer-sp

Description

@ryan-dyer-sp

Apache Airflow Provider(s)

microsoft-azure

Versions of Apache Airflow Providers

12.10.1 of the microsoft-azure plugin.

Not sure if its the airflow upgrade or the provider which was also upgraded with airflow which triggers the problem.

Apache Airflow version

3.1.6

Operating System

Kubernetes - apache/airflow docker

Deployment

Official Apache Airflow Helm Chart

Deployment details

No response

What happened

Upgrade to 3.1.6 has broken the PowerBIDatasetRefreshOperator

We have the following in our dag which works with 3.1.5 of airflow.

        refresh_powerbi_c2 = PowerBIDatasetRefreshOperator(
            task_id="powerbi_c2_dataset_refresh",
            conn_id=PBI_CONN_ID,
            group_id=POWERBI_C2_GROUP_ID,
            dataset_id=POWERBI_C2_DATASET_ID,
            check_interval=30,   # poll every 30s
            timeout=60 * 15,     # 15 min max wait
        )

With 3.1.6 this is broken and we see the following errors in the logs

[2026-01-26 09:15:36] INFO - Filling up the DagBag from /tmp/airflow/dag_bundles/prod/versions/30260577a61601b9835950d8bbcc027167b2e88d/dags/data_pipeline/intra_day_incremental_refresh.py
[2026-01-26 09:15:37] ERROR - Trigger failed:
Traceback (most recent call last):

  File "/home/airflow/.local/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions
    yield

  File "/home/airflow/.local/lib/python3.12/site-packages/httpx/_transports/default.py", line 394, in handle_async_request
    resp = await self._pool.handle_async_request(req)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 207, in handle_async_request
    raise UnsupportedProtocol(

httpcore.UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol.


The above exception was the direct cause of the following exception:


Traceback (most recent call last):

  File "/home/airflow/.local/lib/python3.12/site-packages/airflow/jobs/triggerer_job_runner.py", line 1005, in cleanup_finished_triggers
    result = details["task"].result()
             ^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/greenback/_impl.py", line 119, in greenback_shim
    return await _greenback_shim(orig_coro, next_send)  # type: ignore
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/greenback/_impl.py", line 208, in _greenback_shim
    next_yield, resume_greenlet = resume_greenlet.switch(next_send)
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/greenback/_impl.py", line 84, in trampoline
    next_yield: Any = next_send.send(orig_coro)  # type: ignore
                      ^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/outcome/_impl.py", line 185, in send
    return gen.send(self.value)
           ^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/airflow/jobs/triggerer_job_runner.py", line 1119, in run_trigger
    async for event in trigger.run():

  File "/home/airflow/.local/lib/python3.12/site-packages/airflow/providers/microsoft/azure/triggers/powerbi.py", line 149, in run
    dataset_refresh_id = await self.hook.trigger_dataset_refresh(
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/airflow/providers/microsoft/azure/hooks/powerbi.py", line 205, in trigger_dataset_refresh
    response = await self.run(
               ^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/airflow/providers/microsoft/azure/hooks/msgraph.py", line 501, in run
    response = await self.send_request(
               ^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/airflow/providers/microsoft/azure/hooks/msgraph.py", line 581, in send_request
    return await conn.send_no_response_content_async(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/httpx_request_adapter.py", line 381, in send_no_response_content_async
    response = await self.get_http_response_message(request_info, parent_span)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/httpx_request_adapter.py", line 600, in get_http_response_message
    resp = await self._http_client.send(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/httpx/_client.py", line 1629, in send
    response = await self._send_handling_auth(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/httpx/_client.py", line 1657, in _send_handling_auth
    response = await self._send_handling_redirects(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/httpx/_client.py", line 1694, in _send_handling_redirects
    response = await self._send_single_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/httpx/_client.py", line 1730, in _send_single_request
    response = await transport.handle_async_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/msgraph_core/middleware/async_graph_transport.py", line 21, in handle_async_request
    response = await self.pipeline.send(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/middleware.py", line 37, in send
    return await self._first_middleware.send(request, self._transport)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/redirect_handler.py", line 78, in send
    response = await super().send(request, transport)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/middleware.py", line 64, in send
    return await self.next.send(request, transport)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/retry_handler.py", line 81, in send
    response = await super().send(request, transport)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/middleware.py", line 64, in send
    return await self.next.send(request, transport)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/parameters_name_decoding_handler.py", line 60, in send
    response = await super().send(request, transport)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/middleware.py", line 64, in send
    return await self.next.send(request, transport)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/url_replace_handler.py", line 45, in send
    response = await super().send(request, transport)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/middleware.py", line 64, in send
    return await self.next.send(request, transport)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/user_agent_handler.py", line 30, in send
    return await super().send(request, transport)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/middleware.py", line 64, in send
    return await self.next.send(request, transport)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/headers_inspection_handler.py", line 55, in send
    response = await super().send(request, transport)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/middleware.py", line 64, in send
    return await self.next.send(request, transport)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/msgraph_core/middleware/telemetry.py", line 48, in send
    response = await super().send(request, transport)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/kiota_http/middleware/middleware.py", line 61, in send
    response = await transport.handle_async_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/airflow/.local/lib/python3.12/site-packages/httpx/_transports/default.py", line 393, in handle_async_request
    with map_httpcore_exceptions():
         ^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/python/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)

  File "/home/airflow/.local/lib/python3.12/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions
    raise mapped_exc(message) from exc

httpx.UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol.
[2026-01-26 09:15:37] ERROR - Task failed with exception
TaskDeferralError: Trigger failure
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/sdk/execution_time/task_runner.py", line 1004 in run

File "/home/airflow/.local/lib/python3.12/site-packages/airflow/sdk/execution_time/task_runner.py", line 1405 in _execute_task

File "/home/airflow/.local/lib/python3.12/site-packages/airflow/sdk/bases/operator.py", line 1630 in resume_execution

What you think should happen instead

operator works as intended

How to reproduce

create a dag with operator as shown above.

Anything else

No response

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions