Создание индекса RavenDB ArguementOutOfRangeException - версия 4.2.102 - PullRequest
1 голос
/ 22 апреля 2020

Я только что обновил зависимости моего проекта, и одним из них было обновление RavenDB. С 4.2.101 -> 4.2.102. После этого я получаю исключения за аргумент вне диапазона. В моей кодовой базе ничего не изменилось, и откат к версии 4.2.101 исправляет эту проблему. Я пытался найти какое-то объяснение, почему это происходит, но я ничего не могу найти. Я надеюсь, что кто-то здесь может пролить некоторый свет на эту проблему.

Исключение происходит при выполнении индекса:

Exception thrown: 'Raven.Client.Exceptions.RavenException' in System.Private.CoreLib.dll
An exception of type 'Raven.Client.Exceptions.RavenException' occurred in System.Private.CoreLib.dll but was not handled in user code
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: column
Actual value was -17.
   at Esprima.Position..ctor(Int32 line, Int32 column)
   at Esprima.ErrorHandler.CreateError(Int32 index, Int32 line, Int32 col, String description)
   at Esprima.JavaScriptParser.UnexpectedTokenError(Token token, String message)
   at Esprima.JavaScriptParser.ThrowUnexpectedToken(Token token, String message)
   at Esprima.JavaScriptParser.IsolateCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseNewExpression()
   at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseLeftHandSideExpressionAllowCall()
   at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseUpdateExpression()
   at Esprima.JavaScriptParser.ParseUnaryExpression()
   at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseExponentiationExpression()
   at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseBinaryExpression()
   at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseConditionalExpression()
   at Esprima.JavaScriptParser.ParseAssignmentExpression()
   at Esprima.JavaScriptParser.IsolateCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseAssignmentExpression()
   at Esprima.JavaScriptParser.IsolateCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseArguments()
   at Esprima.JavaScriptParser.ParseLeftHandSideExpressionAllowCall()
   at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseUpdateExpression()
   at Esprima.JavaScriptParser.ParseUnaryExpression()
   at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseExponentiationExpression()
   at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseBinaryExpression()
   at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseConditionalExpression()
   at Esprima.JavaScriptParser.ParseAssignmentExpression()
   at Esprima.JavaScriptParser.IsolateCoverGrammar[T](Func`1 parseFunction)
   at Esprima.JavaScriptParser.ParseExpression()
   at Esprima.JavaScriptParser.ParseLabelledStatement()
   at Esprima.JavaScriptParser.ParseStatement()
   at Esprima.JavaScriptParser.ParseStatementListItem()
   at Esprima.JavaScriptParser.ParseProgram(Boolean strict)
   at Raven.Server.Documents.Indexes.Static.JavaScriptIndex.ExecuteCodeAndCollectReferencedCollections(String code) in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\Documents\Indexes\Static\JavaScriptIndex.cs:line 196
   at Raven.Server.Documents.Indexes.Static.JavaScriptIndex.InitializeEngine(IndexDefinition definition) in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\Documents\Indexes\Static\JavaScriptIndex.cs:line 221
   at Raven.Server.Documents.Indexes.Static.JavaScriptIndex..ctor(IndexDefinition definition, RavenConfiguration configuration) in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\Documents\Indexes\Static\JavaScriptIndex.cs:line 54
   at Raven.Server.Documents.Indexes.Static.IndexCompilationCache.GenerateIndex(IndexDefinition definition, RavenConfiguration configuration, IndexType type) in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\Documents\Indexes\Static\IndexCompilationCache.cs:line 75
   at Raven.Server.Documents.Indexes.Static.IndexCompilationCache.GetIndexInstance(IndexDefinition definition, RavenConfiguration configuration) in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\Documents\Indexes\Static\IndexCompilationCache.cs:line 41
   at Raven.Server.Documents.Indexes.IndexStore.ValidateStaticIndex(IndexDefinition definition) in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\Documents\Indexes\IndexStore.cs:line 689
   at Raven.Server.Documents.Indexes.IndexStore.CreateIndex(IndexDefinition definition, String raftRequestId, String source) in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\Documents\Indexes\IndexStore.cs:line 560
   at Raven.Server.Documents.Handlers.Admin.AdminIndexHandler.PutInternal(Boolean validatedAsAdmin) in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\Documents\Handlers\Admin\AdminIndexHandler.cs:line 74
   at Raven.Server.Documents.Handlers.Admin.AdminIndexHandler.PutJavaScript() in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\Documents\Handlers\Admin\AdminIndexHandler.cs:line 30
   at Raven.Server.Routing.RequestRouter.HandlePath(RequestHandlerContext reqCtx) in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\Routing\RequestRouter.cs:line 184
   at Raven.Server.RavenServerStartup.RequestHandler(HttpContext context) in C:\Builds\RavenDB-Stable-4.2\42034\src\Raven.Server\RavenServerStartup.cs:line 173

Индекс:

    public class SystemMetrics_ByDate : AbstractIndexCreationTask<SystemMetrics>
    {
        public SystemMetrics_ByDate()
        {
            Map = metrics => from metric in metrics
                             orderby metric.Created descending
                             select new 
                             {
                                  metric.Created
                             };
        }
    }

SystemMetrics:

    public class SystemMetrics
    {
        public DateTimeOffset Created { get; set; } = DateTimeOffset.UtcNow;
        public CpuMetrics? Cpu { get; set; }
        public MetricData? Memory { get; set; }
        public Dictionary<string, MetricData>? Disks { get; set; }
    }

Единственная идея, которая у меня есть, это то, что ravendb изменил что-то в отношении nullables. Читая здесь: https://ravendb.net/docs/article-page/4.2/csharp/start/whats-new?page=1#42038 я нашел это: «[Индексирование] JavaScript индексы не должны индексировать неявные нулевые значения», что я считаю виновником.

У кого-нибудь есть идеи, что они подразумевают под этим? Так как мой индекс находится на свойстве Created, которое имеет значение по умолчанию.

Заранее спасибо!

...