AWS S3 Удаление файла при загрузке этого объекта - PullRequest
3 голосов
/ 07 апреля 2020

Кажется, я не могу найти, как AWS s3 справляется, если кто-то удаляет файл, пока другой человек его скачивает. Он ведет себя как unix система, где дескриптор открывается и файл загружается без проблем, или он ведет себя по-другому?

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

S3 предлагает возможную согласованность для DELETES.

Из модели согласованности данных S3

Процесс удаляет существующий объект и сразу пытается его прочитать. До тех пор, пока удаление не будет полностью распространено, Amazon S3 может вернуть удаленные данные.

Здесь, где удаление и загрузка одного и того же объекта выполняется одновременно, даже если удаление объекта завершается успешно до загрузки завершено, процесс все равно сможет загрузить данные.

0 голосов
/ 08 апреля 2020

Вы столкнетесь с расой, своего рода, поэтому результат непредсказуем. Когда вы загружаете файл с S3, вы можете подключиться к нескольким серверам S3. Если в любой момент вы запросите часть объекта S3, а сервер, к которому вы подключены, считает, что объект был удален, загрузка не удастся.

Вот простой тест: сохраните флэш-память 2 ГБ в S3, затем скачать это. Пока он загружается, go в консоль S3 и удалите объект. Вы обнаружите, что загрузка не удалась (с помощью NoSuchKey), поскольку указанный ключ больше не существует.

Создайте временный файл объемом 2 ГБ и загрузите его на S3:

mkfile -n 2g 2gb.dat

$ aws s3 cp 2gb.dat s3://mybucket
upload: ./2gb.dat to s3://mybucket/2gb.dat

После завершения начните загрузку файл:

$ aws s3 cp s3://mybucket/2gb.dat fred.dat
Completed 162.2 MiB/2.0 GiB (46.9 MiB/s) with 1 file(s) remaining

Затем перейдите на консоль S3 и удалите 2gb.dat, и это произойдет:

$ aws s3 cp s3://mybucket/2gb.dat fred.dat
download failed: s3://mybucket/2gb.dat to ./fred.dat An error occurred 
(NoSuchKey) when calling the GetObject operation: The specified key does not exist.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...