复制某些日志文件(通过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统计我可以看到它们的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?
答案 0 :(得分:5)
您可以安全地忽略这些错误。正如您所注意到的,gsutil cp
命令完成了它的工作。
如果你想摆脱这些错误,你可能想尝试这种解决方法,将复合对象的Component-Count
标题设置为0,基本上"取消组合"对象。为此,您可以将其转储到线路并再次返回到云存储。
一种简单的方法是使用cp命令中的"daisy-chain"模式(-D选项):
gsutil cp -D gs://mybucket/PROD/composite.log gs://mybucket/PROD/notcompositeanymore.log
它甚至可以与gsutil -m(多线程)和cp -R(递归)选项一起使用!
如果您担心提高速度并降低此过程的成本,我建议您在计算引擎VM中进行,最好是在靠近您的存储区的区域。
快乐的编码!
答案 1 :(得分:0)
这不再是必需的。 GCS不再对涉及复合对象的复制操作实施速率限制。