1

我们每小时收到大约 10000 条消息。我们将它们作为单独的文件存储在 ext3 文件系统上的每小时目录中。文件名包括一个序列号。我们使用 rsync 每 20 秒在另一个位置镜像这些文件(通过 SAN,但这没关系)。

有时 rsync 运行会选取文件 n-3、n-2、n-1、n+1,然后下一次 rsync 运行会继续 n、n+2、n+3、n+4 等等。

当一个进程在目录中以特定顺序创建文件时,是否有可能另一个进程使用readdir()看到文件以不同的顺序出现?

亲切的问候,塞巴斯蒂安

4

1 回答 1

1

我想你的问题可以重述为:

如果进程 A 创建文件d/x然后创建文件,进程 B 是否可以在目录上d/y执行并发操作并看到一个条目,但看不到一个条目 ?readdir()dd/yd/x

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

如果要强制执行排序,则需要在创建每个文件后显式地fsync()为目录d本身指定一个文件描述符。

于 2010-05-30T11:24:48.430 回答