代码之家  ›  专栏  ›  技术社区  ›  greeness user1775765

我应该关心数据存储错误吗?

  •  3
  • greeness user1775765  · 技术社区  · 6 年前

    当我运行写入Google云数据存储的数据流作业时,有时我会看到指标显示我有一个或两个 datastoreRpcErrors :

    enter image description here

    因为这些数据存储写入通常包含一批密钥,所以我想知道在rpcerror的情况下,是否会自动重试。如果没有,处理这些案件的好方法是什么?

    2 回复  |  直到 6 年前
        1
  •  2
  •   greeness user1775765    6 年前

    DR :默认情况下 datastoreRpcErrors 将自动使用5次重试。

    我深入研究了 datastoreio 在beam python sdk中。看起来最终的实体突变是通过 DatastoreWriteFn()

    # Flush the current batch of mutations to Cloud Datastore.
    _, latency_ms = helper.write_mutations(
        self._datastore, self._project, self._mutations,
        self._throttler, self._update_rpc_stats,
        throttle_delay=_Mutate._WRITE_BATCH_TARGET_LATENCY_MS/1000)
    

    rpcerror被以下代码块捕获: write_mutations helper 还有一个装饰工 @retry.with_exponential_backoff 对于 commit 方法;默认重试次数设置为5; retry_on_rpc_error 定义混凝土 RPCError SocketError 触发重试的原因。

    for mutation in mutations:
      commit_request.mutations.add().CopyFrom(mutation)
      @retry.with_exponential_backoff(num_retries=5,
                                      retry_filter=retry_on_rpc_error)
      def commit(request):
        # Client-side throttling.
        while throttler.throttle_request(time.time()*1000):
        try:
          response = datastore.commit(request)
          ...
        except (RPCError, SocketError):
          if rpc_stats_callback:
            rpc_stats_callback(errors=1)
          raise
          ...
    
        2
  •  0
  •   Ggrimaldo    6 年前

    我认为您首先应该确定发生了哪种错误,以便了解您的选择。

    但是,在官方数据存储文档中,有一个列表列出了所有可能的 errors and their error codes . 幸运的是,他们为每个人都提供了推荐的操作。

    我的建议是,如果他们的建议对你不起作用,你就执行他们的建议并寻找替代方案。