重试处理策略

重试策略

gsutil 操作可能会失败的原因有很多;有些是不可重试的,并且需要用户执行一些操作,例如:

  • 凭据无效。
  • 由于代理配置问题,网络不可达。
  • 访问遭拒,因为您尝试使用的存储分区或对象所具有的 ACL 不允许您尝试执行的操作。
  • 在并行运行操作的命令(即使用 -m top-level 标志的命令)中失败的个别操作。

在其他情况下,错误是可重试的:暂时性网络故障;HTTP 429 和 5xx 错误代码;执行可续传上传时返回的 HTTP 408 错误代码。对于这些情况,gsutil 将尝试使用截断的二进制指数退避算法策略:

  • 等待 [0..1] 秒之间的随机一段时间后再重试;
  • 如果失败,等待 [0..2] 秒之间的随机一段时间后再重试;
  • 如果失败,等待 [0..4] 秒之间的随机一段时间后再重试;
  • 依此类推,直至达到可配置的重试次数上限(默认值 = 23),

每个重试期受可配置的时长上限(默认值 = 60 秒)的限制。

因此,默认情况下,gsutil 会在 1+2+4+8+16+32+60... 秒内重试 23 次,持续大约 10 分钟。通过修改 .boto 配置文件的“[Boto]”部分中的 num_retries 和 max_retry_delay 配置变量,您可以调整任何单次重试的重试次数和最长延迟时间。大多数用户不需要更改这些值。

对于数据传输(gsutil cp 和 rsync 命令),gsutil 以可续传传输的形式提供其他重试功能。从本质上讲,因暂时性错误而中断的传输无需重新从头开始即可重启。如需详细了解此内容,请参阅 gsutil help cp 的“可续传传输”部分。