// ToDo: Use ASCCache private void StoreOngoingMigration(OngoingMigration migration) { MemoryCache.Default.Set(MigrationCacheKey, migration, new CacheItemPolicy() { RemovedCallback = ClearMigration, SlidingExpiration = TimeSpan.FromDays(1) }); }
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); }