Длительная 30+ с c задержка загрузки небольшого файла из облачного хранилища Google: тайм-аут IPv6? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть небольшой файл размером 11 МБ в корзине Google Cloud Storage. (Это хранилище проекта Firebase.) Я использовал пример python GCS для его загрузки. У меня есть учетные данные в env var GOOGLE_APPLICATION_CREDENTIALS.

Моя проблема в том, что для загрузки требуется более 30 сек c. После запуска он попадает в печать «Downloading blob» 2 se c, что замечательно, но затем зависает на 30 se c перед фактической загрузкой. Используя strace и procmon, кажется, что TCP тратит много времени на повторное подключение и отключение с lga25s62-in-x0a.1e100.net (Google) и lga34s30-in-x10.1e100.net через IPv6 и https. После нескольких раундов из них (предположительно, получая таймауты, я не вижу), начинается фактическая загрузка, которая занимает меньше пары секунд.

Один намек кажется парой из 20 с c время ожидания опроса на сокете AF_INET6; я могу получить GCS python API, чтобы не пытаться использовать IPv6?

Я использую Ubuntu 18.04 в WSL, python 3.7, последний Python google-cloud-storage python API 1.28.0 .

def download_blob(bucket_name, source_blob_name, destination_file_name):
    """Downloads a blob from the bucket."""
    # bucket_name = "your-bucket-name"
    # source_blob_name = "storage-object-name"
    # destination_file_name = "local/path/to/file"

    print('Starting client')
    storage_client = storage.Client()

    print('Getting bucket')
    bucket = storage_client.bucket(bucket_name)
    print(f'Getting blob from {bucket}')
    blob = bucket.blob(source_blob_name)
    print(f'Downloading blob {blob}')
    blob.download_to_filename(destination_file_name)

    print(
        "Blob {} downloaded to {}.".format(
            source_blob_name, destination_file_name
        )
    )

download_blob('my-bucket.appspot.com', 'tmp/test-scene.blend', '/tmp/test-scene.blend')
...