我们每小时收到大约 10000 条消息。我们将它们作为单独的文件存储在 ext3 文件系统上的每小时目录中。文件名包括序列号。我们使用 rsync 每 20 秒在另一个位置镜像这些文件(通过 SAN,但这并不重要)。
有时 rsync 运行会选取文件 n-3、n-2、n-1、n+1,然后下一次 rsync 运行会继续运行 n、n+2、n+3、n+4 等等。
是否有可能当一个进程在目录中以特定顺序创建文件时,另一个使用 readdir()
的进程会看到文件以不同的顺序出现?
亲切的问候, 塞巴斯蒂安
最佳答案
我想您的问题可以重述为:
If process A creates file
d/x
and then creates filed/y
, is it possible for process B to peform a concurrentreaddir()
on directoryd
and see an entryd/y
, but not see an entryd/x
?
答案是肯定的。 readdir
的排序保证确实非常薄弱。
如果你想强制排序,你需要在创建每个文件后显式fsync()
目录d
本身的文件描述符。
关于Linux ext3 readdir 和并发更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2928459/