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); }
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); }