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); }
public void CanGenerateHistoryTables() { var b = HistoryTablesBuilder.Get(); var tables = b.GetTableNames(); Assert.IsTrue(tables.Any()); }
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"); } }); } }
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); } } } }
public int Execute() { var h = HistoryTablesBuilder.Get(); return(DoParallelProcessing(h)); }