ComparisonUtility.MigrationUtility.LiveMigration C# (CSharp) Method

LiveMigration() private method

private LiveMigration ( object state ) : void
state object
return void
        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();
            }
        }