mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-16 17:23:38 -05:00
added restore errors to resx (#407)
* added restore errors to resx * including the restore error messages in the result * added more error handling and tests
This commit is contained in:
@@ -24,8 +24,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts
|
||||
public string BackupFilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Database name to restore from (either the back file path or database name can be used for restore operation,
|
||||
/// If the backup file is set, the database name will be ignored)
|
||||
/// Target Database name to restore to
|
||||
/// </summary>
|
||||
public string DatabaseName { get; set; }
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
|
||||
else
|
||||
{
|
||||
response.CanRestore = false;
|
||||
response.ErrorMessage = "Restore is not supported"; //TOOD: have a better error message
|
||||
response.ErrorMessage = SR.RestoreNotSupported;
|
||||
}
|
||||
await requestContext.SendResult(response);
|
||||
|
||||
@@ -157,18 +157,17 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
|
||||
TaskMetadata metadata = new TaskMetadata();
|
||||
metadata.ServerName = connInfo.ConnectionDetails.ServerName;
|
||||
metadata.DatabaseName = connInfo.ConnectionDetails.DatabaseName;
|
||||
metadata.Name = SR.Backup_TaskName;
|
||||
metadata.Name = SR.RestoreTaskName;
|
||||
metadata.IsCancelable = true;
|
||||
metadata.Data = restoreDataObject;
|
||||
|
||||
|
||||
// create restore task and perform
|
||||
SqlTask sqlTask = SqlTaskManager.Instance.CreateAndRun(metadata, this.restoreDatabaseService.RestoreTaskAsync, restoreDatabaseService.CancelTaskAsync);
|
||||
response.TaskId = sqlTask.TaskId.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
response.ErrorMessage = "Failed to create restore task";
|
||||
response.ErrorMessage = SR.RestorePlanFailed;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -178,7 +177,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
|
||||
}
|
||||
else
|
||||
{
|
||||
response.ErrorMessage = "Restore database is not supported"; //TOOD: have a better error message
|
||||
response.ErrorMessage = SR.RestoreNotSupported;
|
||||
}
|
||||
|
||||
await requestContext.SendResult(response);
|
||||
|
||||
@@ -39,8 +39,23 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
|
||||
TaskResult result = new TaskResult();
|
||||
try
|
||||
{
|
||||
ExecuteRestore(restoreDataObject);
|
||||
result.TaskStatus = SqlTaskStatus.Succeeded;
|
||||
if (restoreDataObject.IsValid)
|
||||
{
|
||||
ExecuteRestore(restoreDataObject);
|
||||
result.TaskStatus = SqlTaskStatus.Succeeded;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.TaskStatus = SqlTaskStatus.Failed;
|
||||
if (restoreDataObject.ActiveException != null)
|
||||
{
|
||||
result.ErrorMessage = restoreDataObject.ActiveException.Message;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.ErrorMessage = SR.RestoreNotSupported;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -48,7 +63,11 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
|
||||
result.ErrorMessage = ex.Message;
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
result.ErrorMessage += System.Environment.NewLine + ex.InnerException.Message;
|
||||
result.ErrorMessage += Environment.NewLine + ex.InnerException.Message;
|
||||
}
|
||||
if (restoreDataObject != null && restoreDataObject.ActiveException != null)
|
||||
{
|
||||
result.ErrorMessage += Environment.NewLine + restoreDataObject.ActiveException.Message;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@@ -114,34 +133,54 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
|
||||
{
|
||||
DatabaseName = restoreDataObject.RestoreParams.DatabaseName
|
||||
};
|
||||
if (restoreDataObject != null && restoreDataObject.IsValid)
|
||||
try
|
||||
{
|
||||
UpdateRestorePlan(restoreDataObject);
|
||||
|
||||
if (restoreDataObject != null && restoreDataObject.IsValid)
|
||||
{
|
||||
response.DatabaseName = restoreDataObject.RestorePlanner.DatabaseName;
|
||||
response.DbFiles = restoreDataObject.DbFiles.Select(x => x.PhysicalName);
|
||||
response.CanRestore = CanRestore(restoreDataObject);
|
||||
UpdateRestorePlan(restoreDataObject);
|
||||
|
||||
if (!response.CanRestore)
|
||||
if (restoreDataObject != null && restoreDataObject.IsValid)
|
||||
{
|
||||
response.ErrorMessage = "Backup not supported.";
|
||||
}
|
||||
response.DatabaseName = restoreDataObject.RestorePlanner.DatabaseName;
|
||||
response.DbFiles = restoreDataObject.DbFiles.Select(x => x.PhysicalName);
|
||||
response.CanRestore = CanRestore(restoreDataObject);
|
||||
|
||||
response.RelocateFilesNeeded = !restoreDataObject.DbFilesLocationAreValid();
|
||||
response.DefaultDataFolder = restoreDataObject.DefaultDataFileFolder;
|
||||
response.DefaultLogFolder = restoreDataObject.DefaultLogFileFolder;
|
||||
if (!response.CanRestore)
|
||||
{
|
||||
response.ErrorMessage = SR.RestoreNotSupported;
|
||||
}
|
||||
|
||||
response.RelocateFilesNeeded = !restoreDataObject.DbFilesLocationAreValid();
|
||||
response.DefaultDataFolder = restoreDataObject.DefaultDataFileFolder;
|
||||
response.DefaultLogFolder = restoreDataObject.DefaultLogFileFolder;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (restoreDataObject.ActiveException != null)
|
||||
{
|
||||
response.ErrorMessage = restoreDataObject.ActiveException.Message;
|
||||
}
|
||||
else
|
||||
{
|
||||
response.ErrorMessage = SR.RestorePlanFailed;
|
||||
}
|
||||
response.CanRestore = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
response.ErrorMessage = "Failed to create restore plan";
|
||||
response.CanRestore = false;
|
||||
response.ErrorMessage = SR.RestorePlanFailed;
|
||||
}
|
||||
}
|
||||
else
|
||||
catch(Exception ex)
|
||||
{
|
||||
response.ErrorMessage = "Failed to create restore database plan";
|
||||
response.ErrorMessage = ex.Message;
|
||||
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
response.ErrorMessage += Environment.NewLine;
|
||||
response.ErrorMessage += ex.InnerException.Message;
|
||||
}
|
||||
}
|
||||
return response;
|
||||
|
||||
@@ -190,8 +229,6 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
|
||||
/// <returns></returns>
|
||||
private void UpdateRestorePlan(RestoreDatabaseTaskDataObject restoreDataObject)
|
||||
{
|
||||
// Server server = new Server(new ServerConnection(connInfo.ConnectionDetails.ServerName));
|
||||
//RestoreDatabaseTaskDataObject restoreDataObject = new RestoreDatabaseTaskDataObject(server, requestParam.DatabaseName);
|
||||
if (!string.IsNullOrEmpty(restoreDataObject.RestoreParams.BackupFilePath))
|
||||
{
|
||||
restoreDataObject.AddFile(restoreDataObject.RestoreParams.BackupFilePath);
|
||||
@@ -215,6 +252,10 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
|
||||
{
|
||||
restoreDataObject.RestorePlan.Execute();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidOperationException(SR.RestoreNotSupported);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -43,7 +43,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.Server != null && this.RestorePlanner != null;
|
||||
return this.Server != null && this.RestorePlanner != null && ActiveException == null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user