in src/Elastic.Channels/ResponseItemsBufferedChannelBase.cs [64:90]
protected override ArraySegment<TEvent> RetryBuffer(TResponse response, ArraySegment<TEvent> events,
IWriteTrackingBuffer consumedBufferStatistics
)
{
if (!Retry(response)) return EmptyArraySegments<TEvent>.Empty;
var backOffWholeRequest = RetryAllItems(response);
// if we are not retrying the whole request find out if individual items need retrying
if (backOffWholeRequest) return events;
var zipped = Zip(response, events);
var retryEvents = zipped
.Where(t => RetryEvent(t))
.Select(t => t.Item1)
.ToArray();
// report any events that are going to be dropped
if (Options.ServerRejectionCallback != null)
{
var rejected = zipped
.Where(t => RejectEvent(t) && !RetryEvent(t))
.ToList();
if (rejected.Count > 0) Options.ServerRejectionCallback(rejected);
}
return new ArraySegment<TEvent>(retryEvents);
}