The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Атомарная замена 'файлов', !*! Аноним, 16-Дек-24, 06:07  [смотреть все]
... по-видимому невозможна в Linux.

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

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

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

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

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

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

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

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

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

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

  • Атомарная замена 'файлов', !*! ACCA, 21:35 , 17-Дек-24 (4)
    Конечно невозможно. Такое только в однозадачных системах бывает.
    "Замена насрана" может быть в памяти другого процесса.
  • Атомарная замена 'файлов', !*! Tron is Whistling, 12:08 , 25-Дек-24 (8)
    "Обычный файл вы можете создать с флагом O_TMPFILE (временный файл, не пишущийся в журнал), а потом попробовать атомарно заменить через renameat2"

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




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

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