[SQL Migration] Consume more detailed migration states (#20490)

* WIP

* Add new states

* Missed a few spots

* Update logic

* Update DatabaseMigrationProperties

* Test: add mocks

* Update a few more references

* Fix warnings

* Remove mocks

* Update cutover logic

* Address PR feedback
This commit is contained in:
Raymond Truong
2022-10-28 17:14:12 -07:00
committed by GitHub
parent f4711d3c9c
commit 0dc8e18230
6 changed files with 81 additions and 53 deletions

View File

@@ -158,41 +158,49 @@ export function hasMigrationOperationId(migration: DatabaseMigration | undefined
export function canCancelMigration(migration: DatabaseMigration | undefined): boolean {
const status = getMigrationStatus(migration);
return hasMigrationOperationId(migration)
&& (status === loc.MigrationStatus.InProgress ||
status === loc.MigrationStatus.Retriable ||
status === loc.MigrationStatus.Creating);
&& (status === loc.MigrationState.InProgress
|| status === loc.MigrationState.Retriable
|| status === loc.MigrationState.Creating
|| status === loc.MigrationState.ReadyForCutover
|| status === loc.MigrationState.UploadingFullBackup
|| status === loc.MigrationState.UploadingLogBackup
|| status === loc.MigrationState.Restoring);
}
export function canDeleteMigration(migration: DatabaseMigration | undefined): boolean {
const status = getMigrationStatus(migration);
return status === loc.MigrationStatus.Canceled
|| status === loc.MigrationStatus.Failed
|| status === loc.MigrationStatus.Retriable
|| status === loc.MigrationStatus.Succeeded;
return status === loc.MigrationState.Canceled
|| status === loc.MigrationState.Failed
|| status === loc.MigrationState.Retriable
|| status === loc.MigrationState.Succeeded;
}
export function canRetryMigration(migration: DatabaseMigration | undefined): boolean {
const status = getMigrationStatus(migration);
return status === loc.MigrationStatus.Canceled
|| status === loc.MigrationStatus.Retriable
|| status === loc.MigrationStatus.Failed
|| status === loc.MigrationStatus.Succeeded;
return status === loc.MigrationState.Canceled
|| status === loc.MigrationState.Retriable
|| status === loc.MigrationState.Failed
|| status === loc.MigrationState.Succeeded;
}
export function canCutoverMigration(migration: DatabaseMigration | undefined): boolean {
const status = getMigrationStatus(migration);
return hasMigrationOperationId(migration)
&& status === loc.MigrationStatus.InProgress
&& isOnlineMigration(migration)
&& (status === loc.MigrationState.ReadyForCutover || status === loc.MigrationState.InProgress) // TODO: InProgress condition can be eventually deprecated
&& isFullBackupRestored(migration);
}
export function isActiveMigration(migration: DatabaseMigration | undefined): boolean {
const status = getMigrationStatus(migration);
return status === loc.MigrationStatus.Completing
|| status === loc.MigrationStatus.Retriable
|| status === loc.MigrationStatus.Creating
|| status === loc.MigrationStatus.InProgress;
return status === loc.MigrationState.Completing
|| status === loc.MigrationState.Retriable
|| status === loc.MigrationState.Creating
|| status === loc.MigrationState.InProgress
|| status === loc.MigrationState.ReadyForCutover
|| status === loc.MigrationState.UploadingFullBackup
|| status === loc.MigrationState.UploadingLogBackup
|| status === loc.MigrationState.Restoring;
}
export function isFullBackupRestored(migration: DatabaseMigration | undefined): boolean {