/// <summary>
        /// Deletes the rows associated with the collection of SPIDs for the specified shardlet.
        /// </summary>
        /// <param name="shardlet">The shardlet.</param>
        /// <param name="spids">The spids.</param>
        public void Delete(Shardlet shardlet, IEnumerable <short> spids)
        {
            var array   = spids.ToArray();
            var batches = Enumerable.Range(0, array.Count()).GroupBy(i => i / BatchSize, i => array[i]);

            var partitionKey = shardlet.DistributionKey.ToString(CultureInfo.InvariantCulture);

            foreach (var batch in batches)
            {
                var batchOperation = new TableBatchOperation();
                foreach (var spid in batch)
                {
                    var rowKey = AzureShardletConnection.GetRowKey(shardlet.Catalog, spid);
                    var entity =
                        new DynamicTableEntity
                    {
                        RowKey       = rowKey,
                        PartitionKey = partitionKey,
                        ETag         = "*"
                    };

                    batchOperation.Delete(entity);
                }

                RetryPolicyFactory.GetDefaultAzureStorageRetryPolicy()
                .ExecuteAction(() => _table.ExecuteBatch(batchOperation));

                foreach (var spid in batch)
                {
                    AzureCache.Remove(GetCacheKey(_cacheType,
                                                  partitionKey,
                                                  AzureShardletConnection.GetRowKey(shardlet.Catalog, spid)));
                }
            }
        }
        /// <summary>
        /// Deletes the specified azure shardlet connection.
        /// </summary>
        /// <param name="azureShardletConnection">The azure shardlet connection.</param>
        public void Delete(AzureShardletConnection azureShardletConnection)
        {
            RetryPolicyFactory.GetDefaultAzureStorageRetryPolicy()
            .ExecuteAction(() => _table.Execute(TableOperation.Delete(azureShardletConnection)));

            AzureCache.Remove(GetCacheKey(_cacheType, azureShardletConnection));
        }
        /// <summary>
        /// Deletes the shardlet connections older than the specified UTC Date and Time.
        /// </summary>
        /// <param name="utcDateTime">The UTC date time.</param>
        public void Delete(DateTime utcDateTime)
        {
            var condition = TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.LessThanOrEqual,
                                                                      utcDateTime);

            var query =
                new TableQuery()
                .Where(condition)
                .Select(new[] { "PartitionKey", "RowKey" });

            var result = _table.ExecuteQuery(query).ToArray();

            var array   = result.ToArray();
            var batches = Enumerable.Range(0, array.Count()).GroupBy(i => i / BatchSize, i => array[i]);

            foreach (var batch in batches)
            {
                var batchOperation = new TableBatchOperation();
                foreach (var connection in batch)
                {
                    var entity =
                        new DynamicTableEntity
                    {
                        RowKey       = connection.RowKey,
                        PartitionKey = connection.PartitionKey,
                        ETag         = "*"
                    };

                    batchOperation.Delete(entity);
                }

                RetryPolicyFactory.GetDefaultAzureStorageRetryPolicy()
                .ExecuteAction(() => _table.ExecuteBatch(batchOperation));

                foreach (var connection in batch)
                {
                    AzureCache.Remove(GetCacheKey(_cacheType, connection.PartitionKey, connection.RowKey));
                }
            }
        }
Example #4
0
        /// <summary>
        /// Deletes the specified azure shardlet.
        /// </summary>
        /// <param name="azureShardlet">The azure shardlet.</param>
        public void Delete(AzureShardlet azureShardlet)
        {
            _table.Execute(TableOperation.Delete(azureShardlet));

            AzureCache.Remove(GetCacheKey(_cacheType, azureShardlet));
        }