我有一个 Perl 脚本,它调用“gsutil cp”将一个从 GCS 中选择的复制到本地文件夹:
$cmd = "[bin-path]/gsutil cp -n gs://[gcs-file-path] [local-folder]";
$output = `$cmd 2>&1`;
该脚本通过 HTTP 调用,因此可以多次启动(例如,通过双击链接)。发生这种情况时,本地文件最终可能是正确大小的两倍,因此显然已损坏。三件事看起来很奇怪:
gsutil 在写入本地文件时似乎没有锁定它,从而允许另一个线程(在本例中为 gsutil 的另一个实例)写入同一个文件。
'-n' 似乎没有效果。我原以为它会阻止 gsutil 的第二个实例尝试复制操作。
MD5 签名检查失败:如果签名不匹配,通常 gsutil 会删除目标文件,但这显然并不总是发生。
有问题的文件大于 2MB(通常约为 5MB),因此可能与自动恢复功能有一些交互。Perl 脚本仅在本地文件不存在时调用 gsutil,但这不会捕获双击(因为 GCS 传输身份验证的时间滞后)。
gsutil 版本:FreeBSD 8.2 上的 3.42
有人遇到类似问题吗?有任何见解的人吗?
爱德华·利