public void Recover(bool correctErrors) { m_tree.Recover(correctErrors); var chunksInUse = new Hashtable(); string key = m_tree.FirstKey(); while (key != null) { long buffernumber = m_tree[key]; if (chunksInUse.ContainsKey(buffernumber)) { throw new BplusTreeException("buffer number " + buffernumber + " associated with more than one key '" + key + "' and '" + chunksInUse[buffernumber] + "'"); } chunksInUse[buffernumber] = key; key = m_tree.NextKey(key); } // also consider the un-deallocated chunks to be in use foreach (DictionaryEntry thing in m_freeChunksOnCommit) { var buffernumber = (long)thing.Key; chunksInUse[buffernumber] = "awaiting commit"; } m_archive.Recover(chunksInUse, correctErrors); }