Estou usando uma rede de máquinas Linux (Debian Squeeze no kernel 2.6.32), compartilhando arquivos usando o NFS (v3). O cenário é que um processo em execução no cliente A criará um arquivo por meio do NFS no servidor de arquivos Z. Depois que o processo for concluído em A (liberando sua saída e fechando o arquivo), o cliente B tentará acessar o arquivo. 99,9% das vezes não há problema com essa abordagem.
O problema é que raramente o cliente B ao tentar ler emitirá um erro dizendo que o arquivo não existe. A ruga é que B sempre mostra o arquivo quando um "ls" ou readdir é feito no diretório contendo. No entanto, ao tentar abrir, ou até mesmo chamar "stat" no arquivo o erro não existe é lançado.
Alguns pontos adicionais:
Eu suspeito strongmente que este é um problema de coerência de cache NFS de algum tipo. Mas não consigo descobrir qual é a causa exata ou a possível solução. A menos que eu esteja interpretando mal o manual do NFS, esse tipo de comportamento deve ser impedido pela coerência do cache próximo ao aberto. Alguém já teve experiência com esse problema de arquivos NFS que existem para a chamada de sistema "readdir", mas não existem para a chamada de sistema "stat"? Qualquer insight seria muito apreciado. Obrigado.