Ejemplo n.º 1
0
        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;
 }
Ejemplo n.º 3
0
        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());
                        }
                    }
                }
        }
Ejemplo n.º 4
0
        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();
        }