示例#1
0
        private static void GetChangelog()
        {
            if (Dataset.GetTransaction() == 0) ResetAbortedChangeLog();

            var abortedChangelogId = Dataset.GetAbortedChangelogId();

            var changelogPath = Dataset.GetChangelogPath();
            
            if (abortedChangelogId == Dataset.EmptyValue)
            {
                GetChangelogFromProvider();

                return;
            }

            if (changelogPath == string.Empty)
            {
                Dataset.OrderedChangelogId = abortedChangelogId;

                WaitForChangelogAndDownload();

                return;
            }

            Changelog.DataFolder = changelogPath;
        }
示例#2
0
        private static void PrepareAndSendTransaction(XElement transaction)
        {
            var abortedTransaction = Dataset.GetTransaction();

            if (abortedTransaction > Transaction)
            {
                Console.WriteLine($"Transaction {Transaction} is lower than abortedTransaction ({abortedTransaction}). Skipping");

                Transaction++;

                return;
            }

            Send(SetTransactionValues(transaction));

            Transaction++;

            Dataset.SetTransaction(Transaction.ToString());
        }
示例#3
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);
        }