Linux ext3 readdir 和并发更新

标签 linux concurrency readdir

我们每小时收到大约 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 file d/y, is it possible for process B to peform a concurrent readdir() on directory d and see an entry d/y, but not see an entry d/x?

答案是肯定的。 readdir 的排序保证确实非常薄弱。

如果你想强制排序,你需要在创建每个文件后显式fsync()目录d本身的文件描述符。

关于Linux ext3 readdir 和并发更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2928459/

相关文章:

java - 以原子方式确保 ConcurrentMap 条目

java - 在多个线程中更新 AtomicInteger 变量时未获得预期结果

php 文件名编码,ö 不是真正的 ö 或者 "o ̈ "是什么?

javascript - 如何使用nodeJS导出本地文件夹结构?

c - readdir(3) 奇怪的行为 : finding non existing files in/dev/

linux - 我可以使用/dev/null 作为 find 命令吗?

c - 为什么 ping 会收到另一个 ping 命令包?

c - malloc 是确定性的吗?

scala - scalaz.concurrent.Future 与 scalaz.ContT[Trampoline, Unit, 相比有什么好处?]

Linux Mint 想要缩小驱动器