protected override ArraySegment RetryBuffer()

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);
	}