Linux ext3 readdir и одновременные обновления - PullRequest
1 голос
/ 28 мая 2010

мы получаем около 10000 сообщений в час. Мы храним их как отдельные файлы в почасовых каталогах в файловой системе ext3. Имя файла включает в себя порядковый номер. Мы используем rsync для зеркалирования этих файлов каждые 20 секунд в другом месте (через SAN, но это не имеет значения).

Иногда прогон rsync выбирает файлы n-3, n-2, n-1, n + 1, и затем следующий прогон rsync продолжается с n, n + 2, n + 3, n + 4 и так далее.

Возможно ли, что когда один процесс создает файлы в определенной последовательности в каталоге, другой процесс, использующий readdir(), видит файлы, появляющиеся в другой последовательности?

С уважением, Себастьян

1 Ответ

1 голос
/ 30 мая 2010

Полагаю, ваш вопрос можно переформулировать как:

Если процесс A создает файл d/x и затем создает файл d/y возможно для процесса B, чтобы выполнить одновременно readdir() в каталоге d и посмотреть запись d/y, но не вижу записи d/x

Ответ - Да. Гарантии заказа для readdir очень слабые.

Если вы хотите применить порядок, вам нужно явно fsync() описатель файла для самого каталога d после создания каждого файла.

...