google-cloud-spanner - golang spanner 测试库在一段时间后崩溃
问题描述
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, 0xc0001e8270, 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, 0xc00009b4a0, 0xf74c00, 0xc0001e8270, 0xc00088b020, 0x0, 0xf74c00, 0xc0001e8270, 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, 0x0, 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, 0xf7e800, 0xc00018a900, 0xc00089a000, 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, 0xf7e800, 0xc00018a900, 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
解决方案
这似乎是由ExecuteSql
spannertest 的方法实现中的错误引起的。Spanner 客户端的会话池将ping
每 50 分钟执行一次语句,以使后端的会话保持活动状态。这些SELECT 1
语句在没有事务的情况下执行,这意味着后端应默认为一次性只读事务。spannertest 的 inmem 服务器假定客户端将始终指定一个TransactionSelector
:https ://github.com/googleapis/google-cloud-go/blob/c7ecf0f3f454606b124e52d20af2545b2c68646f/spanner/spannertest/inmem.go#L491
我在这里打开了一个问题:https ://github.com/googleapis/google-cloud-go/issues/3639
推荐阅读
- javafx - 我该怎么做才能删除此对话框角上的白色标记?
- selenium - 如何在 Selenium 黄瓜框架中通过测试用例的范围报告中添加屏幕截图
- maven - Maven surefire 插件在 java 11 上使 jvm 崩溃(通过直接写入分叉 JVM 1 中的本机流来损坏 STDOUT)
- eclipse - 分析在 Eclipse CDT 版本中不起作用:Linux 上的 2019-03 (4.11.0)
- ruby-on-rails - 如何将 Rails DateTime 分辨率限制为微秒?
- ssas - 选择连续两年时的比较
- javascript - 如何刷新反应渲染
- spring - Spring WebFlux - bodyType=org.springframework.web.multipart.MultipartFile 不支持内容类型“application/xml”
- angular - 当点击页面导航到另一个页面时,如何实现离子芯片可点击?
- sql - 将 postgres sql 查询转换为 oracle