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);
}