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.rs
so that the example can run indefinitely without callingrealloc
in steady state. Concretely,results in (after however long you like)
The changes are not all great. In particular, the changes to
thread::Puller
feeds 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::Puller
return 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
extract
andfinish
, but they don't have anactivate
, or some other signal to indicate that now is a good time to prep a buffer from storage. TheCapacityContainerBuilder
for example has acurrent
andempty
, both of which sit on resources and can't perfectly navigate the moments at which they should swap. E.g. once fullcurrent
goes in topending
and is refilled fromempty
, and eventuallypending
drains in toempty
and is revealed, but just after that moment you'd like to moveempty
tocurrent
, which we cannot easily do at the moment.