2015-10-28 58 views
0

時當處理命令:錯誤處理的gsutil -m -q setmeta

的gsutil -m -q setmeta -h 「緩存控制:公衆,最大年齡= 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 

的服務器是在谷歌計算引擎,並經常更新:

gcloud組件更新

看來這個過程實際上完成了,但是這些錯誤還在繼續發生。任何想法是什麼導致他們,如果有解決方案?

謝謝。

回答

1

可能發生這種情況的原因有兩個:

  1. 另一個客戶更新對象(或它的元數據)同時進行。
  2. 有一個瞬間服務或網絡錯誤需要重試(因此「重試」消息),但原始請求實際上已成功。即使原始操作成功,重試也會針對原始對象的層疊進行預處理,因此它會失敗。

如果原因是#1,則可以通過避免對對象進行併發更新來解決該問題。如果原因是#2,不幸的是,你可以做的事情不多。

+0

因此,本質上,該消息可以被忽略,正確嗎?可能#1的情況正在發生,但似乎不太可能。謝謝! – CoryatJohn

+0

是的,如果您確實知道沒有併發寫入,那麼在412上假設此特定命令成功應該是安全的。 –