Beispiel #1
0
 private void UpdateMigration(SoftwareMigration softwareMigration, int answerPoolId)
 {
     softwareMigration.LastMigrated = new LastMigratedInfo {
         AnswerPoolId = answerPoolId
     }.ToJson();
     _unitOfWorkFactory.Execute(() => _softwareMigrationRepository.Update(softwareMigration));
 }
Beispiel #2
0
        private SoftwareMigration CreateEmptyMigration()
        {
            var softwareMigration = new SoftwareMigration {
                MigrationName    = _migrationName,
                StartDateUtc     = DateTime.UtcNow,
                MigrationObjects = "PhoneFaxControls",
                LastMigrated     = new LastMigratedInfo().ToJson()
            };

            _unitOfWorkFactory.Execute(() => _softwareMigrationRepository.Insert(softwareMigration));
            return(GetMigration());
        }
Beispiel #3
0
        public override void Up()
        {
            Run(container => {
                var mainPhoneDataMigration          = new PhoneDataMigration(container);
                SoftwareMigration softwareMigration = mainPhoneDataMigration.GetMigration() ?? mainPhoneDataMigration.CreateEmptyMigration();
                LastMigratedInfo lastMigrated       = LastMigratedInfo.FromJson(softwareMigration.LastMigrated);
                if (softwareMigration.EndDateUtc != null)
                {
                    Console.WriteLine($"Phones have been converted {softwareMigration.EndDateUtc.Value.ToLocalTime()} ");
                    return;
                }
                Guid[] phoneFaxControls = mainPhoneDataMigration.GetPhoneFaxControls();
                int[] answerPoolIds     = mainPhoneDataMigration._answerRepository.Get(x => x.Id > lastMigrated.AnswerPoolId,
                                                                                       x => x.Id,
                                                                                       x => x.Id,
                                                                                       SortOrder.Ascending);

                IReadOnlyCollection <int>[] groups = answerPoolIds.Split(GroupSize).ToArray();
                int lastMigratedAnswerPoolId       = 0;
                for (int groupIndex = 0; groupIndex < groups.Length; groupIndex++)
                {
                    var stopWatch = new Stopwatch();
                    stopWatch.Start();
                    int[] parallelAnswerPoolIds = groups[groupIndex].ToArray();
                    Parallel.ForEach(Partitioner.Create(0, parallelAnswerPoolIds.Length),
                                     range => {
                        using (ILifetimeScope innerScope = container.BeginLifetimeScope()) {
                            for (int index = range.Item1; index < range.Item2; index++)
                            {
                                int answerPoolId = parallelAnswerPoolIds[index];
                                new PhoneDataMigration(innerScope).MovePhones(softwareMigration.Id, answerPoolId, phoneFaxControls);
                            }
                        }
                    });
                    lastMigratedAnswerPoolId = parallelAnswerPoolIds[parallelAnswerPoolIds.Length - 1];
                    if (groupIndex % LoggingInterval == 0)
                    {
                        mainPhoneDataMigration.UpdateMigration(softwareMigration, lastMigratedAnswerPoolId);
                    }
                    stopWatch.Stop();
                    Console.WriteLine($"groupIndex={groupIndex}, groups.Length={groups.Length} RunTime {stopWatch.ElapsedMilliseconds}");
                }
                mainPhoneDataMigration.UpdateMigration(softwareMigration, lastMigratedAnswerPoolId);
                mainPhoneDataMigration.CompleteMigration(softwareMigration);
            });
        }
Beispiel #4
0
 private void CompleteMigration(SoftwareMigration softwareMigration)
 {
     softwareMigration.EndDateUtc = DateTime.UtcNow;
     _unitOfWorkFactory.Execute(() => _softwareMigrationRepository.Update(softwareMigration));
 }