RavenDb:文档刷新功能在@refresh 标志指定的时间或之后不 运行
RavenDb: Document Refresh feature does not run at nor after the specified time by @refresh flag
我需要在一段时间后将文档标记为过期,因此我正在尝试使用@refresh 功能重新运行 订阅并计算我的'expired' 标志。我知道有 'Document expiration' 功能,但是这个功能删除了我不需要的数据。
我已在设置中启用刷新功能,并在所需文档的元数据中添加@refresh UTC 日期时间。例如我手动添加了这个文档:
{
"Name": "My data",
"@metadata": {
"@collection": "Testing",
"@refresh": "2021-04-30T07:41:35.4845961Z"
}
}
看来我面临着不确定的行为 - 有时会处理刷新,有时不会。我尝试了不同的时间组合并通过代码或通过 Raven Studio 进行设置。
Refresh interval is set to refresh but still says "in less than a minute"
我正在使用
- 社区许可证(此处未提及文档刷新,但我也没有看到任何其他许可证也提及它)
community license extensions
- 尝试了 RavenDB 的更多版本,结果相同(5.1.7. 看起来更有前途,因为它工作了一段时间但过了一会儿就停止了):
- 4.2.111 server/studio 版本 Docker Windows 10
- 5.1.7 server/studio 版本
- C#RavenDB.Client5.1.6
在错误跟踪器中未找到相关问题
https://issues.hibernatingrhinos.com/issues/RavenDB?q=document%20refresh
知道要检查什么或可能是什么情况吗?
编辑:将日志记录到控制台后,我发现了一些错误日志。看起来像
RavendbProject, Raven.Server.Documents.Expiration.ExpiredDocumentsCleaner, Failed to refresh documents on RavendbProject which are older than 05/17/2021 09:48:47, EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object.
RavendbProject | at Sparrow.Server.ByteStringContext`1.From(String value, ByteStringType type, ByteString& str) in C:\Builds\RavenDB-Stable-5.1024\src\Sparrow.Server\ByteString.cs:line 1297
RavendbProject | at Raven.Server.Documents.DocumentPutAction.PutDocument(DocumentsOperationContext context, String id, String expectedChangeVector, BlittableJsonReaderObject document, Nullable`1 lastModifiedTicks, String changeVector, DocumentFlags flags, NonPersistentDocumentFlags nonPersistentFlags) in C:\Builds\RavenDB-Stable-5.1024\src\Raven.Server\Documents\DocumentPutAction.cs:line 190
另外值得一提的是,我的文档存储在 ClusterWide 事务中,因此我可以在我的一个文档中看到相应的标志:
"@flags": "FromClusterTransaction",
我目前的怀疑是,可能是其中一个文件阻止了其他文件的刷新。删除cluster-transaction文档后,collection中的其他文档被刷新
与通过集群事务添加的文档相关的错误,目前的解决方法是不使用集群事务。
我已经在错误跟踪器上打开了一个问题,
https://issues.hibernatingrhinos.com/issue/RavenDB-16710
我需要在一段时间后将文档标记为过期,因此我正在尝试使用@refresh 功能重新运行 订阅并计算我的'expired' 标志。我知道有 'Document expiration' 功能,但是这个功能删除了我不需要的数据。
我已在设置中启用刷新功能,并在所需文档的元数据中添加@refresh UTC 日期时间。例如我手动添加了这个文档:
{
"Name": "My data",
"@metadata": {
"@collection": "Testing",
"@refresh": "2021-04-30T07:41:35.4845961Z"
}
}
看来我面临着不确定的行为 - 有时会处理刷新,有时不会。我尝试了不同的时间组合并通过代码或通过 Raven Studio 进行设置。
Refresh interval is set to refresh but still says "in less than a minute"
我正在使用
- 社区许可证(此处未提及文档刷新,但我也没有看到任何其他许可证也提及它) community license extensions
- 尝试了 RavenDB 的更多版本,结果相同(5.1.7. 看起来更有前途,因为它工作了一段时间但过了一会儿就停止了):
- 4.2.111 server/studio 版本 Docker Windows 10
- 5.1.7 server/studio 版本
- C#RavenDB.Client5.1.6
在错误跟踪器中未找到相关问题 https://issues.hibernatingrhinos.com/issues/RavenDB?q=document%20refresh
知道要检查什么或可能是什么情况吗?
编辑:将日志记录到控制台后,我发现了一些错误日志。看起来像
RavendbProject, Raven.Server.Documents.Expiration.ExpiredDocumentsCleaner, Failed to refresh documents on RavendbProject which are older than 05/17/2021 09:48:47, EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object.
RavendbProject | at Sparrow.Server.ByteStringContext`1.From(String value, ByteStringType type, ByteString& str) in C:\Builds\RavenDB-Stable-5.1024\src\Sparrow.Server\ByteString.cs:line 1297
RavendbProject | at Raven.Server.Documents.DocumentPutAction.PutDocument(DocumentsOperationContext context, String id, String expectedChangeVector, BlittableJsonReaderObject document, Nullable`1 lastModifiedTicks, String changeVector, DocumentFlags flags, NonPersistentDocumentFlags nonPersistentFlags) in C:\Builds\RavenDB-Stable-5.1024\src\Raven.Server\Documents\DocumentPutAction.cs:line 190
另外值得一提的是,我的文档存储在 ClusterWide 事务中,因此我可以在我的一个文档中看到相应的标志:
"@flags": "FromClusterTransaction",
我目前的怀疑是,可能是其中一个文件阻止了其他文件的刷新。删除cluster-transaction文档后,collection中的其他文档被刷新
与通过集群事务添加的文档相关的错误,目前的解决方法是不使用集群事务。
我已经在错误跟踪器上打开了一个问题, https://issues.hibernatingrhinos.com/issue/RavenDB-16710