NFS 取消链接并重新创建是否会导致竞争条件?

NFS 取消链接并重新创建是否会导致竞争条件?

我看到了奇怪的行为,我想知道这是否是一种竞争条件。

MySQL 在尝试创建临时文件时出现了奇怪的行为EEXIST。MySQL 默认重用临时文件名,并且由于它按顺序从名称池中选择名称,因此#sql_<pid>_0.<ext>如果名称尚未使用,则始终首先选择该名称(最后一个 0 表示名称在池中的位置)。

我知道 NFS 模拟取消链接是因为需要保留打开文件上的块。当您取消链接 NFS 卷上的文件时,客户端会重命名该文件,然后当客户端上的进程关闭它时,最终执行取消链接。

但是,如果我取消链接文件,然后第二个线程在取消链接后一毫秒左右的时间内尝试重新创建具有相同名称的文件,该怎么办?

重命名是否可能是异步的,并且可能会延迟足够长的时间,以至于第二个线程会出现 EEXIST 错误,即使我的线程认为它已经成功完成了 unlink() 调用?

相关内容