[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