тайм-аут при загрузке JSON с использованием хранилища Firebase blob.upload_from_string (...) - PullRequest
1 голос
/ 03 августа 2020

Все работает без сбоев в течение нескольких месяцев, но недавно я начал получать ошибку тайм-аута при попытке загрузить файл JSON в хранилище Firebase, как показано ниже:

from firebase_admin import storage

bucket = storage.bucket()
blob = bucket.blob('feed_items.json')
...
blob.upload_from_string(json_string, content_type = 'application/json')

Это трассировка стека :

blob.upload_from_string(json_string, content_type = 'application/json')
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/google/cloud/storage/blob.py", line 2107, in upload_from_string
    timeout=timeout,
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/google/cloud/storage/blob.py", line 1925, in upload_from_file
    _raise_from_invalid_response(exc)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/google/cloud/storage/blob.py", line 3262, in _raise_from_invalid_response
    raise exceptions.from_http_status(response.status_code, message, response=response)
google.api_core.exceptions.BadRequest: 400 POST https://storage.googleapis.com/upload/storage/v1/b/my_app.appspot.com/o?uploadType=multipart: ('Request failed with status code', 400, 'Expected one of', <HTTPStatus.OK: 200>)

Размер файла JSON составляет ~ 400 КБ. Заранее спасибо.

1 Ответ

1 голос
/ 15 августа 2020

Я наконец связался со службой технической поддержки Google Cloud, и они заметили, что такое поведение может быть вызвано тем, что объект blob стал недействительным или истекло время ожидания. Они предложили использовать метод blob.reload(), как показано ниже. blob.reload() получает ссылку solid на объект blob в хранилище, и это, кажется, исправляет каждое изменение состояния, вызванное другими методами.

from firebase_admin import storage

bucket = storage.bucket()
blob = bucket.blob('feed_items.json')
...
blob.reload()
blob.upload_from_string(json_string, content_type = 'application/json')
...