Raven.Client.Exceptions.RavenException: System.IndexOutOfRangeException: Index was outside the bounds of the array.

32 views
Skip to first unread message

Zak Stam

unread,
Jan 26, 2024, 4:30:28 AMJan 26
to RavenDB - an awesome database
This started coming up when i switched to Corax from Lucene:
An unhandled exception has occurred while executing the request.
      Raven.Client.Exceptions.RavenException: System.IndexOutOfRangeException: Index was outside the bounds of the array.
         at Corax.Querying.IndexSearcher.<SearchQuery>g__GetTermType|83_1(ReadOnlySpan`1 termValue) in D:\Builds\RavenDB-Stable-6.0\60008\src\Corax\Querying\IndexSearcher.Search.cs:line 132
         at Corax.Querying.IndexSearcher.SearchQuery(FieldMetadata field, IEnumerable`1 values, Operator operator, CancellationToken& cancellationToken) in D:\Builds\RavenDB-Stable-6.0\60008\src\Corax\Querying\IndexSearcher.Search.cs:line 127
         at Raven.Server.Documents.Indexes.Persistence.Corax.CoraxQueryBuilder.HandleSearch(Parameters builderParameters, MethodExpression expression, Nullable`1 proximity)
         at Raven.Server.Documents.Indexes.Persistence.Corax.CoraxQueryBuilder.ToCoraxQuery(Parameters builderParameters, QueryExpression expression, StreamingOptimization& leftOnlyOptimization, Boolean exact, Nullable`1 proximity) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Persistence\Corax\CoraxQueryBuilder.cs:line 576
         at Raven.Server.Documents.Indexes.Persistence.Corax.CoraxQueryBuilder.ToCoraxQuery(Parameters builderParameters, QueryExpression expression, StreamingOptimization& leftOnlyOptimization, Boolean exact, Nullable`1 proximity) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Persistence\Corax\CoraxQueryBuilder.cs:line 576
         at Raven.Server.Documents.Indexes.Persistence.Corax.CoraxQueryBuilder.BuildQuery(Parameters builderParameters, OrderMetadata[]& sortMetadata) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Persistence\Corax\CoraxQueryBuilder.cs:line 283
         at Raven.Server.Documents.Indexes.Persistence.Corax.CoraxIndexReadOperation.QueryInternal[THighlighting,TQueryFilter,THasProjection,TDistinct](IndexQueryServerSide query, QueryTimingsScope queryTimings, FieldsToFetch fieldsToFetch, Reference`1 totalResults, Reference`1 skippedResults, Reference`1 scannedDocuments, IQueryResultRetriever retriever, DocumentsOperationContext documentsContext, Func`2 getSpatialField, CancellationToken token)+MoveNext() in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Persistence\Corax\CoraxIndexReadOperation.cs:line 832
         at Raven.Server.Documents.Indexes.Index.QueryInternal[TQueryResult](TQueryResult resultToFill, IndexQueryServerSide query, QueryOperationContext queryContext, Boolean pulseDocsReadingTransaction, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Index.cs:line 3545
         at Raven.Server.Documents.Indexes.Index.QueryInternal[TQueryResult](TQueryResult resultToFill, IndexQueryServerSide query, QueryOperationContext queryContext, Boolean pulseDocsReadingTransaction, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Index.cs:line 3545
         at Raven.Server.Documents.Indexes.Index.Query(IndexQueryServerSide query, QueryOperationContext queryContext, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Index.cs:line 3292
         at Raven.Server.Documents.Queries.Dynamic.DynamicQueryRunner.ExecuteQuery(IndexQueryServerSide query, QueryOperationContext queryContext, Nullable`1 existingResultEtag, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Queries\Dynamic\DynamicQueryRunner.cs:line 69
         at Raven.Server.Documents.Queries.QueryRunner.ExecuteQuery(IndexQueryServerSide query, QueryOperationContext queryContext, Nullable`1 existingResultEtag, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Queries\QueryRunner.cs:line 99
         at Raven.Server.Documents.Handlers.Processors.Queries.DatabaseQueriesHandlerProcessorForGet.GetQueryResultsAsync(IndexQueryServerSide query, QueryOperationContext queryContext, Nullable`1 existingResultEtag, Boolean metadataOnly, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Handlers\Processors\Queries\DatabaseQueriesHandlerProcessorForGet.cs:line 53
         at Raven.Server.Documents.Handlers.Processors.Queries.AbstractQueriesHandlerProcessorForGet`4.ExecuteAsync() in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Handlers\Processors\Queries\AbstractQueriesHandlerProcessorForGet.cs:line 219
         at Raven.Server.Documents.Handlers.QueriesHandler.Post() in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Handlers\QueriesHandler.cs:line 15
         at Raven.Server.Routing.RequestRouter.HandlePath(RequestHandlerContext reqCtx) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Routing\RequestRouter.cs:line 394
         at Raven.Server.RavenServerStartup.RequestHandler(HttpContext context) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\RavenServerStartup.cs:line 254
       ---> System.IndexOutOfRangeException: System.IndexOutOfRangeException: Index was outside the bounds of the array.
         at Corax.Querying.IndexSearcher.<SearchQuery>g__GetTermType|83_1(ReadOnlySpan`1 termValue) in D:\Builds\RavenDB-Stable-6.0\60008\src\Corax\Querying\IndexSearcher.Search.cs:line 132
         at Corax.Querying.IndexSearcher.SearchQuery(FieldMetadata field, IEnumerable`1 values, Operator operator, CancellationToken& cancellationToken) in D:\Builds\RavenDB-Stable-6.0\60008\src\Corax\Querying\IndexSearcher.Search.cs:line 127
         at Raven.Server.Documents.Indexes.Persistence.Corax.CoraxQueryBuilder.HandleSearch(Parameters builderParameters, MethodExpression expression, Nullable`1 proximity)
         at Raven.Server.Documents.Indexes.Persistence.Corax.CoraxQueryBuilder.ToCoraxQuery(Parameters builderParameters, QueryExpression expression, StreamingOptimization& leftOnlyOptimization, Boolean exact, Nullable`1 proximity) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Persistence\Corax\CoraxQueryBuilder.cs:line 576
         at Raven.Server.Documents.Indexes.Persistence.Corax.CoraxQueryBuilder.ToCoraxQuery(Parameters builderParameters, QueryExpression expression, StreamingOptimization& leftOnlyOptimization, Boolean exact, Nullable`1 proximity) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Persistence\Corax\CoraxQueryBuilder.cs:line 576
         at Raven.Server.Documents.Indexes.Persistence.Corax.CoraxQueryBuilder.BuildQuery(Parameters builderParameters, OrderMetadata[]& sortMetadata) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Persistence\Corax\CoraxQueryBuilder.cs:line 283
         at Raven.Server.Documents.Indexes.Persistence.Corax.CoraxIndexReadOperation.QueryInternal[THighlighting,TQueryFilter,THasProjection,TDistinct](IndexQueryServerSide query, QueryTimingsScope queryTimings, FieldsToFetch fieldsToFetch, Reference`1 totalResults, Reference`1 skippedResults, Reference`1 scannedDocuments, IQueryResultRetriever retriever, DocumentsOperationContext documentsContext, Func`2 getSpatialField, CancellationToken token)+MoveNext() in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Persistence\Corax\CoraxIndexReadOperation.cs:line 832
         at Raven.Server.Documents.Indexes.Index.QueryInternal[TQueryResult](TQueryResult resultToFill, IndexQueryServerSide query, QueryOperationContext queryContext, Boolean pulseDocsReadingTransaction, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Index.cs:line 3545
         at Raven.Server.Documents.Indexes.Index.QueryInternal[TQueryResult](TQueryResult resultToFill, IndexQueryServerSide query, QueryOperationContext queryContext, Boolean pulseDocsReadingTransaction, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Index.cs:line 3545
         at Raven.Server.Documents.Indexes.Index.Query(IndexQueryServerSide query, QueryOperationContext queryContext, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Indexes\Index.cs:line 3292
         at Raven.Server.Documents.Queries.Dynamic.DynamicQueryRunner.ExecuteQuery(IndexQueryServerSide query, QueryOperationContext queryContext, Nullable`1 existingResultEtag, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Queries\Dynamic\DynamicQueryRunner.cs:line 69
         at Raven.Server.Documents.Queries.QueryRunner.ExecuteQuery(IndexQueryServerSide query, QueryOperationContext queryContext, Nullable`1 existingResultEtag, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Queries\QueryRunner.cs:line 99
         at Raven.Server.Documents.Handlers.Processors.Queries.DatabaseQueriesHandlerProcessorForGet.GetQueryResultsAsync(IndexQueryServerSide query, QueryOperationContext queryContext, Nullable`1 existingResultEtag, Boolean metadataOnly, OperationCancelToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Handlers\Processors\Queries\DatabaseQueriesHandlerProcessorForGet.cs:line 53
         at Raven.Server.Documents.Handlers.Processors.Queries.AbstractQueriesHandlerProcessorForGet`4.ExecuteAsync() in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Handlers\Processors\Queries\AbstractQueriesHandlerProcessorForGet.cs:line 219
         at Raven.Server.Documents.Handlers.QueriesHandler.Post() in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Documents\Handlers\QueriesHandler.cs:line 15
         at Raven.Server.Routing.RequestRouter.HandlePath(RequestHandlerContext reqCtx) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\Routing\RequestRouter.cs:line 394
         at Raven.Server.RavenServerStartup.RequestHandler(HttpContext context) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Server\RavenServerStartup.cs:line 254
         --- End of inner exception stack trace ---
         at Raven.Client.Exceptions.ExceptionDispatcher.Throw(JsonOperationContext context, HttpResponseMessage response) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Client\Exceptions\ExceptionDispatcher.cs:line 114
         at Raven.Client.Exceptions.ExceptionDispatcher.Throw(JsonOperationContext context, HttpResponseMessage response) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Client\Exceptions\ExceptionDispatcher.cs:line 118
         at Raven.Client.Http.Behaviors.DefaultCommandResponseBehavior.TryHandleUnsuccessfulResponseAsync[TResult](JsonOperationContext context, RavenCommand`1 command, HttpResponseMessage response) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Client\Http\Behaviors\DefaultCommandResponseBehavior.cs:line 52
         at Raven.Client.Http.RequestExecutor.HandleUnsuccessfulResponse[TResult](ServerNode chosenNode, Nullable`1 nodeIndex, JsonOperationContext context, RavenCommand`1 command, HttpRequestMessage request, HttpResponseMessage response, String url, SessionInfo sessionInfo, Boolean shouldRetry, CancellationToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Client\Http\RequestExecutor.cs:line 1639
         at Raven.Client.Http.RequestExecutor.ExecuteAsync[TResult](ServerNode chosenNode, Nullable`1 nodeIndex, JsonOperationContext context, RavenCommand`1 command, Boolean shouldRetry, SessionInfo sessionInfo, CancellationToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Client\Http\RequestExecutor.cs:line 1018
         at Raven.Client.Http.RequestExecutor.ExecuteAsync[TResult](ServerNode chosenNode, Nullable`1 nodeIndex, JsonOperationContext context, RavenCommand`1 command, Boolean shouldRetry, SessionInfo sessionInfo, CancellationToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Client\Http\RequestExecutor.cs:line 1043
         at Raven.Client.Documents.Session.AsyncDocumentQuery`1.ExecuteActualQueryAsync(CancellationToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Client\Documents\Session\AsyncDocumentQuery.cs:line 1000
         at Raven.Client.Documents.Session.AsyncDocumentQuery`1.InitAsync(CancellationToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Client\Documents\Session\AsyncDocumentQuery.cs:line 990
         at Raven.Client.Documents.Session.AsyncDocumentQuery`1.ExecuteQueryOperationInternal(Nullable`1 take, CancellationToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Client\Documents\Session\AsyncDocumentQuery.cs:line 945
         at Raven.Client.Documents.Session.AsyncDocumentQuery`1.ExecuteQueryOperation(Nullable`1 take, CancellationToken token) in D:\Builds\RavenDB-Stable-6.0\60008\src\Raven.Client\Documents\Session\AsyncDocumentQuery.cs:line 927
         at IO.Monolith.Features.Administrator.Customers.AdvancedSearchForCustomer.HandleAsync(AdvancedSearchForCustomerRequest req, CancellationToken ct) in C:\Godot\4.0\Projects\GitLab\io.bakcend.monolith\IO.Monolith\Features\Administrator\Customers\Queries\AdvancedSearchForCustomer.cs:line 30    
         at FastEndpoints.Endpoint`2.ExecAsync(CancellationToken ct)
         at FastEndpoints.Endpoint`2.ExecAsync(CancellationToken ct)
         at NSwag.AspNetCore.Middlewares.SwaggerUiIndexMiddleware.Invoke(HttpContext context)
         at NSwag.AspNetCore.Middlewares.RedirectToIndexMiddleware.Invoke(HttpContext context)
         at NSwag.AspNetCore.Middlewares.OpenApiDocumentMiddleware.Invoke(HttpContext context)
         at NSwag.AspNetCore.Middlewares.OpenApiDocumentMiddleware.Invoke(HttpContext context)
         at NSwag.AspNetCore.Middlewares.OpenApiDocumentMiddleware.Invoke(HttpContext context)
         at NSwag.AspNetCore.Middlewares.OpenApiDocumentMiddleware.Invoke(HttpContext context)
         at NSwag.AspNetCore.Middlewares.OpenApiDocumentMiddleware.Invoke(HttpContext context)
         at NSwag.AspNetCore.Middlewares.OpenApiDocumentMiddleware.Invoke(HttpContext context)
         at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
         at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
         at Sentry.AspNetCore.SentryTracingMiddleware.InvokeAsync(HttpContext context)
         at Sentry.AspNetCore.SentryTracingMiddleware.InvokeAsync(HttpContext context)
         at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
fail: Hangfire.Processing.BackgroundExecution[0]
      Execution DelayedJobScheduler is in the Failed state now due to an exception, execution will be retried no more than in 00:00:04
      Hangfire.Storage.DistributedLockTimeoutException: Timeout expired. The timeout elapsed prior to obtaining a distributed lock on the 'Could not place a lock on the resource 'HangFire:locks:schedulepoller': The lock request timed out.' resource.
         at Hangfire.LiteDB.LiteDbDistributedLock.Acquire(TimeSpan timeout)
         at Hangfire.LiteDB.LiteDbDistributedLock..ctor(String resource, TimeSpan timeout, HangfireDbContext database, LiteDbStorageOptions storageOptions)
         at Hangfire.LiteDB.LiteDbConnection.AcquireDistributedLock(String resource, TimeSpan timeout)
         at Hangfire.Server.DelayedJobScheduler.UseConnectionDistributedLock[T](JobStorage storage, Func`2 action)
         at Hangfire.Server.DelayedJobScheduler.EnqueueNextScheduledJobs(BackgroundProcessContext context)
         at Hangfire.Server.DelayedJobScheduler.Execute(BackgroundProcessContext context)
         at Hangfire.Server.BackgroundProcessDispatcherBuilder.ExecuteProcess(Guid executionId, Object state)
         at Hangfire.Processing.BackgroundExecution.Run(Action`2 callback, Object state)

This is my query:
        var session = _store.OpenAsyncSession();
        var userList = await session.Query<Customer>()
            .Search(x => x.Info.Firstname, $"{req.FirstName}*")
            .Search(x => x.Info.Lastname, $"*{req.LastName}*", @operator: SearchOperator.Or)
            .Search(x => x.Info.Email, $"*{req.Email}*", @operator: SearchOperator.Or)
            .Take(30)
            .OrderByScore()
            .ThenBy(dto => dto.Id)
            .OfType<CustomerSearchDto>()
            // .Select(customer => new CustomerSearchDto
            // {
            //     Credentials = { Username = customer.Credentials.Username }
            // })
            .ToListAsync(ct);


I have tried:
- Resetting the index
- Deleting the index
- Manually creating the index (it is auto-generated right now)

What's interesting is that the same query from RQL seems to work so this might be a client bug.

RQL:
from index 'Auto/Customers/ByCredentials.UsernameAndSearch(Info.Email)AndSearch(Info.Firstname)AndSearch(Info.Lastname)'
where (search(Info.Email, "*zak*") or search(Info.Firstname, "", or) or search(Info.Lastname, "", or))

Custom index:
    public class Advanced_Search_Customer : AbstractIndexCreationTask<Customer>
    {
        public Advanced_Search_Customer()
        {
            Map = customers => from customer in customers
                select new
                {
                    Firstname = customer.Info.Firstname,
                    Lastname = customer.Info.Lastname,
                    Email = customer.Info.Email
                };
           
            Indexes.Add(x => x.Info.Firstname, FieldIndexing.Search);
            Indexes.Add(x => x.Info.Lastname, FieldIndexing.Search);
            Indexes.Add(x => x.Info.Email, FieldIndexing.Search);
           
        }
    }

Oren Eini

unread,
Jan 26, 2024, 4:32:29 AMJan 26
to RavenDB - an awesome database
If you run ToString() on the query, what are you getting?
The error itself comes from the server side, so looks like a bug in Corax.

Can you send us a way to reproduce this?

Oren Eini

unread,
Jan 26, 2024, 4:32:50 AMJan 26
to RavenDB - an awesome database
Also, this is archived, can you post this here: https://github.com/ravendb/ravendb/discussions/
Reply all
Reply to author
Forward
0 new messages