Golang Утечка памяти клиента хранилища GCP - PullRequest
0 голосов
/ 01 апреля 2020

Я прочитал следующую проблему на github https://github.com/googleapis/google-cloud-go/issues/1025 и обнаружил утечку памяти из-за созданных незанятых соединений, поэтому добавление http-клиента в ClientOption помогает. Тем не менее, я хотел бы реализовать это с использованием опции «WithCredentialsFile», но оказалось, что на основе документации «WithHTTPClient» не совместим.

Ниже мой подход:

    client, err := storage.NewClient(ctx, option.WithCredentialsFile(cred), option.WithHTTPClient(httpClient))
    if err != nil {
        return err
    }
    defer client.Close()

И я всегда получаю следующую ошибку:

"googleapi: Error 401: Anonymous caller does not have storage.objects.create access to <filepath>, required"

Есть ли какое-нибудь решение этой проблемы?

обновление: я пытался избавиться от withCred при вызове newClient

    os.Setenv("GOOGLE_APPLICATION_CREDENTIALS", cre)

    client, err := storage.NewClient(ctx, option.WithHTTPClient(httpClient))
    if err != nil {
        return err
    }
    defer client.Close()

Но это все равно привело к вышеуказанной ошибке. Хотя, если я попытаюсь удалить с помощью http, это приведет к утечке памяти (по крайней мере, загрузка работает)

1 Ответ

1 голос
/ 02 апреля 2020

Я не знаю, как вы создаете свой HttpClient. В любом случае, если вы указываете свой HTTPClient, он используется, и этот по умолчанию не

Однако используемый транспортный уровень - это один из ваших HTTPClient. По умолчанию он не внедряет уровень безопасности, который библиотека создает по умолчанию (и который использует ваши учетные данные). Вы должны воспроизвести эту логику c в своем HTTPClient.

Таким образом, когда вы вызываете свою конечную точку, вы вызываете ее без какого-либо заголовка безопасности, и, таким образом, ваша ошибка 401 является нормальной.

...