12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Utilities;
- namespace DiskAccessLibrary.LogicalDiskManager
- {
- public class KernelUpdateLog
- {
- List<KernelUpdateLogPage> m_pages = new List<KernelUpdateLogPage>();
- public KernelUpdateLog(List<KernelUpdateLogPage> pages)
- {
- m_pages = pages;
- }
- public void SetLastEntry(DynamicDisk databaseDisk, ulong committedTransactionID, ulong pendingTransactionID)
- {
- SetLastEntry(databaseDisk.Disk, databaseDisk.PrivateHeader, databaseDisk.TOCBlock, committedTransactionID, pendingTransactionID);
- }
- public void SetLastEntry(Disk disk, PrivateHeader privateHeader, TOCBlock tocBlock, ulong committedTransactionID, ulong pendingTransactionID)
- {
- if (m_pages.Count > 0)
- {
- m_pages[0].SetLastEntry(committedTransactionID, pendingTransactionID);
-
-
-
- KernelUpdateLogPage.WriteToDisk(disk, privateHeader, tocBlock, m_pages[0]);
- }
- else
- {
- throw new Exception("KLog records have not been previously read from disk");
- }
- }
- public static KernelUpdateLog ReadFromDisk(DynamicDisk databaseDisk)
- {
- return ReadFromDisk(databaseDisk.Disk, databaseDisk.PrivateHeader, databaseDisk.TOCBlock);
- }
- public static KernelUpdateLog ReadFromDisk(Disk disk, PrivateHeader privateHeader, TOCBlock tocBlock)
- {
- List<KernelUpdateLogPage> pages = new List<KernelUpdateLogPage>();
- KernelUpdateLogPage firstPage = KernelUpdateLogPage.ReadFromDisk(disk, privateHeader, tocBlock, 0);
- pages.Add(firstPage);
- for (int index = 2; index < firstPage.NumberOfPages; index++)
- {
- KernelUpdateLogPage page = KernelUpdateLogPage.ReadFromDisk(disk, privateHeader, tocBlock, index);
- pages.Add(page);
- }
- return new KernelUpdateLog(pages);
- }
- public List<KernelUpdateLogPage> Pages
- {
- get
- {
- return m_pages;
- }
- }
- }
- }
|