示例#1
0
 /// <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);
     }
 }
示例#2
0
 /// <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());
 }
示例#3
0
        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);
        }
示例#4
0
        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());
        }
示例#5
0
        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);
            }
        }
示例#6
0
        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;
            }
        }