/// <summary> /// Driver function for bulk import. /// </summary> /// <returns></returns> private async Task RunBulkImportAndBulkDeleteAsync() { // Import documents into the collection await this.RunBulkImport(); // Fetch <PartitionKey><DocumentId> tuples to delete in bulk List <Tuple <string, string> > pkIdTuplesToDelete = GeneratePartitionKeyDocumentIdTuplesToBulkDelete(); long totalNumberOfDocumentsDeleted = 0; double totalRequestUnitsConsumed = 0; double totalTimeTakenSec = 0; BulkDeleteResponse bulkDeleteResponse = null; BulkExecutor bulkExecutor = new BulkExecutor(this.client, this.dataCollection); await bulkExecutor.InitializeAsync(); try { bulkDeleteResponse = await bulkExecutor.BulkDeleteAsync(pkIdTuplesToDelete); totalNumberOfDocumentsDeleted = bulkDeleteResponse.NumberOfDocumentsDeleted; totalRequestUnitsConsumed = bulkDeleteResponse.TotalRequestUnitsConsumed; totalTimeTakenSec = bulkDeleteResponse.TotalTimeTaken.TotalSeconds; } catch (DocumentClientException de) { Trace.TraceError("Document client exception: {0}", de); } catch (Exception e) { Trace.TraceError("Exception: {0}", e); } Trace.WriteLine("\n\n--------------------------------------------------------------------- "); Trace.WriteLine("Executing bulk delete:"); Trace.WriteLine("--------------------------------------------------------------------- "); Trace.WriteLine("\n\nOverall summary of bulk delete:"); Trace.WriteLine("--------------------------------------------------------------------- "); Trace.WriteLine(String.Format("Deleted {0} docs @ {1} writes/s, {2} RU/s in {3} sec", totalNumberOfDocumentsDeleted, Math.Round(totalNumberOfDocumentsDeleted / totalTimeTakenSec), Math.Round(totalRequestUnitsConsumed / totalTimeTakenSec), totalTimeTakenSec)); Trace.WriteLine(String.Format("Average RU consumption per document delete: {0}", (totalRequestUnitsConsumed / totalNumberOfDocumentsDeleted))); Trace.WriteLine("--------------------------------------------------------------------- \n"); //----------------------------------------------------------------------------------------------- }
public async Task DeleteAsync(IEnumerable <string> ids) { var documentCollection = await _documentClient.ReadDocumentCollectionAsync(GetCollectionUri()).ConfigureAwait(false); var bulkExecutor = new BulkExecutor(_documentClient as Documents.Client.DocumentClient, documentCollection); await bulkExecutor.InitializeAsync().ConfigureAwait(false); var entries = ids.Select(x => new Tuple <string, string>(x, x)).ToList(); BulkDeleteResponse bulkDeleteResponse = null; do { bulkDeleteResponse = await bulkExecutor .BulkDeleteAsync(entries) .ConfigureAwait(false); } while (bulkDeleteResponse.NumberOfDocumentsDeleted < entries.Count && bulkDeleteResponse.NumberOfDocumentsDeleted > 0); }
public BulkInsertOpeartionResult BulkDeleteDocuments(string query, int?deleteBatchSize = null, CancellationToken cancellationToken = default(CancellationToken)) { _metaDataOperator.AddActivity(_databaseName, _collectionName, DateTimeOffset.Now, ActivityStrength.Hot).Wait(); lock (bulkDeleteLock) { var scaleOperation = ScaleLogic.ScaleUpMaxCollectionAsync(_client, _metaDataOperator, _databaseName, _collectionName, _minRu, _maxRu).GetAwaiter().GetResult(); var response = _bulkExecutor.BulkDeleteAsync(query, deleteBatchSize, cancellationToken).GetAwaiter().GetResult(); return(new BulkInsertOpeartionResult { ScaleOperations = new List <ScaleOperation>() { scaleOperation }, OperationSuccess = true }); } }
// Excluding from CodeCoverage here because this function persists in showing no matter if the file is being ignored public async Task <BulkDeleteResponse> BulkDeleteAsync(List <Tuple <string, string> > pkIdTuplesToDelete, int?deleteBatchSize = null, CancellationToken cancellationToken = default) { return(await bulkExecutor.BulkDeleteAsync(pkIdTuplesToDelete, deleteBatchSize, cancellationToken)); }