Назад | Перейти на главную страницу

ESENT не может определить минимальный размер блока ввода-вывода

Я пытаюсь получить RavenDB работает во встроенном режиме на общем / мультитенантном веб-хосте. RavenDB полагается на API хранилища ESENT. Файловая система на хост-машинах заблокирована. Вызов RavenDB Initialize () приводит к следующей записи журнала событий

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).

Таким образом, по-видимому, выполняющемуся процессу требуется доступ для чтения некоторой информации о томе, и это отклоняется, поскольку процессу даны разрешения только на части тома, относящиеся к нему.

Кто-нибудь знает, каковы соответствующие права, и можно ли их как-то упустить?

P.S .: кто-то с большей кармой, чем я, отметьте это ravendb и esent

Чтение расширенных атрибутов на диске (корневом) требуется пользователю / пользователям на виртуальном хостинге для определения размера блока ввода-вывода.

Microsoft KB266361 показывает сообщения об ошибках для кодов ошибок ESE.

В этом случае код ошибки -1032 - «Невозможно получить доступ к файлу, файл заблокирован или используется».

Рассмотрение других продуктов Microsoft, которые активно используют ESE, например Exchange (см. http://technet.microsoft.com/en-us/library/bb218334(v=exchg.80).aspx) сообщение об ошибке больше соответствует проблеме блокировки, чем проблеме разрешения. Исходя из того, что вы работаете в многопоточной среде IIS с мультитенантностью, проблема с блокировкой снова будет весьма вероятной.

Чтобы помочь в исследовании этой проблемы, я бы предложил использовать что-то вроде Process Explorer (см. http://technet.microsoft.com/en-us/sysinternals/bb896653), чтобы узнать, кто заблокировал файл. Это может указывать на внешний источник как причину блокировки файла.

Я бы предложил изучить вызов метода Initialize(). В средах с высокой степенью параллелизма метод может быть вызван двумя отдельными потоками. Вам может понадобиться lock часть кода, отвечающая за вызов этой функции.

Если это не помогает, лучше задать вопрос с образцом кода на StackOverflow.

Надеюсь это поможет.