Google cloud platform 我应该担心数据存储错误吗?

Google cloud platform 我应该担心数据存储错误吗?,google-cloud-platform,google-cloud-datastore,google-cloud-dataflow,Google Cloud Platform,Google Cloud Datastore,Google Cloud Dataflow,当我运行写入google云数据存储的数据流作业时,有时我会看到指标显示我有一个或两个数据存储错误: 由于这些数据存储写入通常包含一批密钥,我想知道在RpcError的情况下,是否会自动进行一些重试。如果没有,处理这些情况的好方法是什么?我认为您应该首先确定发生了哪种错误,以便查看您的选择 但是,在官方数据存储文档中,有一个列出所有可能的方法的列表。幸运的是,他们为每一项都提供了建议的操作 我的建议是,你应该实施他们的建议,如果这些建议对你无效,就去寻找替代方案;灾难恢复:默认情况下,数据存储错

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


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

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

但是,在官方数据存储文档中,有一个列出所有可能的方法的列表。幸运的是,他们为每一项都提供了建议的操作


我的建议是,你应该实施他们的建议,如果这些建议对你无效,就去寻找替代方案;灾难恢复:默认情况下,
数据存储错误
将自动使用5次重试

我深入研究了beam python sdk中的代码。看起来最终的实体突变是通过
DatastoreWriteFn()
批量刷新的

RPCError被中的
write\u translations
中的此代码块捕获;还有一个decorator
@retry.with\u index\u backoff
for
commit
方法;默认重试次数设置为5次<代码>重试错误定义触发重试的具体原因

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