コード例 #1
0
 private Models.DatabaseAccountCreateUpdateParameters CreateUpdateParametersInner(Models.DatabaseAccountGetResultsInner inner)
 {
     this.EnsureFailoverIsInitialized();
     Models.DatabaseAccountCreateUpdateParameters createUpdateParametersInner =
         new Models.DatabaseAccountCreateUpdateParameters();
     createUpdateParametersInner.Location          = this.RegionName.ToLower();
     createUpdateParametersInner.ConsistencyPolicy = inner.ConsistencyPolicy;
     createUpdateParametersInner.IpRangeFilter     = inner.IpRangeFilter;
     createUpdateParametersInner.Kind         = inner.Kind;
     createUpdateParametersInner.Capabilities = inner.Capabilities;
     createUpdateParametersInner.Tags         = inner.Tags;
     createUpdateParametersInner.IsVirtualNetworkFilterEnabled = inner.IsVirtualNetworkFilterEnabled;
     createUpdateParametersInner.EnableMultipleWriteLocations  = inner.EnableMultipleWriteLocations;
     createUpdateParametersInner.EnableCassandraConnector      = inner.EnableCassandraConnector;
     createUpdateParametersInner.ConnectorOffer                     = inner.ConnectorOffer;
     createUpdateParametersInner.EnableAutomaticFailover            = inner.EnableAutomaticFailover;
     createUpdateParametersInner.DisableKeyBasedMetadataWriteAccess = inner.DisableKeyBasedMetadataWriteAccess;
     if (virtualNetworkRulesMap != null)
     {
         createUpdateParametersInner.VirtualNetworkRules = virtualNetworkRulesMap.Values.SelectMany(l => l).ToList();
         virtualNetworkRulesMap = null;
     }
     this.AddLocationsForParameters(new CreateUpdateLocationParameters(createUpdateParametersInner), this.failoverPolicies);
     return(createUpdateParametersInner);
 }
コード例 #2
0
        private async Task <Microsoft.Azure.Management.CosmosDB.Fluent.ICosmosDBAccount> DoDatabaseUpdateCreateAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            CosmosDBAccountImpl self = this;
            int         currentDelayDueToMissingFailovers = 0;
            HasLocation locationParameters;

            if (IsInCreateMode)
            {
                Models.DatabaseAccountCreateUpdateParameters createUpdateParametersInner =
                    this.CreateUpdateParametersInner(this.Inner);
                await this.Manager.Inner.DatabaseAccounts.CreateOrUpdateAsync(
                    ResourceGroupName, Name, createUpdateParametersInner);

                locationParameters = new CreateUpdateLocationParameters(createUpdateParametersInner);
            }
            else
            {
                Models.DatabaseAccountUpdateParameters updateParametersInner =
                    this.UpdateParametersInner(this.Inner);
                await this.Manager.Inner.DatabaseAccounts.UpdateAsync(
                    ResourceGroupName, Name, updateParametersInner);

                locationParameters = new UpdateLocationParameters(updateParametersInner);
            }
            this.failoverPolicies.Clear();
            this.hasFailoverPolicyChanges = false;
            bool             done            = false;
            ICosmosDBAccount databaseAccount = null;

            while (!done)
            {
                await SdkContext.DelayProvider.DelayAsync(5000, cancellationToken);

                databaseAccount = await this.Manager.CosmosDBAccounts.GetByResourceGroupAsync(
                    ResourceGroupName, Name);

                if (maxDelayDueToMissingFailovers > currentDelayDueToMissingFailovers &&
                    (databaseAccount.Id == null ||
                     databaseAccount.Id.Length == 0 ||
                     locationParameters.Locations.Count >
                     databaseAccount.Inner.FailoverPolicies.Count))
                {
                    currentDelayDueToMissingFailovers += 5000;
                    continue;
                }

                if (this.IsProvisioningStateFinal(databaseAccount.Inner.ProvisioningState))
                {
                    done = true;
                    foreach (Models.Location location in databaseAccount.ReadableReplications)
                    {
                        if (!this.IsProvisioningStateFinal(location.ProvisioningState))
                        {
                            done = false;
                            break;
                        }
                    }
                }
            }

            List <Task> childTasks = new List <Task>();

            childTasks.Add(this.privateEndpointConnections.CommitAndGetAllAsync(cancellationToken));
            childTasks.Add(this.sqlDatabases.CommitAndGetAllAsync(cancellationToken));
            childTasks.Add(this.mongoDBs.CommitAndGetAllAsync(cancellationToken));
            childTasks.Add(this.cassandraKeyspaces.CommitAndGetAllAsync(cancellationToken));
            childTasks.Add(this.gremlinDatabases.CommitAndGetAllAsync(cancellationToken));
            childTasks.Add(this.tables.CommitAndGetAllAsync(cancellationToken));
            await Task.WhenAll(childTasks);

            this.SetInner(databaseAccount.Inner);
            this.initializeFailover();
            return(databaseAccount);
        }