Skip to content

Commit 85e6693

Browse files
authored
Merge pull request #441 from GridProtectionAlliance/fix-archive-reader
Fixes for openHistorian 1.0 archive reader
2 parents 00aa236 + 7f4812c commit 85e6693

File tree

2 files changed

+30
-18
lines changed

2 files changed

+30
-18
lines changed

Source/Libraries/Adapters/HistorianAdapters/LocalInputAdapter.cs

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,12 @@ protected override void Dispose(bool disposing)
325325
m_readTimer = null;
326326
}
327327

328+
if ((object)m_dataReader != null)
329+
{
330+
m_dataReader.Dispose();
331+
m_dataReader = null;
332+
}
333+
328334
if ((object)m_archiveReader != null)
329335
{
330336
m_archiveReader.HistoricFileListBuildStart -= m_archiveReader_HistoricFileListBuildStart;
@@ -521,6 +527,17 @@ private void StartDataReader(object state)
521527
}
522528
}
523529

530+
// Finished reading all available data
531+
private void RestartOrFinish()
532+
{
533+
m_readTimer.Enabled = false;
534+
535+
if (m_autoRepeat)
536+
ThreadPool.QueueUserWorkItem(StartDataReader);
537+
else
538+
OnProcessingComplete();
539+
}
540+
524541
// Process next data read
525542
private void m_readTimer_Elapsed(object sender, ElapsedEventArgs e)
526543
{
@@ -530,6 +547,12 @@ private void m_readTimer_Elapsed(object sender, ElapsedEventArgs e)
530547
{
531548
try
532549
{
550+
if (m_dataReader == null)
551+
{
552+
RestartOrFinish();
553+
return;
554+
}
555+
533556
IDataPoint currentPoint = m_dataReader.Current;
534557
long timestamp = currentPoint.Time.ToDateTime().Ticks;
535558
MeasurementKey key;
@@ -564,6 +587,9 @@ private void m_readTimer_Elapsed(object sender, ElapsedEventArgs e)
564587
}
565588
else
566589
{
590+
m_dataReader.Dispose();
591+
m_dataReader = null;
592+
567593
if (timestamp < m_stopTime.ToDateTime().Ticks && m_startTime.ToDateTime().Ticks < timestamp)
568594
{
569595
// Could be attempting read with a future end time - in these cases attempt to re-read current data
@@ -572,25 +598,11 @@ private void m_readTimer_Elapsed(object sender, ElapsedEventArgs e)
572598
m_dataReader = m_archiveReader.ReadData(m_historianIDs, m_startTime, m_stopTime).GetEnumerator();
573599

574600
if (!m_dataReader.MoveNext())
575-
{
576-
// Finished reading all available data
577-
m_readTimer.Enabled = false;
578-
579-
if (m_autoRepeat)
580-
ThreadPool.QueueUserWorkItem(StartDataReader);
581-
else
582-
OnProcessingComplete();
583-
}
601+
RestartOrFinish();
584602
}
585603
else
586604
{
587-
// Finished reading all available data
588-
m_readTimer.Enabled = false;
589-
590-
if (m_autoRepeat)
591-
ThreadPool.QueueUserWorkItem(StartDataReader);
592-
else
593-
OnProcessingComplete();
605+
RestartOrFinish();
594606
}
595607

596608
break;

Source/Libraries/GSF.Historian/Files/DataPointScanner.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,10 @@ public IEnumerable<IDataPoint> Read()
116116
// Attach to data read exception event for the data block
117117
dataBlock.DataReadException += m_dataReadExceptionHandler;
118118

119-
IEnumerable<IDataPoint> dataPoints = dataBlock.Read();
119+
List<IDataPoint> dataPoints = dataBlock.Read().ToList();
120120

121121
if (ReverseQuery)
122-
dataPoints = dataPoints.Reverse();
122+
dataPoints.Reverse();
123123

124124
if (isFirst || isLast)
125125
{

0 commit comments

Comments
 (0)