GoogleCloudPlatform / GoogleCloudPlatform/php-docs-samples

bug: spanner emulator max call stack size exceeded

Offen
#2,152 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
samples
Vorherrschende Sprache
PHP
Sterne
1k
Forks
1k
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

I'm having trouble using Spanner Emulator with PHP so to investigate the problem I configured my Spanner Emulator instance so that it works when running queries from the command line. Then I cloned this repository, configured the code to run on my emulator instance, and run the `quickstart.php` file. It returned the following stack trace where on line 4 you can see the stack size problem:

```
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1756808553.589133 7237 call_credentials.c:168] GRPC_PHP: call credentials plugin function - begin
I0000 00:00:1756808553.589553 7237 call_credentials.c:171] GRPC_PHP: call credentials plugin function - end
PHP Fatal error: Uncaught Error: Maximum call stack size of 68719427584 bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? in /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/CredentialsWrapper.php:244
Stack trace:
#0 [internal function]: Google\ApiCore\CredentialsWrapper->Google\ApiCore\{closure}()
#1 /home/marcobuschini/src/php-docs-samples/spanner/vendor/grpc/grpc/src/lib/UnaryCall.php(45): Grpc\Call->startBatch()
#2 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/grpc-gcp/src/GCPUnaryCall.php(48): Grpc\UnaryCall->start()
#3 /home/marcobuschini/src/php-docs-samples/spanner/vendor/grpc/grpc/src/lib/BaseStub.php(295): Grpc\Gcp\GCPUnaryCall->start()
#4 /home/marcobuschini/src/php-docs-samples/spanner/vendor/grpc/grpc/src/lib/BaseStub.php(545): Grpc\BaseStub->Grpc\{closure}()
#5 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Transport/GrpcTransport.php(267): Grpc\BaseStub->_simpleRequest()
#6 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/GapicClientTrait.php(664): Google\ApiCore\Transport\GrpcTransport->startUnaryCall()
#7 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Middleware/CredentialsWrapperMiddleware.php(60): Google\Cloud\Spanner\V1\Gapic\SpannerGapicClient->Google\ApiCore\{closure}()
#8 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Middleware/FixedHeaderMiddleware.php(67): Google\ApiCore\Middleware\CredentialsWrapperMiddleware->__invoke()
#9 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Middleware/RetryMiddleware.php(94): Google\ApiCore\Middleware\FixedHeaderMiddleware->__invoke()
#10 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Middleware/RequestAutoPopulationMiddleware.php(73): Google\ApiCore\Middleware\RetryMiddleware->__invoke()
#11 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Middleware/OptionsFilterMiddleware.php(60): Google\ApiCore\Middleware\RequestAutoPopulationMiddleware->__invoke()
#12 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/GapicClientTrait.php(630): Google\ApiCore\Middleware\OptionsFilterMiddleware->__invoke()
#13 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-spanner/src/V1/Gapic/SpannerGapicClient.php(774): Google\Cloud\Spanner\V1\Gapic\SpannerGapicClient->startCall()
#14 [internal function]: Google\Cloud\Spanner\V1\Gapic\SpannerGapicClient->createSession()
#15 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-core/src/ExponentialBackoff.php(97): call_user_func_array()
#16 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-core/src/GrpcRequestWrapper.php(134): Google\Cloud\Core\ExponentialBackoff->execute()
#17 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-core/src/GrpcTrait.php(79): Google\Cloud\Core\GrpcRequestWrapper->send()
#18 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-spanner/src/Connection/Grpc.php(864): Google\Cloud\Spanner\Connection\Grpc->send()
#19 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-spanner/src/Operation.php(620): Google\Cloud\Spanner\Connection\Grpc->createSession()
#20 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-spanner/src/Database.php(2236): Google\Cloud\Spanner\Operation->createSession()
#21 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-spanner/src/Database.php(1678): Google\Cloud\Spanner\Database->selectSession()
#22 /home/marcobuschini/src/php-docs-samples/spanner/quickstart.php(46): Google\Cloud\Spanner\Database->execute()
#23 {main}
thrown in /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/CredentialsWrapper.php on line 244
```

Running on PHP version:
```
PHP 8.3.6 (cli) (built: Jul 14 2025 18:30:55) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
with Zend OPcache v8.3.6, Copyright (c), by Zend Technologies
with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans
```

Running on Linux (the same happens running on WSL):
```
Linux marcobuschini-VirtualBox 6.14.0-28-generic #28~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 25 10:47:01 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne damit, den Fehler mit dem Spanner Emulator unter Verwendung von quickstart.php zu reproduzieren, insbesondere den Aufruf in Zeile 46. Lies den Stacktrace über CredentialsWrapper.php:244 und die aufgeführten gRPC/GAX-Aufrufstellen hinweg, um festzustellen, wo die Rekursion beginnt. Als erledigt gilt die Aufgabe, wenn die Ursache identifiziert und ein Fix oder eine klare Kompatibilitätsempfehlung für dieses PHP- und Emulator-Setup bestätigt wurde.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
grpc, php
Bereich
databases
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
30/100

Neue Issues direkt in Ihr Postfach

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