Как избежать одновременных операций (сохранить / удалить) в файловой операции - PullRequest
0 голосов
/ 31 августа 2018

Я встретил вопрос и мне нужна помощь.

Я проектирую простой файловый сервис (Http), с помощью которого пользователь может загружать / скачивать файлы, а также удалять файлы на файловом сервере.

Файловая служба будет хранить файлы на одном компьютере с Linux в родительской папке (например, /data/fileserver/). Загруженный файл (например, xxx.mp4) можно сохранить с указанием пути на компьютере, например /data/fileserver/demo/1/xxx.mp4.

Вопрос в том, что: Как избежать одновременных операций (сохранить / удалить) в этой файловой службе ?

, например

Пользователь A загружает файл xxx.mp4, а файловая служба сохраняет (еще не завершил) его путь /data/fileserver/demo/1/xxx.mp4.

В то же время пользователь B вызывает delete api этой файловой службы, чтобы удалить папку /data/fileserver/demo. Эта операция удаления повлияет на операцию сохранения пользователя A.

Я надеюсь, что в этом случае операция удаления пользователя B. завершится неудачей.

Кажется, что модель блокирует ветку дерева, но я не знаю, как с ней справиться.

Файловый сервер основан на языке Java.

Спасибо.

1 Ответ

0 голосов
/ 31 августа 2018

Поскольку HTTP может быть асинхронным, я бы использовал подход шаблона проектирования.

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

Предположим, вы не хотите, чтобы в папке 'fileserver' были какие-либо изменения до завершения какой-либо операции.

Реализовать карту с ключом в качестве фамилии и значением в качестве true или false (означает, работает или нет)

Похоже на простое решение.

...