Esempio n. 1
0
        private async Task NotifyCosmosOfRunningMigration(MigrationDetails details)
        {
            var versionDocument = await CosmosRepository.ReadVersionDocumentAsync();

            if (!(versionDocument is null) && versionDocument.IsApplyingMigration)
            {
                throw new OnGoingMigrationException(
                          $"Could not apply migration: {details.MigrationNumber}: Last migration was not complete");
            }

            await UpdateCosmosMigrationState(details, true, true);
        }
Esempio n. 2
0
        private async Task RunMigration(MigrationDetails details)
        {
            try
            {
                await Migrate();

                details.DidSucceed = true;
            }
            catch (Exception e)
            {
                details.DidSucceed     = false;
                details.FailureMessage = e.Message;
            }
        }
Esempio n. 3
0
        private async Task UpdateCosmosMigrationState(MigrationDetails details, bool isRunning, bool canFail)
        {
            try
            {
                await CosmosRepository.UpsertDocumentAsync(details);

                await CosmosRepository.UpdateVersionDocumentAsync(details.MigrationNumber, isRunning);
            }
            catch (Exception e)
            {
                if (!canFail)
                {
                    throw e;
                }
            }
        }
Esempio n. 4
0
        public async Task ExectuteMigration(ICosmosRepository cosmosRepository, int migrationNumber)
        {
            CosmosRepository = cosmosRepository;

            var details = new MigrationDetails();

            details.MigrationNumber = migrationNumber;
            details.id = details.id +
                         (migrationNumber == -1 ? GetType().Name : migrationNumber.ToString());
            details.Started = DateTime.UtcNow;
            details.Title   = GetType().Name;

            await NotifyCosmosOfRunningMigration(details);

            await RunMigration(details);

            await NotifyCosmosOfFinishedMigration(details);
        }
Esempio n. 5
0
 public async Task AddMigrationDetailsAsync(MigrationDetails details)
 {
     await UpsertDocumentAsync(details);
 }
Esempio n. 6
0
        private async Task NotifyCosmosOfFinishedMigration(MigrationDetails details)
        {
            details.Stopped = DateTime.UtcNow;

            await UpdateCosmosMigrationState(details, !details.DidSucceed, false);
        }