Árvore de páginas

Proteção - Comportamento da função FILE()

Esta build contém uma proteção na função Advpl File(), usada  para verificar a existência de um arquivo no disco.

  

Abrangência ERP 10 e 11
Situação

Utilização da função File(), para verificar a exitência de um arquivo fisicamente no disco.  

Ocorrência

A função File() poderia retornar o valor booleano .F. ( falso ) para um arquivo que efetivamente existe no disco ( falso-positivo ), caso este arquivo tenha sido criado em um momento imediatamente anterior à verificação, através do c-Tree Server, e o serviço do Protheus Server em questão estivesse em uma máquina dedicada, acessando o diretório raiz do ambiente ( rootpath ) através de compartilhamento de rede. 

Este comportamento pode causar efeitos colaterais, como por exemplo uma fal;a de criação de índice, na seguinte situação : Na abertura de uma tabela, onde um índice acabou de ser criado, ao verificar a existência do índice no disco usando a função File(), e recebendo um resultado .F. ( False ) , sendo que o índice efetivamente existe, a aplicação Advpl iria tentar criar o novamente o índice, neste caso a  aplicação Advpl seria finalizada com uma ocorrência de erro fatal na criação de índice. 

Proteção

Implementada verificação internal na função File(), para testar  a existência do arquivo via interface de disco do c-Tree, caso a verificação via S.O. falhe. Neste caso, a função retornará .F. ( Falso ) , indicando que um arquivo não existe no disco, se o sistema operacional e a API de acesso a dados do c-Tree não têm conhecimento da existência do arquivo informado como parâmetro. 

Informação adicional
  • Proteção  realizada através da ocorrência TEC-2985
  • Esta verificação já era realizada internamente pelo Protheus Server nas builds Linux, devido a ocorrências de mesma natureza reproduzidas com acesso  compartilhado para balanceamento de carga  do rootpath do ambiente via NFS.  
  • Comportamentos desta natureza foram reproduzidos em algumas rotinas, como por exemplo a rotina de manutenção de campos do Configurador, quando o Protheus Server e o c-Tree Server eram executados em servidores distintos, usando o sistema operacional Windows2008 R2. Neste caso, a rotina era finalizada com uma ocorrência de erro fatal Advpl "Ctree Error (Disk Manager) - Create Index - Index - XXXXX already exists in Index File -YYYY  - Table File - ZZZZ "

  • Sem rótulos