我有一个Perl脚本,调用“的gsutil CP”复制选定从GCS到本地文件夹:的gsutil CP:并发执行导致本地文件损坏
$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版本:3.42在FreeBSD 8.2
任何人都遇到类似的问题?任何人有任何见解?
Edward Leigh