googleapis / googleapis/google-cloud-python

`transfer_manager`: `upload_many` and `upload_many_from_filenames` can hang indefinitely even with deadline

Abierto
#17,959 0 comentarios 0 reacciones 1 asignado Reclamado por @rajeevpodar Ver en GitHub
api: storage priority: p2 type: bug
Lenguaje dominante
Python
Estrellas
5.4k
Forks
1.8k
Merge medio
3 d 4 h
PR fusionados (30 d)
122

Descripción

### Determine this is the right repository

- [x] I determined this is the correct repository in which to report this bug.

### Summary of the issue

**Context**
The docs for `transfer_manager.upload_many` and `transfer_manager.upload_many_from_filenames` say a deadline argument can be passed, which is supposed to kill the workers and raise a TimeoutError, but this doesn't seem to happen. Instead, we're seeing that it can actually hang indefinitely.

**Expected Behavior:**
A timeout error is raised after the deadline has passed.

**Actual Behavior:**
The method hangs indefinitely.

### API client name and version

google-cloud-storage v3.13.0

### Reproduction steps: code

This repro uses a patch to simulate a stuck upload. In reality, we see stuck uploads on the GCP server-side, but it's non-deterministic.

```python
import io, time
from unittest.mock import patch
from google.cloud.storage import Blob, transfer_manager

with patch.object(Blob, "_prep_and_do_upload", side_effect=lambda *a, **k: time.sleep(10)): # Simulate a stuck upload
start = time.monotonic()
transfer_manager.upload_many(
[(io.BytesIO(), Blob("x", bucket=None))],
worker_type=transfer_manager.THREAD,
deadline=.1,
)
print(f"Upload succeded in {time.monotonic() - start:.3f}s. A TimeoutError was expected.")
```

### Reproduction steps: actual results

```
❯ uv run repro.py
Upload succeded in 10.001s. A TimeoutError was expected.
```

### OS & version + platform

Ubuntu 26.04 LTS

### Python environment

Python 3.14.4

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.