RavenDB-4: System.ArgumentOutOfRangeException: позиция не может быть отрицательной, но была -4554 - PullRequest
0 голосов
/ 24 августа 2018

Я получил эту ошибку при попытке найти некоторые данные и их вложения RavenDB, но я не совсем понимаю, что происходит не так.

System.ArgumentOutOfRangeException: Position cannot be negative, but was -4554 
Parameter name: pos

Это запрос, который я использую при поиске данных

var data = (await Session.Query<MyClass>()
                    .Where(x => x.Workspace == CurrentWorkspace)
                    .Search(x => x.Number, $"*{SearchQuery}*", options: SearchOptions.And)
                    .OrderByDescending(x => x.CreatedAt)
                    .Skip(skip)
                    .Take(take)
                    .ToListAsync())
                .Select(x => x.LoadAttachments<MyClass>(Session))
                .Select(Mapper.Map<MyDto>);

Этот запрос используется в конечных точках search на одном из моих контроллеров API. В большинстве случаев запрос работает, как и ожидалось, и я получаю свои данные.

Но в случайное время я получаю ошибку 502 Bad Gateway на этой конкретной конечной точке, и api падает, потому что происходит сбой процесса dotnet. Он автоматически перезагружается, и следующие несколько запросов к этой конечной точке работают нормально.

Я регистрирую все необработанные исключения с помощью Rollbar, и это привело к ошибке, упомянутой выше, и этой трассировке стека.

at Sparrow.Json.BlittableJsonReaderBase.ThrowInvalidPosition(System.Int32 pos) in "C:\Builds\RavenDB-Stable-4.0\src\Sparrow\Json\BlittableJsonReaderBase.cs" line 233
at Sparrow.Json.BlittableJsonReaderObject.TryGetMember(Sparrow.StringSegment name, System.Object& result) in "C:\Builds\RavenDB-Stable-4.0\src\Sparrow\Json\BlittableJsonReaderObject.cs" line 461
at Sparrow.Json.BlittableJsonReaderObject.TryGet(Sparrow.StringSegment name, T& obj) in "C:\Builds\RavenDB-Stable-4.0\src\Sparrow\Json\BlittableJsonReaderObject.cs" line 244
at Raven.Client.Documents.Session.DocumentSessionAttachmentsBase.GetNames(System.Object entity) in "C:\Builds\RavenDB-Stable-4.0\src\Raven.Client\Documents\Session\DocumentSessionAttachmentsBase.cs" line 27
at MyProject.Core.Storage.DocumentStore.DocumentStoreAttachmentExtensions.LoadAttachments(MyProject.Core.Storage.DocumentStore.IDocumentStoreAttachment instance, Raven.Client.Documents.Session.IAsyncDocumentSession session) in "/Users/dtaalbers/Work/dtaalbers/Repos D/MyProject-api/src/MyProject.Core.Storage/DocumentStore/DocumentStoreAttachmentExtensions.cs" line 10

Вот расширение, которое я использую для извлечения вложений RavenDB:

public static T LoadAttachments<T>(this IDocumentStoreAttachment instance, IAsyncDocumentSession session)
        {
            var attachments = session.Advanced.Attachments.GetNames(instance).ToList();

            if (attachments.Any())
            {
                instance.Attachments = attachments
                    .Where(x => !x.Name.Contains("thumb"))
                    .Select(x => new DocumentStoreAttachment()
                {
                    ContentType = x.ContentType,
                    Hash = x.Hash,
                    Name = x.Name,
                    Size = x.Size
                });
            }

            return (T) instance;
        }

Может ли это произойти из-за поврежденных данных во вложениях RavenDB?

Кроме того, каждый раз, когда я получаю 502, появляются некоторые журналы в средстве просмотра событий моего сервера Windows.

enter image description here

Топ ошибок регистрирует это:

Faulting application name: dotnet.exe, version: 2.1.26629.5, time stamp: 0x5b36971d
Faulting module name: coreclr.dll, version: 4.6.26628.5, time stamp: 0x5b356310
Exception code: 0xc0000005
Fault offset: 0x00000000001adaf7
Faulting process id: 0x12cc
Faulting application start time: 0x01d43964c4023b34
Faulting application path: C:\Program Files\dotnet\dotnet.exe
Faulting module path: C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.2\coreclr.dll
Report Id: a6168db0-a617-11e8-8135-a5deffecc34e
Faulting package full name: 
Faulting package-relative application ID: 

Нижняя ошибка регистрирует это;

    Application: dotnet.exe
CoreCLR Version: 4.6.26628.5
Description: The process was terminated due to an internal error in the .NET Runtime at IP 00007FFD8250DAF7 (00007FFD82360000) with exit code c0000005.

Я не уверен, что они связаны, но все это происходит на одной и той же конечной точке API и в одно и то же время. К сожалению, я не могу найти причину этого самостоятельно.

Любая помощь приветствуется!

EDIT:

Я использовал версию сервера RavenDB 4.0.5. Но я обновил его до 4.1.0-rc-41000 несколько дней назад. Ошибка возникает в обеих версиях.

...