googleapis / googleapis/google-cloud-python

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

Ouverte
#17,959 0 commentaires 0 réactions 1 personne assignée Réclamée par @rajeevpodar Voir sur GitHub
api: storage priority: p2 type: bug
Langage dominant
Python
Étoiles
5.4k
Forks
1.8k
Merge moyen
3 j 4 h
PR mergées (30 j)
122

Description

### 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

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.