Назад | Перейти на главную страницу

Может ли NFS отсоединить и воссоздать результат в состоянии гонки?

Я наблюдаю странное поведение, и мне интересно, не связано ли это с гонкой.

Странное поведение MySQL получает EEXIST при попытке создать временный файл. MySQL повторно использует имена временных файлов по умолчанию, и поскольку он выбирает имена по порядку из пула имен, имя #sql_<pid>_0.<ext> всегда выбирается первым, если он еще не используется (последний 0 указывает положение имени в пуле).

Я знаю, что NFS имитирует разъединение из-за требования сохранить блоки в открытом файле. Когда вы отключаете файл на томе NFS, клиент вместо этого переименовывает файл, а затем, когда процессы на клиенте закрывают его, наконец, отключают.

Но что, если я отключу файл, а затем второй поток попытается воссоздать файл с тем же именем в течение миллисекунды или около того после разрыва связи?

Возможно ли, что переименование является асинхронным и может быть отложено настолько, что второй поток получит ошибку EEXIST, даже если мой поток считает, что он успешно завершил свой вызов unlink ()?