private void LiveMigration(object state)
{
try
{
const int MessageInterval = 1000000;
Ticks operationStartTime = DateTime.UtcNow.Ticks;
Dictionary<string, string> parameters = state as Dictionary<string, string>;
if ((object)parameters == null)
throw new ArgumentNullException("state", "Could not interpret thread state as parameters dictionary");
ClearUpdateMessages();
string instanceName = OpenGSFHistorianArchive(
parameters["sourceFilesLocation"],
parameters["sourceFilesOffloadLocation"],
parameters["instanceName"]);
UpdateInstanceName(instanceName);
if (!m_archiveReady.Wait(300000))
{
ShowUpdateMessage("Still initializing source historian after 5 minutes...");
m_archiveReady.Wait();
}
bool ignoreDuplicates = parameters["ignoreDuplicates"].ParseBoolean();
DataPoint point = new DataPoint();
long migratedPoints = 0;
long displayMessageCount = MessageInterval;
SetProgressMaximum(100);
Ticks readStartTime = DateTime.UtcNow.Ticks;
using (SnapDBEngine engine = new SnapDBEngine(this,
instanceName,
parameters["destinationFilesLocation"],
parameters["targetFileSize"],
parameters["directoryNamingMethod"]))
using (SnapDBClient client = new SnapDBClient(engine, instanceName))
{
while (ReadNextGSFHistorianPoint(point))
{
client.WriteSnapDBData(point, ignoreDuplicates);
migratedPoints++;
if (migratedPoints == displayMessageCount)
{
ShowUpdateMessage("{0}Migrated {1:#,##0} points so far averaging {2:#,##0} points per second...{0}", Environment.NewLine, migratedPoints, migratedPoints / (DateTime.UtcNow.Ticks - readStartTime).ToSeconds());
if (m_pointCount > 0)
UpdateProgressBar((int)((migratedPoints / (double)m_pointCount) * 100.0D));
displayMessageCount += MessageInterval;
}
if (m_formClosing)
break;
}
if (m_formClosing)
{
ShowUpdateMessage("Migration canceled.");
UpdateProgressBar(0);
}
else
{
client.FlushSnapDB();
ShowUpdateMessage("*** Migration Complete ***");
ShowUpdateMessage("Total migration time {0}", (DateTime.UtcNow.Ticks - operationStartTime).ToElapsedTimeString(3));
UpdateProgressBar(100);
}
}
}
catch (Exception ex)
{
ShowUpdateMessage("Failure during migration: {0}", ex.Message);
}
finally
{
m_operationStarted = false;
CloseGSFHistorianArchive();
}
}