【问题标题】:Set to 0 the Component-count of gsutil composed objects (rateLimitExceeded Error)将 gsutil 组合对象的组件计数设置为 0(rateLimitExceeded 错误)
【发布时间】:2014-11-25 01:18:40
【问题描述】:

在复制一些日志文件时(通过 gsutil compose 命令创建):

gsutil -m cp -R gs://mybucket/PROD/ gs://mybucket/TEST/ 

我们遇到了很多类似这样的错误:

"errors":[  
    {  
        "domain":"usageLimits",
        "reason":"rateLimitExceeded",
        "message":"The total number of compose requests for this bucket's project exceeds the rate limit. Please reduce the rate of compose requests."
    }
],
"code":429,

对这些对象执行 gsutil stat 我可以看到它们的 Component-Count 是 972 等等。

我们试图走捷径:

gsutil setmeta -h "Component-Count:0" gs://mybucket/PROD/composite.log

但我们击中了一个:

CommandException: Invalid or disallowed header (component-count).
Only these fields (plus x-goog-meta-* fields) can be set or unset:

实际上,复制过程已完全执行,因此看到所有这些错误很烦人。

有谁知道如何将组件数设置为 0?

【问题讨论】:

    标签: google-cloud-storage gsutil


    【解决方案1】:

    您可以放心地忽略这些错误。如您所见,gsutil cp 命令完成了它的工作。

    如果您想摆脱这些错误,您可能想尝试这种解决方法,将复合对象的 Component-Count 标头设置为 0,并基本上“取消组合”这些对象。为此,您可以将其转储到网络上,然后再转回 Cloud Storage。

    一个简单的方法是使用 cp 命令中的"daisy-chain" 模式(-D 选项):

    gsutil cp -D gs://mybucket/PROD/composite.log gs://mybucket/PROD/notcompositeanymore.log
    

    它甚至可以与 gsutil -m(多线程)和 cp -R(递归)选项一起正常工作!

    如果您担心提高速度并降低此过程的成本,我建议您在 Compute Engine 虚拟机中进行,最好是在靠近您的存储桶的区域中。

    编码愉快!

    【讨论】:

    • 仅供参考,您可以使用gsutil cp -D gs://mybucket/PROD/composite.log gs://mybucket/PROD/notcompositeanymore.log。这正是 -D 的设计目的 - 无需链接。
    • 可能还想链接到the docs on component count
    • 感谢您指出正确的方法。我已经编辑了我的答案。
    【解决方案2】:

    这不再是必要的。 GCS 不再对涉及复合对象的复制操作实施速率限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 2012-07-26
      • 1970-01-01
      • 2022-01-01
      相关资源
      最近更新 更多