设置为0 gsutil组合对象的组件数(rateLimitExceeded错误)

Mar*_*l R 3 google-cloud-storage gsutil

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

gsutil -m cp -R gs://mybucket/PROD/ gs://mybucket/TEST/ 
Run Code Online (Sandbox Code Playgroud)

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

"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,
Run Code Online (Sandbox Code Playgroud)

对这些对象执行gsutil统计,我可以看到它们的Component-Count是972等等.

我们试图走捷径:

gsutil setmeta -h "Component-Count:0" gs://mybucket/PROD/composite.log
Run Code Online (Sandbox Code Playgroud)

但我们遇到了:

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

实际上,复制过程是完全执行的,所以只看到所有这些错误是非常烦人的.

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

Mar*_*l R 5

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

如果你想摆脱这些错误,你可能想尝试这种解决方法Component-Count将复合对象的标题设置为0 ,并基本上"取消组合"对象.为此,您可以将其转储到线路并再次返回到云存储.

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

gsutil cp -D gs://mybucket/PROD/composite.log gs://mybucket/PROD/notcompositeanymore.log
Run Code Online (Sandbox Code Playgroud)

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

如果您担心提高速度并降低此过程的成本,我建议您从计算引擎VM中进行,最好是在靠近您的存储区的区域.

快乐的编码!

  • 仅供参考,您可以使用`gsutil cp -D gs://mybucket/PROD/composite.log gs:// mybucket/PROD/notcompositeanymore.log`.这正是`-D`的设计目标 - 无需链接. (3认同)
  • 可能还想链接到[关于组件计数的文档](https://cloud.google.com/storage/docs/composite-objects#_Count). (2认同)