mirror of
https://github.com/bitwarden/server.git
synced 2025-04-21 21:15:10 -05:00
re-attempt db migrate on update mode failure
This commit is contained in:
parent
6641290290
commit
0381a48ec9
@ -227,43 +227,59 @@ namespace Bit.Setup
|
|||||||
Console.WriteLine("\n");
|
Console.WriteLine("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void MigrateDatabase()
|
private static void MigrateDatabase(int attempt = 1)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Migrating database.");
|
try
|
||||||
|
|
||||||
var dbPass = Helpers.GetValueFronEnvFile("mssql", "SA_PASSWORD");
|
|
||||||
var masterConnectionString = Helpers.MakeSqlConnectionString(
|
|
||||||
"mssql", "master", "sa", dbPass ?? string.Empty);
|
|
||||||
var vaultConnectionString = Helpers.MakeSqlConnectionString(
|
|
||||||
"mssql", "vault", "sa", dbPass ?? string.Empty);
|
|
||||||
|
|
||||||
using(var connection = new SqlConnection(masterConnectionString))
|
|
||||||
{
|
{
|
||||||
var command = new SqlCommand(
|
Console.WriteLine("Migrating database.");
|
||||||
"IF ((SELECT COUNT(1) FROM sys.databases WHERE [name] = 'vault') = 0) CREATE DATABASE [vault];",
|
|
||||||
connection);
|
var dbPass = Helpers.GetValueFronEnvFile("mssql", "SA_PASSWORD");
|
||||||
command.Connection.Open();
|
var masterConnectionString = Helpers.MakeSqlConnectionString(
|
||||||
command.ExecuteNonQuery();
|
"mssql", "master", "sa", dbPass ?? string.Empty);
|
||||||
|
var vaultConnectionString = Helpers.MakeSqlConnectionString(
|
||||||
|
"mssql", "vault", "sa", dbPass ?? string.Empty);
|
||||||
|
|
||||||
|
using(var connection = new SqlConnection(masterConnectionString))
|
||||||
|
{
|
||||||
|
var command = new SqlCommand(
|
||||||
|
"IF ((SELECT COUNT(1) FROM sys.databases WHERE [name] = 'vault') = 0) " +
|
||||||
|
"CREATE DATABASE [vault];", connection);
|
||||||
|
command.Connection.Open();
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
var upgrader = DeployChanges.To
|
||||||
|
.SqlDatabase(vaultConnectionString)
|
||||||
|
.JournalToSqlTable("dbo", "Migration")
|
||||||
|
.WithScriptsAndCodeEmbeddedInAssembly(Assembly.GetExecutingAssembly(),
|
||||||
|
s => s.Contains($".DbScripts.") && !s.Contains(".Archive."))
|
||||||
|
.WithTransaction()
|
||||||
|
.WithExecutionTimeout(new TimeSpan(0, 5, 0))
|
||||||
|
.LogToConsole()
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var result = upgrader.PerformUpgrade();
|
||||||
|
if(result.Successful)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Migration successful.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Migration failed.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
catch(SqlException e)
|
||||||
var upgrader = DeployChanges.To
|
|
||||||
.SqlDatabase(vaultConnectionString)
|
|
||||||
.JournalToSqlTable("dbo", "Migration")
|
|
||||||
.WithScriptsAndCodeEmbeddedInAssembly(Assembly.GetExecutingAssembly(),
|
|
||||||
s => s.Contains($".DbScripts.") && !s.Contains(".Archive."))
|
|
||||||
.WithTransaction()
|
|
||||||
.WithExecutionTimeout(new TimeSpan(0, 5, 0))
|
|
||||||
.LogToConsole()
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
var result = upgrader.PerformUpgrade();
|
|
||||||
if(result.Successful)
|
|
||||||
{
|
{
|
||||||
Console.WriteLine("Migration successful.");
|
if(e.Message.Contains("Server is in script upgrade mode") && attempt < 3)
|
||||||
}
|
{
|
||||||
else
|
var nextAttempt = attempt + 1;
|
||||||
{
|
Console.WriteLine("Database is in script upgrade mode. " +
|
||||||
Console.WriteLine("Migration failed.");
|
"Trying again (attempt #{0})...", nextAttempt);
|
||||||
|
MigrateDatabase(nextAttempt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user