GoogleCloudPlatform / GoogleCloudPlatform/php-docs-samples

bug: spanner emulator max call stack size exceeded

Open
#2,152 0 comments 0 reactions 0 assignees View on GitHub
samples
Dominant language
PHP
Stars
1k
Forks
1k
PR merge metrics
No merged PRs in 30d

Description

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
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.