public CosmosDBErrorLogTransferStatistics(IErrorDetailsProvider errorDetailsProvider, IReadOnlyDictionary <string, string> destConfiguration, string userProvidedLogDestination, CancellationToken cancellation) : base(errorDetailsProvider) { string destConnectionString; if (!string.IsNullOrEmpty(userProvidedLogDestination)) { destConnectionString = userProvidedLogDestination; } if (destConfiguration.TryGetValue("ConnectionString", out destConnectionString) && destConnectionString.Contains(".table.cosmos")) { CloudStorageAccount storageAccount = CloudStorageAccount.Parse(destConnectionString); TableConnectionPolicy connectionPolicy = new TableConnectionPolicy() { UseDirectMode = true, UseTcpProtocol = true, }; remoteLogger = remoteLoggingClientProvider.CreateRemoteLoggingClient(storageAccount, connectionPolicy); remoteLogger.CreateRemoteLoggingTableIfNotExists(cancellation); } else { throw new Exception("Cosmos Table remote logging not possible. Destination needs to be a Cosmos Tables endpoint or" + "provide connection string with the" + "CosmosTableLogConnectionString flag to log."); } }
/// <summary> /// Run common Table CRUD and query operations using the Azure Cosmos DB Table API endpoints /// </summary> /// <param name="args">Command line arguments</param> public static void Main(string[] args) { string connectionString = ConfigurationManager.AppSettings["CosmosDBStorageConnectionString"]; Boolean useAzureTablestorage = (args.Length >= 1 && args[0] == "Standard"); if (useAzureTablestorage) { connectionString = ConfigurationManager.AppSettings["StandardStorageConnectionString"]; } int numIterations = 100; if (args.Length >= 2) { numIterations = int.Parse(args[1]); } CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString); TableConnectionPolicy tableConnectionPolicy = new TableConnectionPolicy(); tableConnectionPolicy.EnableEndpointDiscovery = true; tableConnectionPolicy.UseDirectMode = true; tableConnectionPolicy.UseTcpProtocol = true; CloudTableClient tableClient = useAzureTablestorage ? storageAccount.CreateCloudTableClient() : storageAccount.CreateCloudTableClient(tableConnectionPolicy, Microsoft.Azure.CosmosDB.ConsistencyLevel.Session); Program p = new Program(); p.Run(tableClient, numIterations, useAzureTablestorage); }
public Task InitializeAsync(CosmosDbConfig cosmosDbConfig, bool disasterRecoverySupported) { if (string.IsNullOrWhiteSpace(cosmosDbConfig.ConnectionString)) { throw new ArgumentException(nameof(cosmosDbConfig.ConnectionString)); } if (string.IsNullOrWhiteSpace(cosmosDbConfig.TableName)) { throw new ArgumentException(nameof(cosmosDbConfig.TableName)); } CloudStorageAccount storageAccount = CloudStorageAccount.Parse(cosmosDbConfig.ConnectionString); CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); var tableConnectionPolicy = new TableConnectionPolicy(); tableConnectionPolicy.MaxRetryWaitTimeInSeconds = cosmosDbConfig.RetryIntervalInSeconds; tableConnectionPolicy.MaxConnectionLimit = cosmosDbConfig.MaxConnectionLimit; tableConnectionPolicy.EnableEndpointDiscovery = disasterRecoverySupported; tableConnectionPolicy.MaxRetryAttemptsOnThrottledRequests = cosmosDbConfig.RetryCountOnThrottling; tableConnectionPolicy.UseTcpProtocol = true; // Create a table client for interacting with the table service this.cloudTableClient = storageAccount.CreateCloudTableClient(tableConnectionPolicy, Microsoft.Azure.CosmosDB.ConsistencyLevel.Session); this.IsInitialized = true; cloudTable = cloudTableClient.GetTableReference(cosmosDbConfig.TableName); var cloudtable = (CloudTable)cloudTable; return(cloudtable.CreateIfNotExistsAsync()); }
public TableAPIBulkSinkAdapter(string connectionString, string tableName, bool overwrite, long maxInputBufferSizeInBytes, int throughput, int batchSize) { _connectionString = connectionString; _tableName = tableName; _overwrite = overwrite; _maxInputBufferSizeInBytes = maxInputBufferSizeInBytes; _throughput = throughput; _maxLengthInBytesPerBatch = batchSize; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_connectionString); TableConnectionPolicy connectionPolicy = new TableConnectionPolicy() { UseDirectMode = true, UseTcpProtocol = true, }; CloudTableClient tableClient = storageAccount.CreateCloudTableClient(connectionPolicy: connectionPolicy); cloudtable = tableClient.GetTableReference(_tableName); requestOptions = new TableRequestOptions() { RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(3), 3) }; }
public static CloudTableClient GenerateCloudTableClient(string accountName, string accountEndpoint, string accountKey, string region) { Uri uri = new Uri(accountEndpoint); TableConnectionPolicy connectionPolicy = new TableConnectionPolicy(); connectionPolicy.UseTcpProtocol = true; connectionPolicy.UseMultipleWriteLocations = true; connectionPolicy.PreferredLocations.Add(region); StorageCredentials credentials = new StorageCredentials(accountName, accountKey); StorageUri storageUri = new StorageUri(uri); return(new CloudTableClient(storageUri, credentials, connectionPolicy, ConsistencyLevel.Eventual)); }
public CosmosTablesStorage(string tableName, string connectionString, int throughputUnits, IConcurrencyControl concurrency, IPartitionProvider <TKey> partitioningProvider, ITableProvider tableProvider, IKeyConverter <TKey> keyConverter) { _cc = concurrency; _tableName = tableName; _account = CloudStorageAccount.Parse(connectionString); var policy = new TableConnectionPolicy { EnableEndpointDiscovery = true, MaxConnectionLimit = 1000, MaxRetryAttemptsOnThrottledRequests = 5, MaxRetryWaitTimeInSeconds = 10, UseDirectMode = false, UseTcpProtocol = false }; _client = _account.CreateCloudTableClient(policy, ConsistencyLevel.Eventual); _partitioningProvider = partitioningProvider; _tableProvider = tableProvider; _keyConverter = keyConverter; _defaultSelection = new[] { new StorageSelection <TKey, TEntry, IStorage <TKey, TEntry> >(this) }; _tables = new Dictionary <string, CloudTable>(); _client.DefaultRequestOptions.PayloadFormat = TablePayloadFormat.JsonNoMetadata; _throughputUnits = throughputUnits; }
/// <summary> /// Create a new remote logger /// </summary> /// <param name="account">cloudstorage account details</param> /// <param name="connectionPolicy">connection policy details</param> /// <returns></returns> public RemoteLogging CreateRemoteLoggingClient(CloudStorageAccount account, TableConnectionPolicy connectionPolicy) { return(new RemoteLogging(account, connectionPolicy)); }
/// <summary> /// Initializes a new instance of the RemoteLogging class. /// </summary> /// <param name="storageAccount">storage account object</param> /// <param name="connectionPolicy">additional connection policies</param> public RemoteLogging(CloudStorageAccount storageAccount, TableConnectionPolicy connectionPolicy) { CloudTableClient tcMigrationLogger = storageAccount.CreateCloudTableClient(connectionPolicy: connectionPolicy); migrationLogger = tcMigrationLogger.GetTableReference(tableName); }