/// <summary> /// Checkpoint is a safe point to clear cache pages without loose pages references. /// Is called after each document insert/update/deleted/indexed/fetch from query /// </summary> public void CheckPoint() { // works only when journal are enabled if (_disk.IsJournalEnabled && _pager.CachePageCount >= _cacheSize) { _log.Write(Logger.CACHE, "cache checkpoint reached at {0} pages in cache", _pager.CachePageCount); // write all dirty pages in data file (journal foreach (var page in _pager.GetDirtyPages()) { // first write in journal file original data _disk.WriteJournal(page.PageID, page.DiskData); // then writes no datafile new changed pages _disk.WritePage(page.PageID, page.WritePage()); } // empty all cache pages _pager.ClearCache(); } }