Example #1
0
 // ToDo: Use ASCCache
 private void StoreOngoingMigration(OngoingMigration migration)
 {
     MemoryCache.Default.Set(MigrationCacheKey, migration, new CacheItemPolicy()
     {
         RemovedCallback = ClearMigration, SlidingExpiration = TimeSpan.FromDays(1)
     });
 }
Example #2
0
        public void UploadAndInit(string migratorName, string path)
        {
            if (!CoreContext.Configuration.Standalone || !CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsAdmin())
            {
                throw new System.Security.SecurityException();
            }
            if (GetOngoingMigration() != null)
            {
                throw new Exception("Migration is already in progress");
            }

            var migratorMeta = MigrationCore.GetMigrator(migratorName);

            if (migratorMeta == null)
            {
                throw new ItemNotFoundException("No such migration provider");
            }
            var cts      = new CancellationTokenSource();
            var migrator = (IMigration)Activator.CreateInstance(migratorMeta.MigratorType);

            try
            {
                migrator.Init(path, cts.Token);
            }
            catch (Exception ex)
            {
                throw new Exception($"Error while initializing {migratorMeta.MigratorInfo.Name} migrator", ex);
            }

            var ongoingMigration = new OngoingMigration {
                Migration = migrator, CancelTokenSource = cts
            };

            StoreOngoingMigration(ongoingMigration);

            ongoingMigration.ParseTask = Task.Run(migrator.Parse);
        }