Skip to content

Commit 22fcc9d

Browse files
committed
fix: skip already-applied migrations
1 parent f019ce6 commit 22fcc9d

File tree

1 file changed

+34
-32
lines changed

1 file changed

+34
-32
lines changed

stacks-signer/src/signerdb.rs

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -835,39 +835,41 @@ impl SignerDb {
835835
debug!("Current SignerDB schema version: {}", current_db_version);
836836

837837
for migration in MIGRATIONS.iter() {
838-
if current_db_version < migration.version {
839-
if current_db_version != migration.version - 1 {
840-
// This implies a gap or out-of-order migration definition,
841-
// or the database is at a version X, and the next migration is X+2 instead of X+1.
842-
sql_tx.rollback()?;
843-
return Err(DBError::Other(format!(
844-
"Migration step missing or out of order. Current DB version: {}, trying to apply migration for version: {}",
845-
current_db_version, migration.version
846-
)));
847-
}
848-
debug!(
849-
"Applying SignerDB migration for schema version {}",
850-
migration.version
851-
);
852-
for statement in migration.statements.iter() {
853-
sql_tx.execute_batch(statement)?;
854-
}
855-
856-
// Verify that the migration script updated the version correctly
857-
let new_version_check = Self::get_schema_version(&sql_tx)?;
858-
if new_version_check != migration.version {
859-
sql_tx.rollback()?;
860-
return Err(DBError::Other(format!(
861-
"Migration to version {} failed to update DB version. Expected {}, got {}.",
862-
migration.version, migration.version, new_version_check
863-
)));
864-
}
865-
current_db_version = new_version_check;
866-
debug!(
867-
"Successfully migrated to schema version {}",
868-
current_db_version
869-
);
838+
if current_db_version >= migration.version {
839+
// don't need this migration, continue to see if we need later migrations
840+
continue;
870841
}
842+
if current_db_version != migration.version - 1 {
843+
// This implies a gap or out-of-order migration definition,
844+
// or the database is at a version X, and the next migration is X+2 instead of X+1.
845+
sql_tx.rollback()?;
846+
return Err(DBError::Other(format!(
847+
"Migration step missing or out of order. Current DB version: {}, trying to apply migration for version: {}",
848+
current_db_version, migration.version
849+
)));
850+
}
851+
debug!(
852+
"Applying SignerDB migration for schema version {}",
853+
migration.version
854+
);
855+
for statement in migration.statements.iter() {
856+
sql_tx.execute_batch(statement)?;
857+
}
858+
859+
// Verify that the migration script updated the version correctly
860+
let new_version_check = Self::get_schema_version(&sql_tx)?;
861+
if new_version_check != migration.version {
862+
sql_tx.rollback()?;
863+
return Err(DBError::Other(format!(
864+
"Migration to version {} failed to update DB version. Expected {}, got {}.",
865+
migration.version, migration.version, new_version_check
866+
)));
867+
}
868+
current_db_version = new_version_check;
869+
debug!(
870+
"Successfully migrated to schema version {}",
871+
current_db_version
872+
);
871873
}
872874

873875
if current_db_version < Self::SCHEMA_VERSION {

0 commit comments

Comments
 (0)