ApplicationIntegrationToolset silently builds no tools when a Connectors schema operation fails, and waits forever on one that never finishes
Los mantenedores suelen responder en 5 días
@sanketpatil06 ya está trabajando en esto.
Desde el 18/9/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
🔴 Required Information
Describe the Bug:
ConnectionsClient._poll_operation() (used by ApplicationIntegrationToolset for connection entities and actions) has two problems:
- A failed operation is treated as success. A finished Connectors long-running operation carries either
responseorerror(google.longrunning.Operation). The loop only checksdone, and the callers then readresponse.jsonSchema/response.operations, falling back to{}/[]. So when the lookup fails, for example because of a mistyped entity or action name or a missing permission on the connection, the toolset builds without error and with no tools for that entity. With explicit operations it builds tools against an empty schema, and a failed action produces a tool with an empty display name. Nothing tells the developer why the agent can't reach the connector. - The wait is unbounded.
while not operation_done:has no deadline, so an operation that never finishes blocks toolset construction, and therefore agent startup, forever. bf4143ac bounded each HTTP call in this client for exactly this reason ("an unavailable endpoint could block agent execution indefinitely"), but the polling loop around those calls is still open-ended.
It also sleeps one extra second after the operation is already done, which slows every entity and action lookup.
Steps to Reproduce:
pip install google-adk(reproduced onmain@ f33d4923 / 2.9.0).- Run the script below. It builds a real
ApplicationIntegrationToolsetfor a connection whosegetEntityTypeoperation finishes witherror(entityAcountdoes not exist). HTTP is stubbed, so no GCP project is needed.
Expected Behavior:
Toolset construction fails with the operation's error message, and a stuck operation fails after a bounded wait.
Observed Behavior:
toolset built; tools: []
elapsed: 1.0s
Environment Details:
- ADK Library Version (pip show google-adk): 2.9.0 (
main@ f33d4923) - Desktop OS: Windows 11
- Python Version (python -V): 3.12.10
Model Information:
- Are you using LiteLLM: No
- Which model is being used: N/A (toolset construction, no model call)
🟡 Optional Information
Minimal Reproduction Code:
import asyncio
from unittest import mock
from google.adk.tools.application_integration_tool import ApplicationIntegrationToolset
from google.adk.tools.application_integration_tool.clients.connections_client import ConnectionsClient
FAILED_OP = {
"name": "operations/op-1",
"done": True,
"error": {"code": 5, "message": "Entity type 'Acount' not found."},
}
def fake_get(url, headers=None, timeout=None):
resp = mock.MagicMock(status_code=200)
if url.endswith("?view=BASIC"):
resp.json.return_value = {"name": "projects/p/locations/us-central1/connections/sfdc",
"serviceDirectory": "sd", "host": ""}
elif "getEntityType" in url:
resp.json.return_value = {"name": "operations/op-1"}
else:
resp.json.return_value = FAILED_OP
return resp
mod = "google.adk.tools.application_integration_tool.clients.connections_client"
with mock.patch(f"{mod}._mtls_utils.get_api_endpoint", return_value="connectors.googleapis.com"), \
mock.patch.object(ConnectionsClient, "_get_access_token", return_value="token"), \
mock.patch(f"{mod}.requests.get", side_effect=fake_get):
toolset = ApplicationIntegrationToolset(
project="p", location="us-central1", connection="sfdc",
entity_operations={"Acount": []}, # typo for "Account"
)
print("toolset built; tools:", [t.name for t in asyncio.run(toolset.get_tools())])
Suggested fix: in _poll_operation, raise ValueError with the operation's error message when a finished operation carries error. That's the error type the callers already document. Stop polling after a deadline with TimeoutError, and don't sleep once done is set. I have a PR ready with tests.
How often has this issue occurred?:
- Always (100%): any failed entity or action schema lookup.
- Lenguaje dominante
- Python
- Estrellas
- 21.6k
- Forks
- 4k
- Merge medio
- 12 h 6 min
- PR fusionados (30 d)
- 4
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de google/adk-python
-
[A2A] RemoteA2aAgent(use_legacy=False): extension header written to state['http_kwargs'], ignored by a2a-sdk 1.x transportsPosiblemente ocupada @surajksharma07 la tomó hace 3 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
google/adk-python#7334 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 5 días
-
GoogleOidcVerifier treats string "false" as a verified email claimPosiblemente ocupada @surajksharma07 la tomó hace 4 días. Abiertocore
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
google/adk-python#7289 · 5 comentarios · 1 asignado ·
Los mantenedores suelen responder en 5 días
-
RestApiTool raises uncaught KeyError when a required path param is omittedPosiblemente ocupada @llalitkumarrr la tomó hace 4 días. Abiertorequest clarification tools
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
google/adk-python#7282 · 5 comentarios · 1 asignado ·
Los mantenedores suelen responder en 5 días
-
CredentialsManager should also extract scopes when populating auth schemesPosiblemente ocupada @sanketpatil06 la tomó hace 7 días. Abiertocore needs review
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
google/adk-python#7266 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 5 días
-
OAuth2 Discovery method fails because FastMCP with GoogleProvider (OAuth) returns issuerUrl with trailing slashPosiblemente ocupada @sanketpatil06 la tomó hace 7 días. Abiertomcp
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
google/adk-python#7265 · 4 comentarios · 1 asignado ·
Los mantenedores suelen responder en 5 días
Todos los issues de google/adk-python
Issues similares
-
adr
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
kristofdegrave/homeassistant-smart-charging#1607 ·
Los mantenedores suelen responder en 1 día
-
namespace operations
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
EclipseFdn/open-vsx.org#13665 ·
Los mantenedores suelen responder en 1 día
-
doc good first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
collective/icalendar#1865 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
canonical/opentelemetry-collector-operator#409 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
mozilla/addons-release-tests#1243 ·
Los mantenedores suelen responder en 1 día