Linux ext3 readdir和并发更新

时间:2010-05-28 11:13:01

标签: 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()的另一个进程看到文件以不同的顺序出现?

亲切的问候, 塞巴斯蒂安

1 个答案:

答案 0 :(得分:1)

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

  

如果进程A创建文件d/x和   然后创建文件d/y,是吗   过程B可以执行a   目录readdir()上的并发d并查看   条目d/y,但看不到条目   d/x

答案是肯定的。 readdir的排序保证确实很弱。

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