The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Атомарная замена 'файлов'"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Разное)
Изначальное сообщение [ Отслеживать ]

"Атомарная замена 'файлов'"  +/
Сообщение от Аноним (0), 16-Дек-24, 06:07 
... по-видимому невозможна в Linux.

Требования: транзакционность. Два разрешённых состояния:
* есть оригинальный файл, нет замены нигде
* есть замена в нужном месте, оригинального файла нет

Два запрещённых:
* есть оригинальный файл, замена насрана где-то
* нет ни оригинала, ни замены

Обычный файл вы можете создать с флагом O_TMPFILE (временный файл, не пишущийся в журнал), а потом попробовать атомарно заменить через renameat2(..., RENAME_EXCHANGE), но файлы в /proc/self/fd - это симлинки, и renameat2 в них не умеет. Можно, конечно, попробовать поиграться с readlink, но он вам выдаст несуществующий путь.

Hardlink - не умеет заменять файлы, флаг AT_REPLACE так и не был добавлен.

Директория/симлинк: вы не можете ни создать их с заменой, ни создать их файлы через open с флагом O_TMPFILE, и потом тип поменять. Сами же вызовы для их создания флаги не поддерживают.

Складывается впечатление, что так сделано намеренно, чтобы с race conditions дел не иметь.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Атомарная замена 'файлов'"  +/
Сообщение от Аноним (1), 17-Дек-24, 11:59 
Какой-то бред ламерский. Хардлинк позволяет предельно атомарно заменить файл по указанному имени на другой. Для любых разумных применений этого хватает. Проблемы только у гениев, которым хочется в ту же самую айноду резко положить другое содержимое. Где у вас есть такие возможности, там и процветайте, собственно.
Ответить | Правка | Наверх | Cообщить модератору

2. "Атомарная замена 'файлов'"  +/
Сообщение от pavel_simple. (?), 17-Дек-24, 12:51 
> Какой-то бред ламерский. Хардлинк позволяет предельно атомарно заменить файл по указанному
> имени на другой. Для любых разумных применений этого хватает. Проблемы только
> у гениев, которым хочется в ту же самую айноду резко положить
> другое содержимое. Где у вас есть такие возможности, там и процветайте,
> собственно.

Вася хочет, не файл заменить атомарно(для чего нужные сисколы есть), а заменить для работающего процесса открытый файл. Ну, я так понял, но этот поток бреда сложно однозначно понять

Ответить | Правка | Наверх | Cообщить модератору

3. "Атомарная замена 'файлов'"  +/
Сообщение от DeerFriend (?), 17-Дек-24, 18:02 
>> Какой-то бред ламерский. Хардлинк позволяет предельно атомарно заменить файл по указанному
>> имени на другой. Для любых разумных применений этого хватает. Проблемы только
>> у гениев, которым хочется в ту же самую айноду резко положить
>> другое содержимое. Где у вас есть такие возможности, там и процветайте,
>> собственно.
> Вася хочет, не файл заменить атомарно(для чего нужные сисколы есть), а заменить
> для работающего процесса открытый файл. Ну, я так понял, но этот
> поток бреда сложно однозначно понять

только не рассказывайте ему про sighup

Ответить | Правка | Наверх | Cообщить модератору

5. "Атомарная замена 'файлов'"  +/
Сообщение от Аноним (5), 18-Дек-24, 09:44 
> только не рассказывайте ему про sighup

но тебе-то можно рассказать, что sighup без соответствующего обработчика не работает?

Ответить | Правка | Наверх | Cообщить модератору

6. "Атомарная замена 'файлов'"  +/
Сообщение от DeerFriend (?), 18-Дек-24, 11:50 
> без соответствующего обработчика

проблема разработчика

Ответить | Правка | Наверх | Cообщить модератору

4. "Атомарная замена 'файлов'"  +/
Сообщение от ACCA (ok), 17-Дек-24, 21:35 
Конечно невозможно. Такое только в однозадачных системах бывает.
"Замена насрана" может быть в памяти другого процесса.
Ответить | Правка | Наверх | Cообщить модератору

7. "Атомарная замена 'файлов'"  +/
Сообщение от Аноним (7), 19-Дек-24, 16:57 
Это временно.
Ответить | Правка | Наверх | Cообщить модератору

8. "Атомарная замена 'файлов'"  +/
Сообщение от Tron is Whistling (?), 25-Дек-24, 12:08 
"Обычный файл вы можете создать с флагом O_TMPFILE (временный файл, не пишущийся в журнал), а потом попробовать атомарно заменить через renameat2"

Это уже нарушение второй группы условий (одновременно насрана замена и есть оригинал).
Вердикт - кривые входные условия, транзакционности нескольких операций в ФС действительно нет.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру