Get columnar example to non-realloc'ing state
#646
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.
Changes made to timely and
examples/columnar.rsso that the example can run indefinitely without callingreallocin steady state. Concretely,results in (after however long you like)
The changes are not all great. In particular, the changes to
thread::Pullerfeeds allocations back to the pusher from which it received them, which has the potential to leak some amount of memory, if the pusher is no longer active. But if you don't have this, the pipeline channel is a moment where allocations leave the system (the recipient has nothing it can do but drop them).The other changes seem pretty good, but worth discussing. Mostly just a bit more care around exactly when we overwrite containers, and restricting that to moments where we are more confident that we aren't electing to lose allocated containers. Worth understanding, as "fixing these bugs" has the potential to look like having
thread::Pullerreturn containers into a length-one buffer: we sit on a bit more memory than before, although we probably intended to do so.One thought was that containers have
extractandfinish, but they don't have anactivate, or some other signal to indicate that now is a good time to prep a buffer from storage. TheCapacityContainerBuilderfor example has acurrentandempty, both of which sit on resources and can't perfectly navigate the moments at which they should swap. E.g. once fullcurrentgoes in topendingand is refilled fromempty, and eventuallypendingdrains in toemptyand is revealed, but just after that moment you'd like to moveemptytocurrent, which we cannot easily do at the moment.