Google Spanner Emulator - 任何查询的 HTTP 500 错误

问题描述

我昨天安装了一个扳手模拟器,它成功地将我的查询结果返回给我,例如 gcloud spanner databases list --instance=test-instance

但是自从我重新启动了我的机器后,当我尝试执行数据库列表或任何其他与此相关的查询时,我看到了这个特定的错误。它在每种情况下都返回以下错误-

gcloud spanner databases list --instance=test-instance
ERROR: (gcloud.spanner.databases.list) HttpError accessing <http://localhost:9020/v1/projects/test-project/instances/test-instance/databases?alt=json&pageSize=100>: response: <{'date': 'Fri,05 Feb 2021 09:18:12 GMT',u'status': 500,'content-length': '44','content-type': 'application/json'}>,content <{"error": "Failed to marshal error message"}>
This may be due to network connectivity issues. Please check your network settings,and the status of the service you are trying to reach.

谁能告诉我这可能是什么原因?

注意 - 我尝试使用 CLI 和 Docker 启动模拟器,但都没有奏效。我从这两种方法中得到以下输出,这让我相信模拟器已正确启动。

gcloud beta emulators spanner start
Executing: docker run -p 127.0.0.1:9010:9010 -p 127.0.0.1:9020:9020 gcr.io/cloud-spanner-emulator/emulator:1.1.1
[cloud-spanner-emulator] 2021/02/05 09:10:41 gateway.go:140: Cloud Spanner emulator running.
[cloud-spanner-emulator] 2021/02/05 09:10:41 gateway.go:141: REST server listening at 0.0.0.0:9020
[cloud-spanner-emulator] 2021/02/05 09:10:41 gateway.go:142: gRPC server listening at 0.0.0.0:9010

更新


根据下面@Hoilong 的回答。重新创建扳手实例工作正常。以下是运行以重新创建实例的命令 -

gcloud spanner instances delete <name_of_instance>

然后

gcloud spanner instances create <name_of_instance> --config=emulator-config --description="Test Instance" --nodes=1

注意 -

  1. - 将其替换为您为现有实例提供的实例名称
  2. 在运行这些命令之前必须运行模拟器。您可以参考此文档以找到启动模拟器的不同方式 - https://cloud.google.com/spanner/docs/emulator

解决方法

模拟器不像本地实例。根据公开文件:

由于模拟器仅将数据存储在内存中,因此不会跨运行保存数据。

这里发生的事情是,重启后,所有的数据(不仅仅是存储在数据库中的数据,还有实例/数据库)都没有了。您只需要重新创建实例/数据库。