Free the changes that have been acknowledged by all readers (on volatile topics) [19800] #71
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.
In the previous version, the changes on reliable-volatile topics were never removed from the RTPS writers' histories. This lead to the congestion of RTPS writers' histories and, at times, to memory exhaustion issues. In this version, RTPS writers free changes (on reliable-volatile topics) once they have been acknowledged by all readers.
In the following example, we launch a DDS Router with two RTPS participants, and publish a hundred 1MB messages on a reliable-volatile topic. Here's the heap memory consumption of the DDS Router before and after this update.
Before (Peak Heap Memory 99.5 MiB):
After (Peak Heap Memory 5.9 MiB):
This version also includes a bugfix. In the previous version, RTPS CommonWriters would free space in their full-histories after adding a change. This meant that when the depth of the history was set to 1, for example, TRANSIENT-LOCAL wouldn't work, since, after adding the change, the writer would identify its history as full and free space for another change (deleting the previous one). Now, however, freeing space in full histories is done before adding a change, which fixes the problem.