public void CreateSnapshotTest() { HistorianKey key = new HistorianKey(); HistorianValue value = new HistorianValue(); key.Timestamp = 1; key.PointID = 2; value.Value1 = 3; value.Value2 = 4; using (SortedTreeTable <HistorianKey, HistorianValue> target = SortedTreeFile.CreateInMemory().OpenOrCreateTable <HistorianKey, HistorianValue>(EncodingDefinition.FixedSizeCombinedEncoding)) { ulong date = 1; ulong pointId = 2; ulong value1 = 3; ulong value2 = 4; SortedTreeTableSnapshotInfo <HistorianKey, HistorianValue> snap1; using (SortedTreeTableEditor <HistorianKey, HistorianValue> fileEditor = target.BeginEdit()) { fileEditor.AddPoint(key, value); key.Timestamp++; fileEditor.AddPoint(key, value); snap1 = target.AcquireReadSnapshot(); fileEditor.Commit(); } SortedTreeTableSnapshotInfo <HistorianKey, HistorianValue> snap2 = target.AcquireReadSnapshot(); using (SortedTreeTableReadSnapshot <HistorianKey, HistorianValue> instance = snap1.CreateReadSnapshot()) { SortedTreeScannerBase <HistorianKey, HistorianValue> scanner = instance.GetTreeScanner(); scanner.SeekToStart(); Assert.AreEqual(false, scanner.Read(key, value)); } using (SortedTreeTableReadSnapshot <HistorianKey, HistorianValue> instance = snap2.CreateReadSnapshot()) { SortedTreeScannerBase <HistorianKey, HistorianValue> scanner = instance.GetTreeScanner(); scanner.SeekToStart(); Assert.AreEqual(true, scanner.Read(key, value)); Assert.AreEqual(1uL, key.Timestamp); Assert.AreEqual(2uL, key.PointID); Assert.AreEqual(3uL, value.Value1); Assert.AreEqual(4uL, value.Value2); } Assert.AreEqual(1uL, target.FirstKey.Timestamp); Assert.AreEqual(2uL, target.LastKey.Timestamp); } }
/// <summary> /// Creates a snapshot summary of a table. /// </summary> /// <param name="table">the table to take the read snapshot of.</param> public ArchiveTableSummary(SortedTreeTable <TKey, TValue> table) { m_firstKey = new TKey(); m_lastKey = new TKey(); m_sortedTreeTable = table; m_activeSnapshotInfo = table.AcquireReadSnapshot(); table.FirstKey.CopyTo(m_firstKey); table.LastKey.CopyTo(m_lastKey); m_fileId = m_sortedTreeTable.BaseFile.Snapshot.Header.ArchiveId; }
public void ReadFile() { using (SortedTreeFile af = SortedTreeFile.OpenFile("c:\\temp\\ArchiveTestFileBig.d2", isReadOnly: true)) using (SortedTreeTable <HistorianKey, HistorianValue> af2 = af.OpenOrCreateTable <HistorianKey, HistorianValue>(EncodingDefinition.FixedSizeCombinedEncoding)) { HistorianKey key = new HistorianKey(); HistorianValue value = new HistorianValue(); Random r = new Random(3); SortedTreeScannerBase <HistorianKey, HistorianValue> scanner = af2.AcquireReadSnapshot().CreateReadSnapshot().GetTreeScanner(); scanner.SeekToStart(); for (ulong v1 = 1; v1 < 36; v1++) { for (ulong v2 = 1; v2 < 86000; v2++) { Assert.IsTrue(scanner.Read(key, value)); Assert.AreEqual(key.Timestamp, v1 * 2342523); Assert.AreEqual(key.PointID, v2); Assert.AreEqual(value.Value3, 0ul); Assert.AreEqual(value.Value1, (ulong)r.Next()); } } } }
public void ConcurrentReadingFromAFile() { string fileName = @"C:\Temp\ArchiveFile.d2"; HistorianKey key1 = new HistorianKey(); HistorianKey key2 = new HistorianKey(); HistorianValue value1 = new HistorianValue(); HistorianValue value2 = new HistorianValue(); using (SortedTreeFile file = SortedTreeFile.OpenFile(fileName, isReadOnly: true)) using (SortedTreeTable <HistorianKey, HistorianValue> table = file.OpenTable <HistorianKey, HistorianValue>()) { SortedTreeTableSnapshotInfo <HistorianKey, HistorianValue> snapshotInfo = table.AcquireReadSnapshot(); using (SortedTreeTableReadSnapshot <HistorianKey, HistorianValue> reader1 = snapshotInfo.CreateReadSnapshot()) using (SortedTreeTableReadSnapshot <HistorianKey, HistorianValue> reader2 = snapshotInfo.CreateReadSnapshot()) { SortedTreeScannerBase <HistorianKey, HistorianValue> scanner1 = reader1.GetTreeScanner(); SortedTreeScannerBase <HistorianKey, HistorianValue> scanner2 = reader2.GetTreeScanner(); scanner1.SeekToStart(); scanner2.SeekToStart(); bool scanner1Read = scanner1.Read(key1, value1); bool scanner2Read = scanner2.Read(key2, value2); while (scanner1Read && scanner2Read) { Assert.AreEqual(key1.Timestamp, key2.Timestamp); Assert.AreEqual(key1.PointID, key2.PointID); Assert.AreEqual(key1.EntryNumber, key2.EntryNumber); Assert.AreEqual(value1.Value1, value2.Value1); Assert.AreEqual(value1.Value2, value2.Value2); Assert.AreEqual(value1.Value3, value2.Value3); scanner1Read = scanner1.Read(key1, value1); scanner2Read = scanner2.Read(key2, value2); } } } ReadDataFromAFile(); }