golang 扳手测试库在一段时间后崩溃

问题描述

Spanner GO 库可能在此查询后几分钟后崩溃(尽管之前已成功) 版本 cloud.google.com/go/spanner v1.11.0

2021/02/01 00:45:32.564971 spannertest.inmem: Querying: SELECT * FROM tenant_config WHERE commit_time > "2021-02-01T00:44:32Z"

崩溃信息

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x30 pc=0xae3bcb]

goroutine 214 [running]:
cloud.google.com/go/spanner/spannertest.(*server).Executesql(0xc00009b4a0,0xf74c00,0xc0001e8270,0xc0003e8c60,0xc00009b4a0,0xc0008a4ba0)
        /Users/mpathak/Development/gopkgs/pkg/mod/cloud.google.com/go/spanner@v1.11.0/spannertest/inmem.go:491 +0x3b
google.golang.org/genproto/googleapis/spanner/v1._Spanner_Executesql_Handler(0xd0f8a0,0xc00088b020,0x0,0xc0004f4060,0x14)
        /Users/mpathak/Development/gopkgs/pkg/mod/google.golang.org/genproto@v0.0.0-20201019141844-1ed22bb0c154/googleapis/spanner/v1/spanner.pb.go:3581 +0x217
google.golang.org/grpc.(*Server).processUnaryRPC(0xc0003a1500,0xf7e800,0xc00018a900,0xc00089a000,0xc0001ac2a0,0x152c7d8,0x0)
        /Users/mpathak/Development/gopkgs/pkg/mod/google.golang.org/grpc@v1.32.0/server.go:1194 +0x50a
google.golang.org/grpc.(*Server).handleStream(0xc0003a1500,0x0)
        /Users/mpathak/Development/gopkgs/pkg/mod/google.golang.org/grpc@v1.32.0/server.go:1517 +0xcfd
google.golang.org/grpc.(*Server).serveStreams.func1.2(0xc000606140,0xc0003a1500,0xc00089a000)
        /Users/mpathak/Development/gopkgs/pkg/mod/google.golang.org/grpc@v1.32.0/server.go:859 +0xa1
created by google.golang.org/grpc.(*Server).serveStreams.func1
        /Users/mpathak/Development/gopkgs/pkg/mod/google.golang.org/grpc@v1.32.0/server.go:857 +0x204

解决方法

这似乎是由 spannertest 的 ExecuteSql 方法实现中的错误引起的。 Spanner 客户端的会话池将每 50 分钟执行一次 ping 语句,以使后端的会话保持活动状态。这些 SELECT 1 语句在没有事务的情况下执行,这意味着后端应默认为一次性只读事务。 spannertest 的 inmem 服务器假定客户端总是指定一个 TransactionSelectorhttps://github.com/googleapis/google-cloud-go/blob/c7ecf0f3f454606b124e52d20af2545b2c68646f/spanner/spannertest/inmem.go#L491

我在此处为它打开了一个问题:https://github.com/googleapis/google-cloud-go/issues/3639