GSUtil rsync在S3存储桶上提供400不可重试的异常

时间:2015-02-18 11:51:23

标签: amazon-s3 google-cloud-storage gsutil

我正在使用gsutil rsync,从s3复制到gs,并且在gsutil进入存储桶之后我收到以下错误:

列出s3时遇到不可重试的异常:// [bucket] /:BadRequestException:400无 CommandException:捕获不可重试的异常 - 中止rsync

这是不受欢迎的行为,因为我可以手动从s3复制到gs其他文件。我不能通过使用“-C”开关来绕过,因为这不是复制时的错误。

编辑:出现如果“#”在s3中的文件名中,则gsutil将其替换为“?versionId =”。例如:

S3文件名:Updaet#2_Montgomery Building Permits.xlsx

GS在调试输出中列出:Updaet?versionId = 2_Montgomery Building Permits.xlsx

2 个答案:

答案 0 :(得分:2)

您可以通过运行

来提供有关此故障的更多详细信息

gsutil -D rsync your-source your-destination

然后摘录显示错误的HTTP请求/响应?当你这样做时,请编辑授权:标题。

如果您不想在公共论坛上发布请求的详细信息,可以发送电子邮件至gs-team@google.com

感谢。

答案 1 :(得分:0)

同样的事情昨天发生在我身上,而且'#'确实是问题所在。

问题似乎是boto,不一定是gsutil,尽管我不确切知道修复的位置。 BotoTranslation._StorageUriForObject()调用boto.storage_uri(),使用VERSION_RE ('(?P<versionless_uri_str>.+)#(?P<version_id>.+)$')在uri_str / path中查找版本。如果对象名称包含&#39;#&#39;,则其后的所有内容都将被视为S3版本ID。我没有看到目前有任何方法可以逃脱或编码#&#39;#&#39;因此它不会被视为版本分隔符。