Есть какой-то механизм, подобный транзакциям бд, только для файловой системы?
Добрый дань.
На сайте у пользователя есть возможность создавать альбомы и загружать в них фотографии. Фотографии можно грузить пачками, после чего они yf cthdtht ресайзятся и сохраняются. Фотография сохраняется на жестком диске, плюс делается соответствующая запись в БД.
Работа с бд происходит при помощи ActiveRecords (Yii). В классе описано поведение: после сохранения записи в базу, сохраняются файлы. Я обратил внимание, что бывают случаи, когда файл не записывается на диск.
Мне необходимо в случае ошибки записи хотя бы одного файла откатывать все изменения. С базой понятно - транзакции в помощь. А как быть с файлами?
Единственное, что приходит в голову: в случае возникновения ошибки руками удалять все файлы, которые уже были сохранены. Но как то это неправильно.
Подскажите, может есть какой то механизм подобный транзакциям бд, только для файловой системы? Сейчас используется ext4, но возможно поменять на что то более подходящее.
всё делается через базу. заводите отдельную таблицу заданий, например, заданий удаления файлов с диска. и делаете так
1. вам нужно сохранить файл blabla.jpg
1a. заносите в таблицу заданий "удалить blabla.jpg с таймаутом например 1 час"
1b. создаёте файл blabla.jpg
2. открываете транзацкию
3. делаете запись в основную таблицу, где в одном из полей сохраняете ассоциированный файл blabla.jpg (не сам файл, конечно, а его название)
4. удаляете запись сделанную п. 1а
5а. если нет ошибок - закрываете транзакцию
5б. если есть ошибки - откатываете транзакцию
вторая часть схемы - скрипт, обходящий таблицу заданий и выполняющий задания из неё.