У меня есть две клиентские программы, которые используют S3 для передачи некоторой информации. Эта информация представляет собой список файлов.
Давайте назовем клиентов «загрузчиком» и «загрузчиком»:
Загрузчик делает что-то вроде этого:
- загрузить файл A
- загрузить файл B
- загрузить файл C
- загрузить файл маркера УСПЕХА
Загрузчик делает что-то такое:
- проверка на УСПЕХ
- если найдено, скачайте A, B, C.
- еще, получить данные откуда-то еще
и обе эти программы запускаются периодически. После загрузки загрузчик заполнит новый каталог, а загрузчик попытается получить последние версии A, B, C.
Надеюсь, цель ясна - я не хочу, чтобы загрузчик видел частичное представление, а скорее получил все A, B, C или пропустил этот каталог.
Однако , я не думаю, что это работает, как написано. Благодаря возможной последовательности, PUT загрузчика могут быть переупорядочены в:
- загрузить файл B
- загрузить файл маркера УСПЕХА
- загрузить файл A
- ...
И в этот момент загрузчик может запуститься, увидеть маркер SUCCESS и предположить, что каталог заполнен (а это не так).
Так какой здесь правильный подход?
Одна идея состоит в том, чтобы загрузчик сначала загрузил A, B, C, затем повторно проверял, что файлы сохранены, и только после того, как он видит их все, а затем, наконец, пишет маркер УСПЕХА.
Будет ли это работать?