Will anyone help me debug "proto descriptor was previously loaded" from Google Ads API

Viewed 927

I'm getting this error when running this code:

$googleAdsClient->getGoogleAdsServiceClient()->search($customerId, $query, $page_size);

ERROR message: proto descriptor was previously loaded (included in multiple metadata bundles?): google/ads/googleads/v5/enums/policy_topic_evidence_destination_not_working_dns_error_type.proto

$googleAdsClient is an instance of \Google\Ads\GoogleAds\Lib\V5\GoogleAdsClient.

The getGoogleAdsServiceClient method comes from the ServiceClientFactoryTrait trait /Google/Ads/GoogleAds/Lib/V5/ServiceClientFactoryTrait.php

I'm running:

php 7.4.1
grpc module version => 1.34.0
protobuf version => 3.14.0

Additional libs installed via composer:

google/grpc-gcp                       0.1.5      gRPC GCP library for channel management
google/protobuf                       v3.13.0.1  proto library for PHP
googleads/google-ads-php              v5.0.0     Google Ads API client for PHP
grpc/grpc                             1.30.0     gRPC library for PHP

I don't know enough about descriptors or the protobuf library to understand this error. It just started happening a couple days ago and I don't think we made any changes that would effect this. Any help/guidance would be much appreciated.

EDIT: forgot to link to SDK https://github.com/googleads/google-ads-php

EDIT: updated the following libs:

google/apiclient                     v2.9.1     Client library for Google APIs
google/apiclient-services            v0.161.0   Client library for Google APIs
google/auth                          v1.15.0    Google Auth Library for PHP
google/common-protos                 1.3        Google API Common Protos for PHP
google/gax                           1.7.0      Google API Core for PHP
google/grpc-gcp                      0.1.5      gRPC GCP library for channel management
google/protobuf                      v3.15.3    proto library for PHP
googleads/google-ads-php             v7.0.0     Google Ads API client for PHP
grpc/grpc                            1.35.0     gRPC library for PHP
google/protobuf                      v3.15.3    proto library for PHP
4 Answers

I found the issue for me. I had the C implementation installed via pecl install protobuf. Sense I'm running my app in a docker container, every time I built a new image it would install the latest release of protobuf. Sense I started seeing this error around the 22nd of Feb I looked at the protobuf builds and I see a build on the 20th of Feb for version 3.15.0 which coincides with a new build I ran on the 22nd.

To fix this I downgraded to version 3.14.0 via the pecl install protobuf-3.14.0 command in my Dockerfile. This isn't a permanent fix as at some point I want to upgrade the package but I will have to wait for a version that deals with this issue.

The error is because two library is your project are providing the proto descriptor for same file policy_topic_evidence_destination_not_working_dns_error_type.proto.
Looks like this issue was fixed in version v6 for google ads library link

Just update the libarry to v6 and above (latest is v7) and it should fix the problem Latest Release

I have same error, I commented out the line

; extension=protobuf.so

in /etc/php/7.4/apache2/php.ini and in /etc/php/7.4/cli/php.ini and restart apache

sudo service apache2 restart

and error was gone, I hope this will be helpful for someone.

Related