O caso de Offline Files

Olá a todos!

Gostaria de partilhar convosco um cenário de troubleshoot de Offline Files que recentemente trabalhei com um dos nossos clientes.

Por forma a enquadrar melhor a informação que vai ser apresentada, será útil compreender melhor a funcionalidade Offline Files do Windows.

 1. CSC Driver - Este driver é o interface entre o redirector de SMB e a cache local de ficheiros no cliente. É responsável for fornecer a transparência necessária para determinado caminho UNC entre o modo offline e o modo online de forma a que os processos que estejam em execução no cliente não necessitem de estar cientes das transições entre online e offline. Este driver é implementado em CSC.SYS.

 2. Serviço de Offline Files - Este serviço chamado CSCService contém, entre outras coisas, o motor de sincronização, mecanismo de eventos e a implementação da API pública para gestão da cache de Offline Files. O serviço CSC é implementado em CSCSVC.DLL. A sua API está disponível através de CSCOBJ.DLL (para objectos COM) e CSCAPI.DLL (Win32).

O ficheiro CSCOBJ.DLL implementa uma política de grupo “Client Side Extension” (CSE) que desempenha um papel importante na aplicação das politicas de grupo para Offline Files.

3. Interface de Utilizador dos Offline Files - Trata-se de um conjunto de componentes que expõe a funcionalidade de Offline Files na interface de utilizador no Windows.

a. Applet do Control panel

b. Shell Folder da cache de Offline Files

c. Extensão de Context menu

d. Extensão de Icon overlay

e. Extensão da Property page

f. Property handlers (SHELL32.DLL)

g. Botões da Command bar (SHELL32.DLL)

 4. Sync Center Sync Handler - Este componente integra com o Sync Center por forma a apresentar a cache de Offline Files como um sync “handler” e cada entrada no formato \\server\share presente na cache como um sync “item” associado a cada handler. Este componente está presente em CSCUI.DLL.

O conjunto de todos estes componentes forma a funcionalidade que conhecemos como “Offline Files”.

Um aspecto importante a ter em conta é facto dos Offline Files não funcionarem no caso do oplock estar desactivado - tanto no servidor de ficheiros como no próprio cliente. Por omissão esta funcionalidade está activada.

Sugiro a leitura do seguinte artigo onde é discutido com mais detalhe o Opportunistic lock (oplock):

https://blogs.msdn.com/b/openspecification/archive/2009/05/22/client-caching-features-oplock-vs-lease.aspx

 Passo a descrever o cenário comum a este e outros problemas similares :

 - Servidor de ficheiros Windows 200x e funcionalidade de Offline Files activada na partilha do file server

- Cliente Windows Vista SP2/Windows 7 com a funcionalidade de Offline Files em uso

- Microsoft Office 2003

Tendo em conta o cenário anterior, quando o cliente Windows abre um determinado ficheiro de Office, na altura em que é gravado o ficheiro (ou feita uma sincronização dos Offline Files) pode ficar presente um ficheiro com a extensão .tmp no servidor de ficheiros, em vez do ficheiro Office original.

No cliente continuamos a ver o ficheiro que acabámos de editar.

O driver de CSC tem uma funcionalidade chamada “SparseExclusionList” e ajuda a resolver este tipo de situações.

Esta funcionalidade afecta a forma como o driver de CSC funciona com opportunistic locks(OpLocks) no servidor de ficheiros.

Sem querer entrar em muitos mais detalhes, o OpLock é a forma utilizada pelo cliente e pelo servidor para comunicarem acerca da partilha de um ficheiro localizado num determinado servidor.

Os clientes podem “pedir” um OpLock ao servidor cada vez que um ficheiro é aberto e enquanto esse OpLock permanecer válido o cliente é livre de fazer leituras e escritas numa cache local, sabendo que nenhum outro processo está a ler ou a escrever para esse ficheiro em particular no servidor de ficheiros.

Assim que o ficheiro for fechado no cliente, todas as alterações podem ser novamente enviadas para o servidor.

Se outro handler for aberto, a partir do mesmo ou de outro cliente, o OpLock pode ser “libertado”.

Esta “quebra” de OpLock notifica ao dono do OpLock que este pode ser “libertado”. Esta libertação notifica quem detém o lock que tem de parar de manter informação em cache localmente e enviar as alterações para o servidor imediatamente.

OK, e agora, o que faz este setting “SparseExclusionList”?

Sempre que o driver CSC no cliente é notificado sobre uma “quebra” de Oplock , o comportamento por omissão é enviar todas as alterações locais para o servidor e marcar a cópia local como “sparse” no filesystem de forma a que o agente CSC preencha o conteúdo restante do ficheiro local com o que se encontra na cópia remota do servidor.

Para alguns tipos de ficheiros, e para as próprias aplicações que os usam, este tipo de comportamento não é o desejado.

Esta funcionalidade contém uma lista de extensões que estão excluídas deste tipo comportamento e pode ser localizada na seguinte chave do registry:

HKLM\Software\Microsoft\Windows\CurrentVersion\NetCache\SparseExclusionList

Registry Value Type: REG_SZ

VARIANT Value Type: VT_BSTR

Value Range: Lista de extensões de ficheiros delimitada por ponto e vírgula. i.e. “*.DAT;*.BOX;*.XYZ”

Default Value: O valor por omissão é o seguinte.

"*.doc;*.xls;*.ppt;*.vsd;*.tmp;*.pps;*.msi;*.mst;*.dot;*.opt;*.mpp;*.dts;*.vsmacros;*.mso;*.suo;*.msg;*.est;"

 Notas adicionais:

- Se este valor for definido no registry, passa a conter a lista de ficheiros que serão excluídos da marcação como sparse sempre que é “quebrado” um OpLock e substitui a lista incluída por omissão.

- Sempre que se pretender incluir uma extensão a esta lista que vem por omissão, o valor de registry tem de conter a lista por omissão com a nova extensão incluída. Se for para remover, a chave de registry deve incluir todas as entradas que estão presentes por omissão menos a que se pretende eliminar.

- Esta funcionalidade pode ser ajustada da forma que for mais conveniente e é recomendado que sejam feitos testes antes de ser aplicado a todos os clientes.

 Solução:

Após editar a lista de extensões o problema ficou resolvido e os ficheiros de Office voltaram a ser gravados com sucesso no servidor de ficheiros e a funcionalidade de Offline Files foi mantida activa e a funcionar.

Uma outra variante deste tipo de problema acontece quando um utilizador (a utilizar Offline Files) abre um ficheiro de Office e outro utilizador abre o mesmo ficheiro.

Neste caso poderá aparecer um aviso do tipo “File in Use”.

SF