GSUtil rsync выдает 400 неповторяемых исключений в сегменте S3

Я использую gsutil rsync, копирую из s3 в gs, и после того, как gsutil частично прошел через ведро, я получаю следующую ошибку:

Обнаружено неповторяемое исключение при выводе списка s3: // [bucket] /: BadRequestException: 400 Нет CommandException: обнаружено неповторяемое исключение - прерывание rsync

Это нежелательное поведение, потому что я могу вручную скопировать из s3 в другие файлы gs. Я не могу обойти с помощью переключателя «-C», так как это не ошибка при копировании.

Изменить: появляется, что если "#" находится в имени файла в s3, gsutil заменяет его на "? VersionId =". Например:

S3 имя файла: Updaet # 2_Montgomery Building Permit.xlsx

GS перечисляет в выводе отладки как: Updaet? VersionId = 2_Montgomery Building Permit.xlsx


person joemastersemison    schedule 18.02.2015    source источник


Ответы (2)


не могли бы вы предоставить более подробную информацию об этой ошибке, запустив:

gsutil -D rsync ваш-источник ваше-место назначения

а затем извлечение HTTP-запроса / ответа, показывающего ошибку? Когда вы это сделаете, отредактируйте заголовок authorization :.

Если вы предпочитаете не публиковать детали своего запроса на общедоступном форуме, вы можете отправить их мне по электронной почте на [email protected].

Спасибо.

person Mike Schwartz    schedule 18.02.2015
comment
Похоже, что gsutil заменяет # на? VersionId =. Вы должны иметь возможность реплицировать, поставив # в имя файла в s3, а затем попытавшись синхронизировать его. - person joemastersemison; 18.02.2015
comment
Кроме того, -x #, похоже, не пропускает файлы из-за замены. - person joemastersemison; 18.02.2015

То же самое случилось со мной вчера, и проблема действительно в "#".

Проблема, по-видимому, связана с ботом, не обязательно с gsutil, хотя я точно не знаю, где находится исправление. BotoTranslation._StorageUriForObject() вызывает boto.storage_uri(), который использует VERSION_RE ('(?P<versionless_uri_str>.+)#(?P<version_id>.+)$') для поиска версии в uri_str / path. Если имя объекта содержит символ «#», все, что идет после него, будет рассматриваться как идентификатор версии S3. Я не вижу, чтобы в настоящее время существует какой-либо способ избежать или закодировать символ '#', чтобы он не рассматривался как разделитель версий.

person Jim Riggs    schedule 20.02.2015
comment
По крайней мере, gsutil можно было бы изменить, чтобы использовать переключатель, который пропускал эти файлы и синхронизировал остальные ...? Я в порядке, не синхронизирую их, но я не понимаю, почему вся синхронизация здесь должна завершиться неудачей, если я хочу сказать, что мне не нужны те, которые не работают таким образом. - person joemastersemison; 22.02.2015
comment
Вы видели параметр gsutil rsync -x? - person Mike Schwartz; 25.03.2015