【问题标题】:GAE NDB restore fails with "Unexpected error contacting datastore"GAE NDB 还原失败,出现“联系数据存储时出现意外错误”
【发布时间】:2016-11-19 18:25:53
【问题描述】:

我习惯于定期备份和恢复我的 NDB 数据存储,经常恢复到不同的“项目”,在那里我将测试应用程序的新版本。到目前为止,它运行良好。

现在,Ndb 恢复操作以系统方式失败,日志中有跟踪:

Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/_internal/mapreduce/handlers.py", line 526, in handle
    ctx.flush()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/_internal/mapreduce/context.py", line 455, in flush
    pool.flush()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/datastore_admin/utils.py", line 695, in flush
    datastore._GetConnection()._reserve_keys(self.keys)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 2170, in _reserve_keys
    self._async_reserve_keys(None, keys).get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 921, in get_result
    results = self.__rpcs[0].get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result
    return self.__get_result_hook(self)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 2211, in __reserve_keys_hook
    self.check_rpc_success(rpc)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 1371, in check_rpc_success
    raise _ToDatastoreError(err)
InternalError: Unexpected error contacting datastore (2016-11-19T18:01:37+00:00).

有什么线索吗?我可能遗漏了一些东西,但我发誓与上周恢复正常的情况相比没有任何改变。

以防万一我的最新备份出现问题,我尝试恢复旧备份,该备份已成功恢复了几次。恢复时相同的 InternalError。包括在一个全新的 GAE 项目中。

现在已经尝试了很多(很多)次,我发现“意外错误”总是发生在相同的实体上。整个备份/恢复涉及大约 30 种不同的类型,其中 5 种因上述错误而失败。其中,在某些情况下有实体被恢复,但不是全部,在其他情况下没有实体被恢复。就像某些特定实体可能对异常负责。但是,再一次,这也发生在过去有效的旧备份上。

关于 Ndb 备份和恢复的问题很少(而且答案仍然更少)。 Ndb 应用程序不使用备份吗?

【问题讨论】:

  • 无论您如何访问它(ndb、db、其他语言),数据存储都是相同的,所以也许您可以尝试在不使用 ndb 的情况下进行恢复?我使用不依赖 ndb 的 Datastore Admin 工具进行备份/恢复。
  • 我也在使用数据存储管理工具,指定一个谷歌存储桶。然而,我在 /_ah/mapreduce/controller_callback/ 和 /_ah/mapreduce/worker_callback/ 的日志中收到消息。这是我得到复制的跟踪的地方。由于我仍在调查,我将编辑问题以添加一些精确度。
  • @patb 我昨天的恢复工作也遇到了同样的问题。从未完成。尽管许多 mapreduce 任务确实成功运行,但有一个任务持续抛出此错误数小时。也不能中止工作(尽管在 UI 中确认了中止)。必须使用所有相关的 _AE* 记录手动删除它。现在在我的第二次尝试中,我遇到了同样的问题。任务队列现在为空(可能该任务达到了重试限制)。然而,这项工作被标记为未完成。我怀疑,这是数据存储区管理员恢复功能中最近出现的一个错误。
  • 那时我们有很多人。 Google 项目团队正在解决这个问题。他们已经“更改了项目的一些设置”,并要求我重试,并且恢复工作!但后来我尝试了另一个项目,问题仍然存在。那么解决我们问题的设置需要在每个项目的基础上应用吗?将在此处为您提供最新信息。
  • 我们正在努力解决这个问题。在此期间,我们会将设置 patb@ 提及应用于遇到此错误的项目。如果恢复仍然失败,请在此处提交问题:code.google.com/p/googleappengine/issues/list

标签: google-app-engine backup google-cloud-datastore


【解决方案1】:

所以关于这个的最后一句话并没有隐藏在一长串 cmets 的底部,我会发布一个答案。

这似乎是几天/几周前出现的一个错误,像我这样的一些用户在恢复到另一个项目时遇到了这个错误。

Google 项目团队做得很好,及时解决了问题。非常感谢@Ed Davisson。

【讨论】:

    猜你喜欢
    • 2020-03-29
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多