Я только что обновил зависимости моего проекта, и одним из них было обновление 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, которое имеет значение по умолчанию.
Заранее спасибо!