Согласно документации AWS и сообществу по переполнению стека, лучший способ справиться с ошибкой 404 (NoSuchKey) для чтения после справа - это вызвать и повторить операцию HeadObject для указанного ключа c, пока она не будет успешной! Вот мой код:
# first writing objects into the prefix1 here
...
# copy files from the prefix1 to the prefix2
for obj in bucket.objects.filter(Prefix=prefix1):
# this function make sure the specific key is available for read
# by calling HeadObject with retries - throwing exception otherwise
waitForObjectToBeAvaiableForRead(bucketName, obj.key)
copy_source = {
"Bucket": bucketName,
"Key": obj.key
}
new_key = obj.key.replace(prefix1, prefix2, 1)
new_obj = bucket.Object(new_key)
new_obj.copy(copy_source)
Этот код работает большую часть времени. Но очень РЕДКО я получаю эту ошибку для new_obj.copy(copy_source)
:
NoSuchKey:An error occurred (NoSuchKey) when calling the UploadPartCopy operation: The specified key does not exist.
Однако мои журналы показывают, что вызов HeadObject
возвращает успешный ответ после нескольких попыток (что означает, что файл в конечном итоге согласован !!!) но операция копирования не выполняется! Может кто-нибудь объяснить, в чем может быть причина такого поведения? Оцените ваш ответ.