Ejemplo n.º 1
0
        private static string SynchronizeDataset(XObject subscribed)
        {
            if (Dataset.ReadVariables(subscribed))
                if (!GetLastIndex.Run())
                    return null;

            WriteDatasetInformation();

            GetChangelog();

            Changelog.Run();

            Dataset.ProviderLastIndex = Dataset.GetProviderLastIndex();

            Dataset.SaveFinalSettings();

            return Dataset.GetDatasetIdFromElement(subscribed);
        }
Ejemplo n.º 2
0
        private static void SynchronizeSubscribedDatasets()
        {
            var timer = StartTimer();

            var datasetsUpdated = new List<string>();

            var datasetsFailed = new List<string>();

            foreach (var subscribedElement in GetSubscribedElements())
            {
                try
                {
                    datasetsUpdated.Add(SynchronizeDataset(subscribedElement));
                }
                catch (Exception e)
                {
                    datasetsFailed.Add(Dataset.GetDatasetIdFromElement(subscribedElement));

                    if (Dataset.GetTransaction() == 0)
                    {
                        ResetAbortedChangeLog();
                    }
                    else
                    {
                        Console.WriteLine($"WARNING: Dataset with id {datasetsFailed.Last()} is left in unknown state due to partial commits of transactions. The subscriber will keep trying to commit the active changelog, but no longer knows which changeId it is currently at. If this problem persists you need to empty the database and synchronize this dataset from scratch.");
                    }
                    
                    HandleExceptionText(e);
                }

                Changelog.Transaction = 0;
            }
            
            timer.Stop();

            WriteStatus(datasetsUpdated.Any(d => !string.IsNullOrWhiteSpace(d)), datasetsFailed, timer);
        }