处理 gsutil -m -q setmeta 时出错

Errors when processing gsutil -m -q setmeta

处理命令时:

gsutil -m -q setmeta -h "Cache-Control:public, max-age=10"

我经常遇到这些错误:

ERROR 1028 16:10:46.257674 retry_decorator.py] Retrying in 0.94 seconds ...
Traceback (most recent call last):
  File "/usr/local/share/google/google-cloud-sdk/platform/gsutil/third_party/retry-decorator/retry_decorator/retry_decorator.py", line 20, in f_retry
    return f(*args, **kwargs)
  File "/usr/local/share/google/google-cloud-sdk/platform/gsutil/gslib/commands/setmeta.py", line 248, in SetMetadataFunc
    provider=exp_src_url.scheme)
  File "/usr/local/share/google/google-cloud-sdk/platform/gsutil/gslib/cloud_api_delegator.py", line 212, in PatchObjectMetadata
    generation=generation, preconditions=preconditions, fields=fields)
  File "/usr/local/share/google/google-cloud-sdk/platform/gsutil/gslib/gcs_json_api.py", line 819, in PatchObjectMetadata
    generation=generation)
  File "/usr/local/share/google/google-cloud-sdk/platform/gsutil/gslib/gcs_json_api.py", line 1308, in _TranslateExceptionAndRaise
    raise translated_exception
PreconditionException: PreconditionException: 412 Precondition Failed

服务器在 Google 计算引擎上并经常更新:

gcloud 组件更新

似乎该过程实际上已完成,但这些错误不断出现。知道是什么原因造成的,是否有解决方案?

谢谢。

这可能有两个原因:

  1. 另一个客户端同时更新了对象(或其元数据)。
  2. 存在需要重试的暂时性服务或网络错误(因此 "Retrying" 消息),但原始请求实际上成功了。重试针对原始对象的元生成进行了预处理,因此即使原始操作成功,它也会失败。

如果原因是 #1,您可以通过避免并发更新对象来解决它。如果原因是 #2,很遗憾,您无能为力。