我有一个过程:
rename()系统调用来replace现有的文件。 我们这样做,因为我们想要primefaces文件更新,并且rename()规范说:
如果newpath已经存在,它将被primefacesreplace,所以没有任何一个尝试访问newpath的进程会发现它丢失。 但是,可能会出现一个窗口,其中oldpath和newpath指向正在重命名的文件。
我们依靠这种行为。
但是,最近,从迁移到新的NetApp(集群模式,从7模式)开始,我们已经有一个偶尔会遇到ENOENT的进程 – 没有这样的文件或目录。
我的意思是“非常偶然” – 在过去的几周里有四五次,每隔五分钟左右发生一次。
我正在与供应商一起调查,看他们的NFS服务器是否可能是个bug。
但是我真正想要弄清楚的是,这个primefaces性保证是否实际上适用于NFS。 有没有人能够澄清如果rename()的primefaces保证适用于多客户NFSscheme? 我并不确定这个function是否正在运行,但从来没有保证过。
来自: RFC1813
过程RENAME将目录中的from.name标识的文件from.dir重命名为目录to.dir中的to.name。 该操作对于客户来说是必需的。
如果是相关的,我们有SL 6.5客户端在ONTAP-CDOT 8.3上访问NFS数据存储。
避免NFS中的竞争条件
这永远是一个有趣的挑战,我唯一不知道重写应用程序的工作是使用选项sync来挂载共享,并将NFS服务器更改为使用no_wdelay 。 我不记得如何在NetApp中设置no_wdelay。
这种方法的缺点是,如果你有很多同时写入这个共享,他们会得到指数慢。 您可能想问NetApp如何在该共享上设置no_wdelay,或只是向他们描述问题。 他们可能有更好的想法。 至less8年来我没有碰过NetApp。