[Cascavel-pm] NFS x flock
Ednardo Lobo
ednardo em lobo.eti.br
Quinta Fevereiro 9 06:51:13 PST 2006
Alceu R. de Freitas Jr. wrote:
> Oi Ednardo,
>
> --- Ednardo Lobo <ednardo em lobo.eti.br> escreveu:
>
>
>>Alguma outra forma de implementar lock() sobre NFS
>>com Perl? Necessito
>>que apenas um único processo, de vários, rodandando
>>em um conjunto de
>>computadores clientes acessando arquivos num
>>servidor NFS leiam
>>determinado arquivo. Caso um processo tente ler um
>>arquivo já em leitura
>>por outro, ele deve abortar a operação e tentar ler
>>outro.
>
>
> O flock() do C não funciona em compartilhamentos NFS,
> apenas a função lockf(). A implementação do flock() do
> Perl usa flock(), lockf() e fcntl() da C, o que ele
> achar primeiro (e pelo que entendi da documentação,
> nessa ordem).
Então a uma possibilidade de fazê-lo usar lockf() o que resolveria meu
problema.
> Você tem duas situações:
> 1 - Apenas SEUS programas em Perl acessam os arquivos
> que você quer controlar o acesso.
>
> Se você estiver no primeiro caso, implemente outra
> forma de lock que não flock(): você pode usar um
> arquivo intermediário, como .lock ou algo assim.
Esse é o meu cenário, entretanto, utilizar arquivo intermediário tem o
inconveniente de algo anormal acontecer com o processo e ele ser
interrompindo sem antes apagar o arquivo (.lock). Não desejo ter este
inconveniente.
O que tenho em mãos é uma fila de arquivos a serem processados,
obviamente eles são lidos uma única vez e depois apagados. Preciso
garantir que todos os arquivos sejam processados, preferencialmente uma
única vez pois não posso perder tempo com reprocessamentos. A fila está
num servidor e mútiplas instâncias de um mesmo script Perl é disparado
em cada uma de várias máquinas conectadas ao servidor via NFS. O script
lê um arquivo da fila, realiza um processamento e em seguida remove
(unlink) o arquivo da fila.
Alguém tem alguma outra sugestão, uma vez que o funcionamento do flock,
lockf, etc. é algo meio obscuro?
Grato,
--
Ednardo Lobo
www.lobo.eti.br
Mais detalhes sobre a lista de discussão Cascavel-pm