public static void ShardMapManagerLoadTestsCleanup() { // Clear all connection pools. SqlConnection.ClearAllPools(); // Detect inconsistencies for all shard locations in a shard map. ShardMapManager smm = ShardMapManagerFactory.GetSqlShardMapManager( Globals.ShardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy); RecoveryManager rm = new RecoveryManager(smm); bool inconsistencyDetected = false; foreach (ShardLocation sl in smm.GetDistinctShardLocations()) { IEnumerable <RecoveryToken> gs = rm.DetectMappingDifferences(sl); foreach (RecoveryToken g in gs) { var kvps = rm.GetMappingDifferences(g); if (kvps.Keys.Count > 0) { inconsistencyDetected = true; Debug.WriteLine("LSM at location {0} is not consistent with GSM", sl); } } } bool deadlocksDetected = false; // Check for deadlocks during the run and cleanup database and deadlock objects on successful run using (SqlConnection conn = new SqlConnection(Globals.ShardMapManagerTestConnectionString)) { conn.Open(); // check for any deadlocks occured during the run and cleanup deadlock monitoring objects using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = s_deadlockDetectionQuery; cmd.CommandType = System.Data.CommandType.Text; try { using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { // some deadlocks occured during the test, collect xml plan for these deadlocks deadlocksDetected = true; while (reader.Read()) { Debug.WriteLine("Deadlock information"); Debug.WriteLine(reader.GetSqlXml(0).Value); } } } } catch (SqlException) { } } // cleanup only if there are no inconsistencies and deadlocks during the run. if (!deadlocksDetected && !inconsistencyDetected) { foreach (string q in s_deadlockDetectionCleanupQueries) { using (SqlCommand cmd = new SqlCommand(q, conn)) { try { cmd.ExecuteNonQuery(); } catch (SqlException) { } } } // Drop shard databases for (int i = 0; i < ShardMapManagerLoadTests.s_shardedDBs.Length; i++) { using (SqlCommand cmd = new SqlCommand( string.Format(Globals.DropDatabaseQuery, ShardMapManagerLoadTests.s_shardedDBs[i]), conn)) { cmd.ExecuteNonQuery(); } } // Drop shard map manager database using (SqlCommand cmd = new SqlCommand( string.Format(Globals.DropDatabaseQuery, Globals.ShardMapManagerDatabaseName), conn)) { cmd.ExecuteNonQuery(); } } } }