public WriteToSortedBlockTable ( Manifest manifest ) : void | ||
manifest | Manifest | |
Результат | void |
#pragma warning restore 420 private void CheckForIncompleteJournalRotation(string baseFileName, int currentMemTableVersion) { int previousMemTableVersion = currentMemTableVersion - 1; // Is there a left-over journal from a previous rotation that was aborted while in rotation. if (File.Exists(Config.JournalFile(baseFileName, previousMemTableVersion))) { var memTable = new JournaledMemTable(baseFileName, previousMemTableVersion); memTable.WriteToSortedBlockTable(_manifest); memTable.Close(); } }
#pragma warning disable 420 public void RotateMemTable() { lock (memTableRotationLock) { // Double check the flag in case we have multiple threads that make it into this routine if (_currentJournaledMemTable.Full) { _rotationSemaphore.WaitOne(); // Wait for the rotation gate to be open, and automatically reset once a single thread gets through. _rotatedJournaledMemTable = Interlocked.Exchange <JournaledMemTable>(ref _currentJournaledMemTable, new JournaledMemTable(_manifest.BaseFileName, _manifest.NextVersion(0))); ThreadPool.QueueUserWorkItem((o) => { try { _rotatedJournaledMemTable.WriteToSortedBlockTable(_manifest); _rotatedJournaledMemTable = null; } finally { _rotationSemaphore.Release(); // Open the gate for the next rotation } }); } } }
#pragma warning restore 420 private void CheckForIncompleteJournalRotation(string baseFileName, int currentMemTableVersion) { int previousMemTableVersion = currentMemTableVersion - 1; // Is there a left-over journal from a previous rotation that was aborted while in rotation. if (File.Exists(Config.JournalFile(baseFileName, previousMemTableVersion))) { var memTable = new JournaledMemTable(baseFileName, previousMemTableVersion); memTable.WriteToSortedBlockTable(_manifest); memTable.Close(); } }
#pragma warning disable 420 public void RotateMemTable() { lock (memTableRotationLock) { // Double check the flag in case we have multiple threads that make it into this routine if (_currentJournaledMemTable.Full) { _rotationSemaphore.WaitOne(); // Wait for the rotation gate to be open, and automatically reset once a single thread gets through. _rotatedJournaledMemTable = Interlocked.Exchange<JournaledMemTable>(ref _currentJournaledMemTable, new JournaledMemTable(_manifest.BaseFileName, _manifest.NextVersion(0))); ThreadPool.QueueUserWorkItem((o) => { try { _rotatedJournaledMemTable.WriteToSortedBlockTable(_manifest); _rotatedJournaledMemTable = null; } finally { _rotationSemaphore.Release(); // Open the gate for the next rotation } }); } } }