3

在复制一些日志文件时(通过 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?

4

2 回答 2

5

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

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

一个简单的方法是使用 cp 命令中的“菊花链”模式(-D 选项):

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

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

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

快乐编码!

于 2014-09-30T12:03:06.813 回答
0

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

于 2018-08-12T22:51:35.327 回答