我应该关注datastoreRpcErrors吗?

时间:2018-05-21 19:07:06

标签: google-cloud-platform google-cloud-datastore google-cloud-dataflow

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

enter image description here

由于这些数据存储区写入通常包含一批密钥,我想知道RpcError的情况,如果一些重试会自动发生。如果没有,那么处理这些案件的好方法是什么?

2 个答案:

答案 0 :(得分:2)

tl; dr :默认情况下datastoreRpcErrors会自动使用5次重试。

我在beam python sdk中挖掘documentation的代码。看起来最终的实体突变是通过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)

datastoreio中的write_mutations中的此代码块捕获了RPCError;并且@retry.with_exponential_backoff方法有一个装饰器commit;并且默认的重试次数设置为5; retry_on_rpc_error定义了触发重试的具体RPCErrorSocketError原因。

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
      ...

答案 1 :(得分:0)

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

但是,在官方数据存储文档中,列出了所有可能的errors and their error codes。幸运的是,他们为每个人提供了建议的行动。

我的建议是,如果它们对您无效,您可以实施他们的建议并寻找替代方案