Fix restore service to set target db same as source db (#479)

* fix restore service to change target db

* add overwriteTargetDb param

* update comment
This commit is contained in:
Kate Shin
2017-10-06 11:31:10 -07:00
committed by GitHub
parent f09b9f4c30
commit 2c4f2cf6b8
7 changed files with 29 additions and 13 deletions

View File

@@ -147,6 +147,19 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts
/// </summary>
public TaskExecutionMode TaskExecutionMode { get; set; }
/// <summary>
/// Optional parameter which indicates whether to overwrite target database by source database name.
/// </summary>
internal bool OverwriteTargetDatabase
{
get
{
return Options.ContainsKey(RestoreOptionsHelper.OverwriteTargetDatabase) ? GetOptionValue<bool>(RestoreOptionsHelper.OverwriteTargetDatabase) : false;
}
set
{
SetOptionValue(RestoreOptionsHelper.OverwriteTargetDatabase, value);
}
}
}
}

View File

@@ -177,10 +177,16 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
{
ConnectionInfo connInfo;
bool supported = IsBackupRestoreOperationSupported(restoreParams.OwnerUri, out connInfo);
if (restoreParams.OverwriteTargetDatabase)
{
restoreParams.TargetDatabaseName = restoreParams.SourceDatabaseName;
}
if (supported && connInfo != null)
{
RestoreDatabaseTaskDataObject restoreDataObject = this.restoreDatabaseService.CreateRestoreDatabaseTaskDataObject(restoreParams);
restoreDataObject.OverwriteTargetDatabase = restoreParams.OverwriteTargetDatabase;
response = this.restoreDatabaseService.CreateRestorePlanResponse(restoreDataObject);
}
else

View File

@@ -54,7 +54,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
List<String> SourceDbNames { get; }
bool CanChangeTargetDatabase { get; }
bool OverwriteTargetDatabase { get; set; }
string DefaultTargetDbName { get; }
string TargetDatabaseName { get; set; }
@@ -161,13 +161,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
return Util.GetSourceDbNames();
}
public bool CanChangeTargetDatabase
{
get
{
return DatabaseUtils.IsSystemDatabaseConnection(Server.ConnectionContext.DatabaseName);
}
}
public bool OverwriteTargetDatabase { get; set; }
public string DefaultTargetDbName
{

View File

@@ -528,7 +528,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
{
DefaultValueFunction = (IRestoreDatabaseTaskDataObject restoreDataObject) =>
{
return restoreDataObject.CanChangeTargetDatabase ? restoreDataObject.DefaultSourceDbName : restoreDataObject.DefaultTargetDbName;
return restoreDataObject.OverwriteTargetDatabase ? restoreDataObject.DefaultSourceDbName : restoreDataObject.DefaultTargetDbName;
},
CurrentValueFunction = (IRestoreDatabaseTaskDataObject restoreDataObject) =>
{

View File

@@ -16,7 +16,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
//The list of names service uses to sends restore options to client
private static string[] optionNames = new string[] { KeepReplication, ReplaceDatabase , SetRestrictedUser, RecoveryState ,
BackupTailLog , TailLogBackupFile, TailLogWithNoRecovery, CloseExistingConnections, RelocateDbFiles, DataFileFolder, LogFileFolder,
StandbyFile,
StandbyFile, OverwriteTargetDatabase
};
//The key names of restore info in the resquest of response
@@ -80,6 +80,9 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
//The key name to use to set in the requst. If set to true, the backup files will be used to restore otherwise the source database name
internal const string ReadHeaderFromMedia = "readHeaderFromMedia";
//The key name to use to set in the requst. If set to true, the target database name will be overwritten by source database name
internal const string OverwriteTargetDatabase = "overwriteTargetDatabase";
/// <summary>
/// Creates the options metadata available for restore operations
/// </summary>

View File

@@ -49,7 +49,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
public List<string> SourceDbNames { get; set; }
public bool CanChangeTargetDatabase { get; set; }
public bool OverwriteTargetDatabase { get; set; }
public string DefaultTargetDbName { get; set; }

View File

@@ -336,7 +336,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
restoreDataObject.SourceDatabaseName = optionValues.GetOptionValue<string>(RestoreOptionsHelper.SourceDatabaseName);
restoreDataObject.TargetDatabaseName = optionValues.GetOptionValue<string>(RestoreOptionsHelper.TargetDatabaseName);
restoreDataObject.TailLogWithNoRecovery = optionValues.GetOptionValue<bool>("TailLogWithNoRecovery");
restoreDataObject.CanChangeTargetDatabase = optionValues.GetOptionValue<bool>("CanChangeTargetDatabase");
restoreDataObject.OverwriteTargetDatabase = optionValues.GetOptionValue<bool>("CanChangeTargetDatabase");
restoreDataObject.DefaultSourceDbName = optionValues.GetOptionValue<string>("DefaultSourceDbName");
restoreDataObject.SourceDbNames = optionValues.GetOptionValue<List<string>>("SourceDbNames");
restoreDataObject.DefaultTargetDbName = optionValues.GetOptionValue<string>("DefaultTargetDbName");