Allow consumers to choose BoundedChannelFullMode #54
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR exposes BoundedChannelFullMode
This allows consumers to decide certain trade offs themselves.
Here are four example all pushing a million documents to the channel in a tight loop (extreme case of overproducing).
BoundedChannelFullMode.Wait
is still the default but in these cases where we extremely overproduce it can allocate more then expected see: https://github.com/dotnet/runtime/blob/fadd8313653f71abd0068c8bf914be88edb2c8d3/src/libraries/System.Threading.Channels/src/System/Threading/Channels/BoundedChannel.cs#L609A downside of
BoundedChannelFullMode.DropWrite
is thatTryWrite
on aBoundedChannel
will always return true: https://github.com/dotnet/runtime/blob/fadd8313653f71abd0068c8bf914be88edb2c8d3/src/libraries/System.Threading.Channels/src/System/Threading/Channels/BoundedChannel.cs#L428 and there won't be any notifications of items that failed to write.On a dataset of a million documents using the following buffer options:
default scenario
default scenario with DropWrite
constraint scenario
While successful it takes quite a bit longer to index all million items.
constraint scenario with DropWrite