示例#1
0
        /// <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();
            }
        }