Beispiel #1
0
 private void OnEvictionCompleted(object sender, EventArgs args)
 {
     if (_backgroundPageWriter != null)
     {
         // Flush any evicted writable pages to disk
         _backgroundPageWriter.Flush();
     }
 }
 public void Commit(ulong commitId, BrightstarProfiler profiler)
 {
     if (CanWrite)
     {
         foreach (var pageId in _modifiedPages.Keys)
         {
             var page = PageCache.Instance.Lookup(_partitionId, pageId) as BinaryFilePage;
             if (page != null && page.IsDirty)
             {
                 _backgroundPageWriter.QueueWrite(page, commitId);
             }
         }
         _backgroundPageWriter.Flush();
         lock (_restartLock)
         {
             _backgroundPageWriter.Shutdown();
             _backgroundPageWriter.Dispose();
             PageCache.Instance.Clear(_partitionId);
             UpdatePartitionId();
             _readTxnId = _writeTxnId;
             _writeTxnId++;
             _backgroundPageWriter =
                 new BackgroundPageWriter(_persistenceManager.GetOutputStream(_filePath, FileMode.Open));
         }
     }
     else
     {
         throw new InvalidOperationException("Attempt to Commit on a read-only store instance");
     }
 }
Beispiel #3
0
        public void Commit(ulong commitId, BrightstarProfiler profiler)
        {
            using (profiler.Step("PageStore.Commit"))
            {
                if (_backgroundPageWriter != null)
                {
                    foreach (var p in _newPages)
                    {
                        _backgroundPageWriter.QueueWrite(p, commitId);
                    }
                    _backgroundPageWriter.Flush();
                    RestartBackgroundWriter();
                    foreach (var p in _newPages)
                    {
                        PageCache.Instance.InsertOrUpdate(_path, p);
                    }
                }
                else
                {
                    using (var outputStream = _peristenceManager.GetOutputStream(_path, FileMode.Open))
                    {
                        foreach (var p in _newPages)
                        {
                            p.Write(outputStream, commitId);
                            PageCache.Instance.InsertOrUpdate(_path, p);
                        }
                    }
                }
                _newPages.Clear();
                _newPageOffset = _nextPageId;
            }

            /*
             * using (var writeStream = _peristenceManager.GetOutputStream(_path, FileMode.Open))
             * {
             *  writeStream.Seek((long) ((_newPageOffset - 1)*(ulong) _pageSize), SeekOrigin.Begin);
             *  foreach (var p in _newPages)
             *  {
             *      writeStream.Write(p.Data, 0, _pageSize);
             *  }
             *  writeStream.Flush();
             *  _newPages.Clear();
             *  _newPageOffset = _nextPageId;
             * }
             */
        }
 public void Commit(ulong commitId, BrightstarProfiler profiler)
 {
     using (profiler.Step("PageStore.Commit"))
     {
         var livePages = new List <IPage>();
         if (_backgroundPageWriter != null)
         {
             foreach (var p in _newPages)
             {
                 if (p.IsAlive)
                 {
                     _backgroundPageWriter.QueueWrite(p.Target as IPage, commitId);
                     livePages.Add(p.Target as IPage);
                 }
             }
             _backgroundPageWriter.Flush();
             RestartBackgroundWriter();
             PageCache.Instance.Clear(_path);
         }
         else
         {
             using (var outputStream = _peristenceManager.GetOutputStream(_path, FileMode.Open))
             {
                 foreach (var p in _newPages)
                 {
                     if (p.IsAlive)
                     {
                         (p.Target as IPage).Write(outputStream, commitId);
                     }
                 }
             }
         }
         _newPages.Clear();
         _newPageOffset = _nextPageId;
     }
 }