Valentin Nechayev
2015-06-10 08:50:52 UTC
Hi,
SEL>> Hа мой непросвещённый взгляд, любое количество таких выражений
SEL>> выполняемых параллельно, гарантировано выполнят успешно одно и
SEL>> только одно переименование, и только в случае отсутствия dst.
SEL>> Или я не прав?
PG> Да, race condition тут действительно исключён, а неатомарность
PG> выражается лишь в том, что в какой-то момент времени присутствует и
PG> старый, и новый файл одновременно. Соответственно, если unlink() по
PG> какой-то причине завершился с ошибкой, у нас так оба файла (точнее,
PG> оба имени файла) и останутся, а такое состояние может быть
PG> нежелательным - например, порождать дубликаты сообщений.
Потому в правилах работы с maildir есть явный контроль (по st_nlink) и откат
таких ситуаций.
Фактически DJB построил лёгкие транзакции вокруг атомарных действий FS,
таких, как link и unlink.
-netch-
SEL>> Hа мой непросвещённый взгляд, любое количество таких выражений
SEL>> выполняемых параллельно, гарантировано выполнят успешно одно и
SEL>> только одно переименование, и только в случае отсутствия dst.
SEL>> Или я не прав?
PG> Да, race condition тут действительно исключён, а неатомарность
PG> выражается лишь в том, что в какой-то момент времени присутствует и
PG> старый, и новый файл одновременно. Соответственно, если unlink() по
PG> какой-то причине завершился с ошибкой, у нас так оба файла (точнее,
PG> оба имени файла) и останутся, а такое состояние может быть
PG> нежелательным - например, порождать дубликаты сообщений.
Потому в правилах работы с maildir есть явный контроль (по st_nlink) и откат
таких ситуаций.
Фактически DJB построил лёгкие транзакции вокруг атомарных действий FS,
таких, как link и unlink.
-netch-