У меня есть сценарий Perl, который называет «GSUtil ф», чтобы скопировать выбранный из из ГКС в локальную папку:GSUtil ф: одновременное выполнение приводит к локальному повреждению файла
$cmd = "[bin-path]/gsutil cp -n gs://[gcs-file-path] [local-folder]";
$output = `$cmd 2>&1`;
Скрипт вызывается через HTTP и поэтому можно инициировать несколько раз (например, двойным щелчком по ссылке). Когда это произойдет, локальный файл может оказаться в два раза выше правильного размера и, следовательно, явно поврежден. Три вещи появляются нечетные:
GSUtil, кажется, не запирая локального файла во время записи в его, позволяя другой поток (в данном случае еще один экземпляр GSUtil) писать в тот же файл.
«-n» похоже, не имеет никакого эффекта. Я бы ожидал, что он предотвратит попытку копирования экземпляра второго экземпляра gsutil .
Проверка подписи MD5 не удается: обычно GSUtil удаляет целевой файл, если есть несоответствие подписи, но это явно не всегда происходит.
Файлы, о которых идет речь, больше 2 МБ (обычно около 5 МБ), поэтому может быть некоторое взаимодействие с функцией автоматического возобновления. Perl-скрипт вызывает gsutil только в том случае, если локальный файл еще не существует, но это не делает двойной щелчок (из-за задержки времени для аутентификации передачи GCS).
версия GSUtil: 3,42 на FreeBSD 8.2
Любой испытывает подобную проблему? Любой, у кого есть какие-либо идеи?
Эдвард Ли