private async Task RunAsync() { await GetCosmosDbAccount(_config.ResourceGroup, _config.CosmosDbName, _config.Regions); Console.WriteLine($"CosmosDbFailover starting..."); Console.WriteLine($"Cosmos DB: {_config.CosmosDbName}"); Console.WriteLine($"Regions:"); foreach (var region in _cosmosDbAccount.Regions) { Console.WriteLine($"\t{region.LocationName}"); } Console.WriteLine($"Collection: {_config.DatabaseName}.{_config.CollectionName}"); Console.WriteLine($"RU's: {_config.CollectionThroughput}"); Console.WriteLine("Hit Enter to start failover"); Console.WriteLine("Hit Esc to exit test"); var cosmosDbEndpoint = new Uri(_cosmosDbAccount.EndPoint); var replicaClients = new List <FailoverTestClient>(); var defaultClient = await FailoverTestClient.GetFailoverTestClient(cosmosDbEndpoint, _cosmosDbAccount.MasterKey, _config.DatabaseName, _config.CollectionName, _config.CollectionThroughput); // Skip the first region, which is the primary region, to get replica regions var replicaRegions = _cosmosDbAccount.Regions.OrderBy(r => r.FailoverPriority).Skip(1); // Create DocumentDb API client in each replica region foreach (var replicaRegion in replicaRegions) { var replicaClient = await FailoverTestClient.GetFailoverTestClient(cosmosDbEndpoint, _cosmosDbAccount.MasterKey, _config.DatabaseName, _config.CollectionName, _config.CollectionThroughput, new List <string>() { replicaRegion.LocationName }); replicaClients.Add(replicaClient); } try { // Create DocumentDb API client using default region var tasks = new List <Task>(); var readConsoleTask = ReadConsoleKeys(); tasks.Add(readConsoleTask); var writeTask = UpdateDocument(defaultClient, replicaClients); tasks.Add(writeTask); var failoverTask = Failover(); tasks.Add(failoverTask); await Task.WhenAll(tasks.ToArray()); } finally { if (_config.CleanupDatabaseOnFinish) { await DocumentDbUtility.DeleteDatabase(defaultClient.DocumentClient, _config.DatabaseName); } defaultClient.Dispose(); foreach (var replicaClient in replicaClients) { replicaClient.Dispose(); } if (_config.CleanupAcountOnFinish) { Console.WriteLine($"Deleting {_cosmosDbAccount.EndPoint}"); await _cosmosDbAccount.DeleteAsync(); } } }
private FailoverTestClient(Uri cosmosDbEndpoint, string authorizationKey, IEnumerable <string> regions = null) { _client = DocumentDbUtility.GetDocumentDbClient(cosmosDbEndpoint, authorizationKey, regions); }