Change DacFx operation requests to send result after operation completes instead of after starting (#905)

This commit is contained in:
Kim Santiago
2020-01-02 15:41:33 -08:00
committed by GitHub
parent 675bf5f13c
commit 9373df1b2e

View File

@@ -67,7 +67,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
if (connInfo != null) if (connInfo != null)
{ {
ExportOperation operation = new ExportOperation(parameters, connInfo); ExportOperation operation = new ExportOperation(parameters, connInfo);
await ExecuteOperation(operation, parameters, SR.ExportBacpacTaskName, requestContext); ExecuteOperation(operation, parameters, SR.ExportBacpacTaskName, requestContext);
} }
} }
catch (Exception e) catch (Exception e)
@@ -91,7 +91,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
if (connInfo != null) if (connInfo != null)
{ {
ImportOperation operation = new ImportOperation(parameters, connInfo); ImportOperation operation = new ImportOperation(parameters, connInfo);
await ExecuteOperation(operation, parameters, SR.ImportBacpacTaskName, requestContext); ExecuteOperation(operation, parameters, SR.ImportBacpacTaskName, requestContext);
} }
} }
catch (Exception e) catch (Exception e)
@@ -117,7 +117,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
// Set connection details database name to ensure the connection string gets created correctly for DW(extract doesn't work if connection is to master) // Set connection details database name to ensure the connection string gets created correctly for DW(extract doesn't work if connection is to master)
connInfo.ConnectionDetails.DatabaseName = parameters.DatabaseName; connInfo.ConnectionDetails.DatabaseName = parameters.DatabaseName;
ExtractOperation operation = new ExtractOperation(parameters, connInfo); ExtractOperation operation = new ExtractOperation(parameters, connInfo);
await ExecuteOperation(operation, parameters, SR.ExtractDacpacTaskName, requestContext); ExecuteOperation(operation, parameters, SR.ExtractDacpacTaskName, requestContext);
} }
} }
catch (Exception e) catch (Exception e)
@@ -141,7 +141,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
if (connInfo != null) if (connInfo != null)
{ {
DeployOperation operation = new DeployOperation(parameters, connInfo); DeployOperation operation = new DeployOperation(parameters, connInfo);
await ExecuteOperation(operation, parameters, SR.DeployDacpacTaskName, requestContext); ExecuteOperation(operation, parameters, SR.DeployDacpacTaskName, requestContext);
} }
} }
catch (Exception e) catch (Exception e)
@@ -221,23 +221,37 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
} }
} }
private async Task ExecuteOperation(DacFxOperation operation, DacFxParams parameters, string taskName, RequestContext<DacFxResult> requestContext) private void ExecuteOperation(DacFxOperation operation, DacFxParams parameters, string taskName, RequestContext<DacFxResult> requestContext)
{
Task.Run(async () =>
{
try
{ {
SqlTask sqlTask = null;
TaskMetadata metadata = TaskMetadata.Create(parameters, taskName, operation, ConnectionServiceInstance); TaskMetadata metadata = TaskMetadata.Create(parameters, taskName, operation, ConnectionServiceInstance);
// put appropriate database name since connection passed was to master // put appropriate database name since connection passed was to master
metadata.DatabaseName = parameters.DatabaseName; metadata.DatabaseName = parameters.DatabaseName;
SqlTask sqlTask = SqlTaskManagerInstance.CreateTask<SqlTask>(metadata);
sqlTask = SqlTaskManagerInstance.CreateAndRun<SqlTask>(metadata); await sqlTask.RunAsync();
await requestContext.SendResult(new DacFxResult() await requestContext.SendResult(new DacFxResult()
{ {
OperationId = operation.OperationId, OperationId = operation.OperationId,
Success = true, Success = sqlTask.TaskStatus == SqlTaskStatus.Succeeded,
ErrorMessage = string.Empty ErrorMessage = string.Empty
}); });
} }
catch (Exception e)
{
await requestContext.SendResult(new DacFxResult()
{
OperationId = operation.OperationId,
Success = false,
ErrorMessage = e.Message
});
}
});
}
private SqlTaskManager SqlTaskManagerInstance private SqlTaskManager SqlTaskManagerInstance
{ {