Search code examples
ravendbravendb-studio

RavenDb: Document Refresh feature does not run at nor after the specified time by @refresh flag


I need to mark documets as expired after some time and therefore I am trying to use @refresh feature to re-run subscription and to compute my 'expired' flag. I know there is 'Document expiration' feature but this one removes data which I don't want.

I have turned Refresh feature in settings and added @refresh UTC datetime in metadata for required documents. For example I added manually this document:

{
    "Name": "My data",
    "@metadata": {
        "@collection": "Testing",
        "@refresh": "2021-04-30T07:41:35.4845961Z"
    }
}

It looks like I am facing non deterministic behavior - sometimes refresh is processed sometimes not. I tried with different combinations of times and set through code or via Raven Studio.

Refresh interval is set to refresh but still says "in less than a minute"

I am using

  • Community license (Document refresh not mentioned here, but I don't see it mentioned for any other licenses as well) community license extensions
  • tried more vresions of RavenDB with same result (5.1.7. was looking more promising as it worked for some time but after a while stopped):
    • 4.2.111 server/studio version in Docker on Windows 10
    • 5.1.7 server/studio version
  • C# RavenDB.Client 5.1.6

Did not find related issue in bug tracker https://issues.hibernatingrhinos.com/issues/RavenDB?q=document%20refresh

Any ideas what to check or what might be the case?


EDIT: After turned logging into console I found some error log. It looks like

 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.1\51024\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.1\51024\src\Raven.Server\Documents\DocumentPutAction.cs:line 190

Also worth mentioning is that my document was stored in ClusterWide transaction and thus I can see in one of my documents corresponding flag:

"@flags": "FromClusterTransaction",

My current suspicion is that it may happen that one of these documents prevented other documents from being refreshed. After deleting cluster-transaction document, other documents in collection were refreshed


Solution

  • The bug related to document that was added via cluster transaction, the workaround for now would be to not use cluster transaction.

    I have opened an issue on bug tracker, https://issues.hibernatingrhinos.com/issue/RavenDB-16710