ESENT falha ao determinar o tamanho mínimo do bloco de E / S

4

Estou tentando obter o RavenDB em execução no modo incorporado em um host compartilhado / multilocatário. O RavenDB depende da API de armazenamento do ESENT. O sistema de arquivos nas máquinas de hospedagem está bloqueado. A chamada RavenDB Initialize () resulta na seguinte entrada do log de eventos

Raven (20604) D:\Path\To\Website\App_Data\RavenDB\Data52e0e402-79d7-4f47-a219-3d1e2e73321c: An attempt to determine the minimum I/O block size for the volume "D:\" containing "D:\Path\To\Website\App_Data\RavenDB\logs\" failed with system error 5 (0x00000005): "Access is denied. ".  The operation will fail with error -1032 (0xfffffbf8).

Portanto, presumivelmente, o processo em execução precisa de acesso para ler algumas informações de volume e isso é negado porque o processo recebe apenas permissões para as partes do volume relevantes para ele.

Alguém sabe quais são os direitos relevantes e se eles podem ser omitidos de alguma forma?

P.S .: alguém com mais carma do que eu, marque isso com ravendb e esent

    
por friism 21.07.2011 / 07:22

2 respostas

0

O KB266361 da Microsoft  mostra mensagens de erro para códigos de erro do ESE.

Neste caso, o código de erro -1032 é “Não é possível acessar o arquivo, o arquivo está bloqueado ou em uso”.

Observando outros produtos da Microsoft que usam muito o ESE, como o Exchange (consulte link ) a mensagem de erro parece ser mais consistente com um problema de bloqueio do que um problema de permissão. Com base em que você está executando em um ambiente altamente multi-threaded do IIS com multi-tenancy este problema de bloqueio seria novamente altamente provável.

Para ajudar a investigar esse problema, sugiro usar algo como o Process Explorer (consulte link ) para localizar quem tem um bloqueio no arquivo. Isso pode mostrar uma fonte externa como a causa do bloqueio de arquivos.

Eu sugeriria investigar o método chamando Initialize() . Em ambientes de alta simultaneidade, pode ser possível que o método seja chamado por dois threads separados. Você pode precisar lock da seção de código responsável por esta chamada de função.

Se isso não ajudar, talvez seja melhor fazer a pergunta com um exemplo de código no StackOverflow.

Espero que isso ajude.

    
por 17.05.2012 / 10:52
0

A leitura de atributos estendidos na unidade (raiz) é necessária para usuários / usuários em hospedagem compartilhada para determinar o tamanho do bloco de E / S.

    
por 28.05.2013 / 12:25