RavenDB how to flush?

Basically, the EmbeddableDocumentStore takes longer to save and Index that new data, than saving and querying.

So when your tests say:-

  1. Store and SaveChanges.
  2. Load.
  3. Did this load?

The load completes much quicker than the indexing has had time to finish.

So, Like Daniel Lang said, you need to wait for stale results.

But, you'll have to do that for every query you wish to check, in your code. So, let's cheat (legally) :)

Here is how you can tell your document store to ALWAYS wait for stale results, if something queries the store:

// Initialise the Store.
var documentStore = new EmbeddableDocumentStore
                    {
                        RunInMemory = true
                    };
documentStore.Initialize();

// Force query's to wait for index's to catch up. Unit Testing only :P
documentStore.RegisterListener(new NoStaleQueriesListener());

....


#region Nested type: NoStaleQueriesListener

public class NoStaleQueriesListener : IDocumentQueryListener
{
    #region Implementation of IDocumentQueryListener

    public void BeforeQueryExecuted(IDocumentQueryCustomization queryCustomization)
    {
        queryCustomization.WaitForNonStaleResults();
    }

    #endregion
}

#endregion

Now to see this in action, check out RavenOverflow @ Github. And the Tests project in that solution has all the love you might want.


The reason is, that ravens index is too stale to return something here. You need to do this:

session.Query<File>()
    .Customize(x => x.WaitForNonStaleResultsAsOfLastWrite())
    .ToList();

For further reading, go here: http://ravendb.net/docs/client-api/querying/stale-indexes