async Task ProcessRequest(IBulkRetryRequest request) { var batchesWithLastAttempt = await GetRequestedBatches(request).ConfigureAwait(false); var batches = batchesWithLastAttempt.Item1; var latestAttempt = batchesWithLastAttempt.Item2; var totalMessages = batches.Sum(b => b.Length); if (!OperationManager.IsOperationInProgressFor(request.RequestId, request.RetryType) && totalMessages > 0) { var numberOfMessagesAdded = 0; await OperationManager.Prepairing(request.RequestId, request.RetryType, totalMessages) .ConfigureAwait(false); for (var i = 0; i < batches.Count; i++) { await StageRetryByUniqueMessageIds(request.RequestId, request.RetryType, batches[i], request.StartTime, latestAttempt, request.Originator, GetBatchName(i + 1, batches.Count, request.Originator), request.Classifier) .ConfigureAwait(false); numberOfMessagesAdded += batches[i].Length; await OperationManager.PreparedBatch(request.RequestId, request.RetryType, numberOfMessagesAdded) .ConfigureAwait(false); } } }
void ProcessRequest(IBulkRetryRequest request) { DateTime latestAttempt; var batches = GetRequestedBatches(request, out latestAttempt); var totalMessages = batches.Sum(b => b.Length); if (!RetryOperationManager.IsOperationInProgressFor(request.RequestId, request.RetryType) && totalMessages > 0) { var numberOfMessagesAdded = 0; RetryOperationManager.Prepairing(request.RequestId, request.RetryType, totalMessages); for (var i = 0; i < batches.Count; i++) { StageRetryByUniqueMessageIds(request.RequestId, request.RetryType, batches[i], request.StartTime, latestAttempt, request.Originator, GetBatchName(i + 1, batches.Count, request.Originator), request.Classifier); numberOfMessagesAdded += batches[i].Length; RetryOperationManager.PreparedBatch(request.RequestId, request.RetryType, numberOfMessagesAdded); } } }
IList <string[]> GetRequestedBatches(IBulkRetryRequest request, out DateTime latestAttempt) { var response = new List <string[]>(); var currentBatch = new List <string>(BatchSize); latestAttempt = DateTime.MinValue; using (var session = store.OpenSession()) using (var stream = request.GetDocuments(session)) { while (stream.MoveNext()) { var current = stream.Current.Document; currentBatch.Add(current.UniqueMessageId); if (currentBatch.Count == BatchSize) { response.Add(currentBatch.ToArray()); currentBatch.Clear(); } var lastDocumentAttempt = current.ProcessingAttempts.Select(x => x.FailureDetails.TimeOfFailure).Max(); if (lastDocumentAttempt > latestAttempt) { latestAttempt = lastDocumentAttempt; } } if (currentBatch.Any()) { response.Add(currentBatch.ToArray()); } } return(response); }
async Task <Tuple <List <string[]>, DateTime> > GetRequestedBatches(IBulkRetryRequest request) { var response = new List <string[]>(); var currentBatch = new List <string>(BatchSize); var latestAttempt = DateTime.MinValue; using (var session = store.OpenAsyncSession()) using (var stream = await request.GetDocuments(session).ConfigureAwait(false)) { while (await stream.MoveNextAsync().ConfigureAwait(false)) { var current = stream.Current.Document; currentBatch.Add(current.UniqueMessageId); if (currentBatch.Count == BatchSize) { response.Add(currentBatch.ToArray()); currentBatch.Clear(); } var lastDocumentAttempt = current.ProcessingAttempts.Select(x => x.FailureDetails.TimeOfFailure).Max(); if (lastDocumentAttempt > latestAttempt) { latestAttempt = lastDocumentAttempt; } } if (currentBatch.Any()) { response.Add(currentBatch.ToArray()); } } return(Tuple.Create(response, latestAttempt)); }
async Task <Tuple <List <string[]>, DateTime> > GetRequestedBatches(IBulkRetryRequest request) { var response = new List <string[]>(); var currentBatch = new HashSet <string>(StringComparer.OrdinalIgnoreCase); var latestAttempt = DateTime.MinValue; using (var session = store.OpenAsyncSession()) using (var stream = await request.GetDocuments(session).ConfigureAwait(false)) { while (await stream.MoveNextAsync().ConfigureAwait(false)) { var current = stream.Current.Document; currentBatch.Add(current.UniqueMessageId); if (currentBatch.Count == BatchSize) { response.Add(currentBatch.ToArray()); currentBatch.Clear(); } var lastDocumentAttempt = current.LatestTimeOfFailure; if (lastDocumentAttempt > latestAttempt) { latestAttempt = lastDocumentAttempt; } } if (currentBatch.Count > 0) { response.Add(currentBatch.ToArray()); } } return(Tuple.Create(response, latestAttempt)); }