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