Esempio n. 1
0
        private int DoParallelProcessing(HistoryTablesBuilder h)
        {
            var numChangedRows = 0;

            var pOptions = new ParallelOptions {
                MaxDegreeOfParallelism = _maxDegreeOfParallelism
            };

            Parallel.ForEach(h.GetTables(), pOptions, (table, loopState) =>
            {
                if (!loopState.IsExceptional)
                {
                    using (var tc = new TransactionContext(_connectionString))
                    {
                        SanityCheck(tc, (V7StagingTable)table);

                        var numChanges = AddFederatedIdValues(tc, (V7StagingTable)table);
                        Interlocked.Add(ref numChangedRows, numChanges);

                        numChanges = AddConsolidatedIdValues(tc, (V7StagingTable)table);
                        Interlocked.Add(ref numChangedRows, numChanges);

                        MarkRowsAsFixedUp(tc, table.Name);
                        tc.Commit();
                    }
                }
            });

            return(numChangedRows);
        }
Esempio n. 2
0
        public void CanGenerateHistoryTables()
        {
            var b      = HistoryTablesBuilder.Get();
            var tables = b.GetTableNames();

            Assert.IsTrue(tables.Any());
        }
Esempio n. 3
0
        private void CheckAllChangesApplied()
        {
            _log.Debug("Checking that all changes in the History schema have been applied to PUBLIC database");

            // throw if any changes in the history tables are as yet unpublished...
            var hb = HistoryTablesBuilder.Get();

            foreach (var table in hb.GetTables())
            {
                var sql =
                    $"select count(1) cnt from {DatabaseUtils.GetQualifiedTableName(HistorySchema.HistorySchemaName, table.Name)} where {HistorySchema.HistoryAppliedColumnName}=0";

                DatabaseUtils.GetSingleResult(AdminConnectionString, sql, Timeouts.AdminDatabase, r =>
                {
                    if ((int)r["cnt"] > 0)
                    {
                        throw new ApplicationException("Some entries in the History schema have not been applied to the PUBLIC database. Please rebuild the data store by deleting ADMIN and PUBLIC databases");
                    }
                });
            }
        }
Esempio n. 4
0
        public void HistoryColumnsAreAllNullable()
        {
            // in the history tables we leave all cols as nullable
            var b      = HistoryTablesBuilder.Get();
            var tables = b.GetTables();

            foreach (var t in tables)
            {
                var cols = t.Columns;
                foreach (var col in cols)
                {
                    if (!col.Name.Equals("history_federated") && !col.Name.Equals("history_applied"))
                    {
                        Assert.IsTrue(col.Nullable == ColumnNullable.True, "Table = {0}, Col = {1}", t.Name, col.Name);
                    }
                    else
                    {
                        Assert.IsFalse(col.Nullable == ColumnNullable.True, "Table = {0}, Col = {1}", t.Name, col.Name);
                    }
                }
            }
        }
Esempio n. 5
0
        public int Execute()
        {
            var h = HistoryTablesBuilder.Get();

            return(DoParallelProcessing(h));
        }