/// <summary> /// Creates or updates an elastic pool. /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// The name of the resource group that contains the resource. You can obtain /// this value from the Azure Resource Manager API or the portal. /// </param> /// <param name='serverName'> /// The name of the server. /// </param> /// <param name='elasticPoolName'> /// The name of the elastic pool. /// </param> /// <param name='parameters'> /// The elastic pool parameters. /// </param> /// <param name='cancellationToken'> /// The cancellation token. /// </param> public static async Task <ElasticPool> CreateOrUpdateAsync(this IElasticPoolsOperations operations, string resourceGroupName, string serverName, string elasticPoolName, ElasticPool parameters, CancellationToken cancellationToken = default(CancellationToken)) { using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, serverName, elasticPoolName, parameters, null, cancellationToken).ConfigureAwait(false)) { return(_result.Body); } }
/// <summary> /// Creates or updates an elastic pool. /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// The name of the resource group that contains the resource. You can obtain /// this value from the Azure Resource Manager API or the portal. /// </param> /// <param name='serverName'> /// The name of the server. /// </param> /// <param name='elasticPoolName'> /// The name of the elastic pool. /// </param> /// <param name='parameters'> /// The elastic pool parameters. /// </param> public static ElasticPool CreateOrUpdate(this IElasticPoolsOperations operations, string resourceGroupName, string serverName, string elasticPoolName, ElasticPool parameters) { return(operations.CreateOrUpdateAsync(resourceGroupName, serverName, elasticPoolName, parameters).GetAwaiter().GetResult()); }
private void TestUpdateHyperscaleElasticPool <TUpdateModel>( SqlManagementClient sqlClient, ResourceGroup resourceGroup, Server server, Func <TUpdateModel> createModelFunc, Func <string, string, string, TUpdateModel, ElasticPool> updateFunc) { // Create a Hyperscale elasticPool // string epName = SqlManagementTestUtilities.GenerateName(); var epInput = new ElasticPool() { Location = server.Location, Sku = new Microsoft.Azure.Management.Sql.Models.Sku("HS_Gen5_4") }; var returnedEp = sqlClient.ElasticPools.CreateOrUpdate(resourceGroup.Name, server.Name, epName, epInput); SqlManagementTestUtilities.ValidateElasticPool(epInput, returnedEp, epName); var epa = sqlClient.ElasticPoolActivities.ListByElasticPool(resourceGroup.Name, server.Name, epName); Assert.NotNull(epa); Assert.Equal(1, epa.Count()); Assert.Equal(1, epa.Where(a => a.Operation == "CREATE").Count()); // Verify pool has default HighAvailabilityReplicaCount Assert.Equal(1, returnedEp.HighAvailabilityReplicaCount); // Update HighAvailabilityReplicaCount // dynamic epInput2 = createModelFunc(); epInput2.HighAvailabilityReplicaCount = 2; updateFunc(resourceGroup.Name, server.Name, epName, epInput2); returnedEp = sqlClient.ElasticPools.Get(resourceGroup.Name, server.Name, epName); SqlManagementTestUtilities.ValidateElasticPool(epInput2, returnedEp, epName); epa = sqlClient.ElasticPoolActivities.ListByElasticPool(resourceGroup.Name, server.Name, epName); Assert.NotNull(epa); Assert.Equal(2, epa.Count()); Assert.Equal(1, epa.Where(a => a.Operation == "CREATE").Count()); Assert.Equal(1, epa.Where(a => a.Operation == "UPDATE").Count()); // Verify pool has updated HighAvailabilityReplicaCount // Assert.Equal(2, returnedEp.HighAvailabilityReplicaCount); // Update Hyperscale pool SLO // dynamic epInput3 = createModelFunc(); epInput3.Sku = new Microsoft.Azure.Management.Sql.Models.Sku("HS_Gen5_8"); returnedEp = updateFunc(resourceGroup.Name, server.Name, epName, epInput3); SqlManagementTestUtilities.ValidateElasticPool(epInput2, returnedEp, epName); epa = sqlClient.ElasticPoolActivities.ListByElasticPool(resourceGroup.Name, server.Name, epName); Assert.NotNull(epa); Assert.Equal(3, epa.Count()); Assert.Equal(1, epa.Where(a => a.Operation == "CREATE").Count()); Assert.Equal(2, epa.Where(a => a.Operation == "UPDATE").Count()); // Verify pool has same HighAvailabilityReplicaCount // Assert.Equal(2, returnedEp.HighAvailabilityReplicaCount); // Verify pool has updated SLO // Assert.Equal(8, returnedEp.Sku.Capacity); }
private void TestUpdateElasticPool <TUpdateModel>( SqlManagementClient sqlClient, ResourceGroup resourceGroup, Server server, Func <TUpdateModel> createModelFunc, Func <string, string, string, TUpdateModel, ElasticPool> updateFunc) { Dictionary <string, string> tags = new Dictionary <string, string>() { { "tagKey1", "TagValue1" } }; // Create a elasticPool with parameters Tags // string epName = SqlManagementTestUtilities.GenerateName(); var epInput = new ElasticPool() { Location = server.Location, Sku = new Microsoft.Azure.Management.Sql.Models.Sku("StandardPool"), Tags = tags, DatabaseDtuMax = 20, DatabaseDtuMin = 0 }; var returnedEp = sqlClient.ElasticPools.CreateOrUpdate(resourceGroup.Name, server.Name, epName, epInput); SqlManagementTestUtilities.ValidateElasticPool(epInput, returnedEp, epName); var epa = sqlClient.ElasticPoolActivities.ListByElasticPool(resourceGroup.Name, server.Name, epName); Assert.NotNull(epa); Assert.Equal(1, epa.Count()); Assert.Equal(1, epa.Where(a => a.Operation == "CREATE").Count()); // Update elasticPool Dtu // dynamic epInput2 = createModelFunc(); epInput2.Sku = returnedEp.Sku; epInput2.Sku.Capacity = 200; returnedEp = updateFunc(resourceGroup.Name, server.Name, epName, epInput2); SqlManagementTestUtilities.ValidateElasticPool(epInput2, returnedEp, epName); epa = sqlClient.ElasticPoolActivities.ListByElasticPool(resourceGroup.Name, server.Name, epName); Assert.NotNull(epa); Assert.Equal(2, epa.Count()); Assert.Equal(1, epa.Where(a => a.Operation == "CREATE").Count()); Assert.Equal(1, epa.Where(a => a.Operation == "UPDATE").Count()); // Update elasticPool Dtu Max // dynamic epInput3 = createModelFunc(); epInput3.Sku = returnedEp.Sku; epInput3.DatabaseDtuMax = 100; returnedEp = updateFunc(resourceGroup.Name, server.Name, epName, epInput3); SqlManagementTestUtilities.ValidateElasticPool(epInput3, returnedEp, epName); epa = sqlClient.ElasticPoolActivities.ListByElasticPool(resourceGroup.Name, server.Name, epName); Assert.NotNull(epa); Assert.Equal(3, epa.Count()); Assert.Equal(1, epa.Where(a => a.Operation == "CREATE").Count()); Assert.Equal(2, epa.Where(a => a.Operation == "UPDATE").Count()); // Update elasticPool Dtu Min // dynamic epInput4 = createModelFunc(); epInput4.Sku = returnedEp.Sku; epInput4.DatabaseDtuMin = 10; returnedEp = updateFunc(resourceGroup.Name, server.Name, epName, epInput4); SqlManagementTestUtilities.ValidateElasticPool(epInput4, returnedEp, epName); epa = sqlClient.ElasticPoolActivities.ListByElasticPool(resourceGroup.Name, server.Name, epName); Assert.NotNull(epa); Assert.Equal(4, epa.Count()); Assert.Equal(1, epa.Where(a => a.Operation == "CREATE").Count()); Assert.Equal(3, epa.Where(a => a.Operation == "UPDATE").Count()); // Update elasticPool Maintenance Configuration Id dynamic epInput5 = createModelFunc(); epInput5.MaintenanceConfigurationId = SqlManagementTestUtilities.GetTestMaintenanceConfigurationId(sqlClient.SubscriptionId); returnedEp = updateFunc(resourceGroup.Name, server.Name, epName, epInput5); SqlManagementTestUtilities.ValidateElasticPool(epInput5, returnedEp, epName); epa = sqlClient.ElasticPoolActivities.ListByElasticPool(resourceGroup.Name, server.Name, epName); Assert.NotNull(epa); Assert.Equal(5, epa.Count()); Assert.Equal(1, epa.Where(a => a.Operation == "CREATE").Count()); Assert.Equal(4, epa.Where(a => a.Operation == "UPDATE").Count()); }
public async Task TestCancelUpdateElasticPoolOperation() { /* * * In this test we only test the cancel operation on resize pool from Premium to Premium * since currently we only support Cancel pool resize operation on Premium <-> Premium * */ string testPrefix = "sqlelasticpoollistcanceloperation-"; using (SqlManagementTestContext context = new SqlManagementTestContext(this)) { ResourceGroup resourceGroup = context.CreateResourceGroup("West Europe"); Server server = context.CreateServer(resourceGroup, "westeurope"); SqlManagementClient sqlClient = context.GetClient <SqlManagementClient>(); Dictionary <string, string> tags = new Dictionary <string, string>() { { "tagKey1", "TagValue1" } }; // Create a premium elastic pool with required parameters string epName = SqlManagementTestUtilities.GenerateName(); var epInput = new ElasticPool() { Location = server.Location, Tags = tags, }; var elasticPool = sqlClient.ElasticPools.CreateOrUpdate(resourceGroup.Name, server.Name, epName, epInput); SqlManagementTestUtilities.ValidateElasticPool(epInput, elasticPool, epName); Assert.NotNull(elasticPool); // Update elastic pool to Premium with 250 DTU var epUpdateReponse = sqlClient.ElasticPools.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroup.Name, server.Name, epName, new ElasticPool() { Location = server.Location, Tags = tags }); if (HttpMockServer.Mode == HttpRecorderMode.Record) { Thread.Sleep(TimeSpan.FromSeconds(15)); } // Get the pool update operation for new added properties on elastic pool operations: ETA, Operation Description and IsCancellable // Expected they have null value since not been updated by operation progress AzureOperationResponse <IPage <ElasticPoolOperation> > response = sqlClient.ElasticPoolOperations.ListByElasticPoolWithHttpMessagesAsync(resourceGroup.Name, server.Name, epName).Result; Assert.Equal(HttpStatusCode.OK, response.Response.StatusCode); IList <ElasticPoolOperation> responseObject = response.Body.ToList(); Assert.Single(responseObject); Assert.NotNull(responseObject[0].PercentComplete); Assert.NotNull(responseObject[0].EstimatedCompletionTime); Assert.NotNull(responseObject[0].Description); Assert.NotNull(responseObject[0].IsCancellable); // Cancel the elastic pool update operation string requestId = responseObject[0].Name; sqlClient.ElasticPoolOperations.Cancel(resourceGroup.Name, server.Name, epName, Guid.Parse(requestId)); CloudException ex = await Assert.ThrowsAsync <CloudException>(() => sqlClient.GetPutOrPatchOperationResultAsync(epUpdateReponse.Result, new Dictionary <string, List <string> >(), CancellationToken.None)); Assert.Contains("OperationCancelled", ex.Body.Code); // Make sure the elastic pool is not updated due to cancel operation var epGetResponse = sqlClient.ElasticPools.Get(resourceGroup.Name, server.Name, epName); Assert.Equal(125, epGetResponse.Dtu); Assert.Equal("Premium", epGetResponse.Edition); } }
public virtual ElasticPoolsCreateOrUpdateOperation StartCreateOrUpdate(string resourceGroupName, string serverName, string elasticPoolName, ElasticPool parameters, CancellationToken cancellationToken = default) { if (resourceGroupName == null) { throw new ArgumentNullException(nameof(resourceGroupName)); } if (serverName == null) { throw new ArgumentNullException(nameof(serverName)); } if (elasticPoolName == null) { throw new ArgumentNullException(nameof(elasticPoolName)); } if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } using var scope = _clientDiagnostics.CreateScope("ElasticPoolsOperations.StartCreateOrUpdate"); scope.Start(); try { var originalResponse = RestClient.CreateOrUpdate(resourceGroupName, serverName, elasticPoolName, parameters, cancellationToken); return(new ElasticPoolsCreateOrUpdateOperation(_clientDiagnostics, _pipeline, RestClient.CreateCreateOrUpdateRequest(resourceGroupName, serverName, elasticPoolName, parameters).Request, originalResponse)); } catch (Exception e) { scope.Failed(e); throw; } }