RavenDB C#客户端将错误抛出为无效节点标记字符:n



我正试图删除RavenDB中的一个文档,该文档有3个节点在一台机器中运行(开发设置(。以下是删除文档的代码。

public bool Remove<T>(string id) where T : new()
{
bool bResult = false;
using (var session = _session.OpenSession())
{
session.Delete(id);
session.SaveChanges();
bResult = true;
}
return bResult;
}

但它在线路session.SaveChanges();上抛出错误

无效的节点标记字符:n。。。

堆栈跟踪:

System.ArgumentException: Invalid node tag character: n
at Raven.Server.Documents.Replication.ChangeVectorParser.ThrowInvalidNodeTag(Char ch) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsReplicationChangeVectorParser.cs:line 71
at Raven.Server.Documents.Replication.ChangeVectorParser.ParseNodeTag(String changeVector, Int32 start, Int32 end) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsReplicationChangeVectorParser.cs:line 52
at Raven.Server.Documents.Replication.ChangeVectorParser.MergeChangeVector(String changeVector, List`1 entries) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsReplicationChangeVectorParser.cs:line 186
at Raven.Server.Utils.ChangeVectorUtils.MergeVectors(String vectorAstring, String vectorBstring) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerUtilsChangeVectorUtils.cs:line 213
at Raven.Server.Documents.DocumentsStorage.CreateTombstone(DocumentsOperationContext context, Slice lowerId, Int64 documentEtag, CollectionName collectionName, String docChangeVector, Int64 lastModifiedTicks, String changeVector, DocumentFlags flags, NonPersistentDocumentFlags nonPersistentFlags) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsDocumentsStorage.cs:line 1378
at Raven.Server.Documents.DocumentsStorage.Delete(DocumentsOperationContext context, Slice lowerId, String id, LazyStringValue expectedChangeVector, Nullable`1 lastModifiedTicks, String changeVector, CollectionName collectionName, NonPersistentDocumentFlags nonPersistentFlags, DocumentFlags documentFlags) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsDocumentsStorage.cs:line 1195
at Raven.Server.Documents.DocumentsStorage.Delete(DocumentsOperationContext context, String id, String expectedChangeVector) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsDocumentsStorage.cs:line 1091
at Raven.Server.Documents.Handlers.BatchHandler.MergedBatchCommand.ExecuteCmd(DocumentsOperationContext context) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsHandlersBatchHandler.cs:line 706
at Raven.Server.Documents.TransactionOperationsMerger.ExecutePendingOperationsInTransaction(List`1 pendingOps, DocumentsOperationContext context, Task previousOperation, DurationMeasurement& meter) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsTransactionOperationsMerger.cs:line 825
at Raven.Server.Documents.TransactionOperationsMerger.MergeTransactionsOnce() in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsTransactionOperationsMerger.cs:line 500
--- End of stack trace from previous location where exception was thrown ---
at Raven.Server.Documents.TransactionOperationsMerger.Enqueue(MergedTransactionCommand cmd) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsTransactionOperationsMerger.cs:line 124
at Raven.Server.Documents.Handlers.BatchHandler.BulkDocs() in C:BuildsRavenDB-Stable-4.1srcRaven.ServerDocumentsHandlersBatchHandler.cs:line 96
at Raven.Server.Routing.RequestRouter.HandlePath(RequestHandlerContext reqCtx) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerRoutingRequestRouter.cs:line 124
at Raven.Server.RavenServerStartup.RequestHandler(HttpContext context) in C:BuildsRavenDB-Stable-4.1srcRaven.ServerRavenServerStartup.cs:line 172

我昨天遇到了同样的错误。我在另一台机器上恢复了数据库,在那里我安装了全新的RavenDB,并(懒惰(命名了新的实例节点"A"。当更改向量和实例标记名称不匹配时,RavenDB当前似乎无法删除文档。

节点标签不匹配

这看起来像是代码中的一个诚实错误,而不是故意的行为。。但这只是我的猜测,因为我在4.1文档中没有发现任何关于这种行为的信息。

解决方案(如果确认不匹配(:

您可以尝试在集群中添加一个新节点,该节点具有与锁定文档的名称匹配的更改向量。

在我的情况下,我无法将独立的RavenDB配置为节点标签超过4个字符(这在Docker上没有问题(。。。那个么可能更难使数据库达到一致状态

或者尝试导出和导入数据。它修复了这个问题,因为更改向量会更新并匹配新的节点标记。

最新更新