Azure / Azure/azure-storage-python

Blob batch delete (container_client.delete_blobs) errors with: 'AttributeError: 'NoneType' object has no attribute 'on_request''

Offen
#650 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
343
Forks
243
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

### Which service(blob, file, queue) does this issue concern?
Blob

### Which version of the SDK was used? Please provide the output of `pip freeze`.
rio@rio-t460p:~$ pip3 freeze | grep az
azure-core==1.2.0
azure-identity==1.2.0
azure-storage-blob==12.1.0

### What problem was encountered?
```
def run_delete_blobs():
blob_service_client = BlobServiceClient(account_url=STORAGE_URL, credential=STORAGE_SAS)
container_client = blob_service_client.get_container_client(STORAGE_CONTAINER)
blob_list = [blob.name for blob in list(container_client.list_blobs())]
container_client.delete_blobs(*blob_list)

run_delete_blobs()
```
Results in error
```
Traceback (most recent call last):
File "blob_cleanup.py", line 108, in
run_delete_blobs()
File "blob_cleanup.py", line 106, in run_delete_blobs
container_client.delete_blobs(*blob_list)
File "/home/rio/.local/lib/python3.7/site-packages/azure/core/tracing/decorator.py", line 71, in wrapper_use_tracer
return func(*args, **kwargs)
File "/home/rio/.local/lib/python3.7/site-packages/azure/storage/blob/_container_client.py", line 1094, in delete_blobs
return self._batch_send(*reqs, **options)
File "/home/rio/.local/lib/python3.7/site-packages/azure/storage/blob/_shared/base_client.py", line 265, in _batch_send
request, **kwargs
File "/home/rio/.local/lib/python3.7/site-packages/azure/core/pipeline/_base.py", line 197, in run
self._prepare_multipart_mixed_request(request)
File "/home/rio/.local/lib/python3.7/site-packages/azure/core/pipeline/_base.py", line 185, in _prepare_multipart_mixed_request
_ for _ in executor.map(prepare_requests, requests)
File "/home/rio/.local/lib/python3.7/site-packages/azure/core/pipeline/_base.py", line 185, in
_ for _ in executor.map(prepare_requests, requests)
File "/usr/lib/python3.7/concurrent/futures/_base.py", line 598, in result_iterator
yield fs.pop().result()
File "/usr/lib/python3.7/concurrent/futures/_base.py", line 428, in result
return self.__get_result()
File "/usr/lib/python3.7/concurrent/futures/_base.py", line 384, in __get_result
raise self._exception
File "/usr/lib/python3.7/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/home/rio/.local/lib/python3.7/site-packages/azure/core/pipeline/_base.py", line 180, in prepare_requests
_await_result(policy.on_request, pipeline_request)
AttributeError: 'NoneType' object has no attribute 'on_request'
```

### Have you found a mitigation/solution?
Work around is to just use the single file container_client.delete_blob within a for loop but it's fairly slow so not ideal on large containers.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne bei delete_blobs in azure/storage/blob/_container_client.py und folge _batch_send in azure/storage/blob/_shared/base_client.py bis zu azure/core/pipeline/_base.py, wo der Traceback _prepare_multipart_mixed_request erreicht. Reproduziere die gemeldete Batch-Löschung mit azure-storage-blob 12.1.0 und verifiziere, dass das Löschen mehrerer Blobs keinen NoneType on_request-Fehler mehr auslöst.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
azure, python
Bereich
backend, cloud
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.