// Token: 0x06000EDF RID: 3807 RVA: 0x0003F870 File Offset: 0x0003DA70 internal static Dictionary <int, List <DatabaseGroupLayoutEntry> > GenerateCopyLayoutTable(DatabaseCopyLayoutEntry copyLayoutEntry, int serversPerDag, int databasesPerDag, int databaseDrivesPerServer, int databasesPerDrive, int copiesPerDatabase, int numberOfExtraCopiesOnSpares = 0) { CopyLayoutGenerator.Tracer.TraceDebug(0L, "CopyLayoutGenerator: GenerateCopyLayoutTable() ServersPerDag = {0}, DatabasesPerDag = {1}, databaseDrivesPerServer = {2}, DatabasesPerDrive = {3}, CopiesPerDatabase = {4}, numberOfExtraCopiesOnSpares = {5}", new object[] { serversPerDag, databasesPerDag, databaseDrivesPerServer, databasesPerDrive, copiesPerDatabase, numberOfExtraCopiesOnSpares }); Dictionary <int, List <DatabaseGroupLayoutEntry> > dictionary = CopyLayoutGenerator.GenerateCopyLayoutWithEmptySpares(copyLayoutEntry, serversPerDag, databasesPerDag, databaseDrivesPerServer, databasesPerDrive, copiesPerDatabase); if (numberOfExtraCopiesOnSpares > 0) { CopyLayoutGenerator.Tracer.TraceDebug <int>(0L, "CopyLayoutGenerator: GenerateCopyLayoutTable() Generating {0} extra copy on the spare disks.", numberOfExtraCopiesOnSpares); try { CopyLayoutGenerator.GenerateAdditionalCopyOnSpares(numberOfExtraCopiesOnSpares, databaseDrivesPerServer, dictionary); } catch (DatabaseCopyLayoutException ex) { CopyLayoutGenerator.Tracer.TraceDebug <string>(0L, "CopyLayoutGenerator: Call to GenerateAdditionalCopyOnSpares() failed. Error '{0}'.", ex.Message); throw new CallWithoutnumberOfExtraCopiesOnSparesException(ex.Message); } } return(dictionary); }
// Token: 0x06000EE0 RID: 3808 RVA: 0x0003F938 File Offset: 0x0003DB38 internal static Dictionary <int, List <DatabaseGroupLayoutEntry> > GenerateCopyLayoutWithEmptySpares(DatabaseCopyLayoutEntry copyLayoutEntry, int serversPerDag, int databasesPerDag, int databaseDrivesPerServer, int databasesPerDrive, int copiesPerDatabase) { CopyLayoutGenerator.Tracer.TraceDebug(0L, "CopyLayoutGenerator: GenerateCopyLayoutWithEmptySpares() ServersPerDag = {0}, DatabasesPerDag = {1}, databaseDrivesPerServer = {2}, DatabasesPerDrive = {3}, CopiesPerDatabase = {4}", new object[] { serversPerDag, databasesPerDag, databaseDrivesPerServer, databasesPerDrive, copiesPerDatabase }); Dictionary <int, List <DatabaseGroupLayoutEntry> > dictionary = new Dictionary <int, List <DatabaseGroupLayoutEntry> >(); Dictionary <string, int> databaseGroups = new Dictionary <string, int>(); int num = serversPerDag / copiesPerDatabase; int num2 = databasesPerDag / databasesPerDrive; Math.Floor((double)num2 / (double)num); int num3 = (int)Math.Ceiling((double)num2 / (double)num); int num4 = num2 % num; int num5 = 0; int num6 = 0; int i = 0; int num7 = 0; for (int j = 0; j < num3; j++) { num7++; CopyLayoutGenerator.SeedStandardRand(num6 + i + j + 371293); for (i = 0; i <= copiesPerDatabase - 1; i++) { int num8 = i * num; int num9 = CopyLayoutGenerator.StandardRand(); num6 = (num7 - 1) * num; int num10 = 371293 * (i + 1) + 1; if (num10 % num == 0 || CopyLayoutGenerator.GreatestCommonDivisor(num10, num) != 1) { num10 = 371293; } for (int k = 0; k < num; k++) { if (j != num3 - 1 || num4 <= 0 || k < num4) { int num11 = num8 + (k * num10 + num9) % num; num5++; DatabaseGroupLayoutEntry databaseGroupInstance = CopyLayoutGenerator.GetDatabaseGroupInstance(num6, databasesPerDrive, num5, copyLayoutEntry, databaseGroups); List <DatabaseGroupLayoutEntry> list; if (dictionary.TryGetValue(num11 + 1, out list)) { list.Add(databaseGroupInstance); } else { List <DatabaseGroupLayoutEntry> list2 = new List <DatabaseGroupLayoutEntry>(); list2.Add(databaseGroupInstance); dictionary.Add(num11 + 1, list2); } num6++; } } } i = copiesPerDatabase - 1; } return(dictionary); }
// Token: 0x06000EE2 RID: 3810 RVA: 0x0003FCB4 File Offset: 0x0003DEB4 private static DatabaseGroupLayoutEntry GetDatabaseGroupInstance(int databaseInstance, int databasesPerDrive, int defaultGroupNumber, DatabaseCopyLayoutEntry copyLayoutEntry, Dictionary <string, int> databaseGroups) { CopyLayoutGenerator.Tracer.TraceDebug <int, int, int>(0L, "CopyLayoutGenerator: GetDatabaseGroupInstance() databaseInstance = {0}, databasesPerDrive = {1}, defaultGroupNumber = {2}", databaseInstance, databasesPerDrive, defaultGroupNumber); List <string> list = new List <string>(); for (int i = 0; i < databasesPerDrive; i++) { int databaseNumber = databaseInstance * databasesPerDrive + i + 1; list.Add(copyLayoutEntry.GetDatabaseName(databaseNumber)); } int num; DatabaseGroupLayoutEntry result; if (databaseGroups.TryGetValue(list.FirstOrDefault <string>(), out num)) { result = new DatabaseGroupLayoutEntry(num.ToString(), list, false); } else { if (databaseGroups.Count != 0) { defaultGroupNumber = databaseGroups.Values.Max() + 1; } result = new DatabaseGroupLayoutEntry(defaultGroupNumber.ToString(), list, false); foreach (string key in list) { databaseGroups.Add(key, defaultGroupNumber); } } CopyLayoutGenerator.Tracer.TraceDebug <string, string>(0L, "CopyLayoutGenerator: GetDatabaseGroupInstance() Returned database groupid - {0} databaseNames - {1}", result.DatabaseGroupId, result.DatabaseNameList.ToString()); return(result); }